diff --git a/.~lock.240228_Userstory HWPA en.docx# b/.~lock.240228_Userstory HWPA en.docx#
new file mode 100644
index 0000000..a126b3f
--- /dev/null
+++ b/.~lock.240228_Userstory HWPA en.docx#	
@@ -0,0 +1 @@
+,smnc,smnc-Swift-SFX16-51G,04.03.2024 19:45,file:///home/smnc/.config/libreoffice/4;
\ No newline at end of file
diff --git a/240228_Userstory HWPA en.docx b/240228_Userstory HWPA en.docx
new file mode 100644
index 0000000..3267d56
Binary files /dev/null and b/240228_Userstory HWPA en.docx differ
diff --git a/240228_Userstory HWPA.docx b/240228_Userstory HWPA.docx
new file mode 100644
index 0000000..f164488
Binary files /dev/null and b/240228_Userstory HWPA.docx differ
diff --git a/README.md b/README.md
index 989c703..0a09c35 100644
--- a/README.md
+++ b/README.md
@@ -1,24 +1,6 @@
-# **Simple** E2E test suite with Cypress
-[![cypress-example](https://img.shields.io/endpoint?url=https://dashboard.cypress.io/badge/detailed/urshkd&style=flat&logo=cypress)](https://dashboard.cypress.io/projects/urshkd/runs) :point_left: click here to see test results on Cypress dashboard
-> **application under test:** http://angularjs.realworld.io/
 
-  🎉 Learn how to write these tests and more in our trainings. More info: [bigbyte.academy](https://bigbyte.academy) :tada:
-
-## :goal_net: Goals
-- keep it simple - no 'custom' abstractions/functions/utils/helpers (use what Cypress provides)
-- tests are easily readable
-- project is easily understandable even to people without previous JS or Cypress knowledge
-- [use shortcuts](https://docs.cypress.io/api/cypress-api/custom-commands#4-Skip-your-UI-as-much-as-possible) to avoid repeating/testing the same UI actions over and over again
-
-![image](https://user-images.githubusercontent.com/48861601/110022516-af6f2400-7d34-11eb-8b13-f21789331cb3.png)
-
-
-## :gear: Setup
-
-1. `git clone https://github.com/helenanull/cypress-example.git`
 2. cd to `cypress-example` folder and run `npm install`
 
-
 ## :heavy_check_mark: Run tests
 
 - If you installed Cypress via npm: 
@@ -39,6 +21,28 @@
 
 :file_folder: Selectors (CSS selectors) are located in `cypress/selectors` folder [only difference from cypress default project structure] - __not__ using page object model(POM) design pattern but keeping selectors (only selectors) separately [Read more](https://github.com/helenanull/cypress-example#grey_question-qa)
 
+### Stress test
+
+NOTE: this portion is dependant on having the following library installed: cypress-utils
+This is available here: https://github.com/trentrand/cypress-utils.git
+
+
+To ensure your Cypress tests are not irregularly failing with false-negatives, stress testing new test files can be a reliable way of filtering out bad test code.
+
+To stress test one or more test files, simply specify the files to run:
+
+  ```shell
+    cypress-utils stress-test specFileA specfileB
+  ```
+
+Additional command-line options may be specified, such as the sample size or number of concurrent threads:
+  ```shell
+   cypress-utils stress-test --trialCount 12 --threads 4
+  ```
+
+> See more command-line options with `cypress-utils stress-test --help`
+
+
 
 #### :hammer_and_wrench: Configuration
 Config files:
diff --git a/Userstory Editor Schulung Sulzbach Teil 1.docx b/Userstory Editor Schulung Sulzbach Teil 1.docx
new file mode 100644
index 0000000..78c07bc
Binary files /dev/null and b/Userstory Editor Schulung Sulzbach Teil 1.docx differ
diff --git a/cypress.config.js b/cypress.config.js
index 085788e..b6d7dd8 100644
--- a/cypress.config.js
+++ b/cypress.config.js
@@ -29,3 +29,20 @@ module.exports = defineConfig({
         baseUrl: 'http://angularjs.realworld.io/#'
     }
 })
+
+const { lighthouse, prepareAudit } = require("@cypress-audit/lighthouse");
+// const { pa11y } = require("@cypress-audit/pa11y");
+module.exports = {
+    e2e: {
+        baseUrl: "http://bstackdemo.com", // this is your app
+        setupNodeEvents(on, config) {
+            on("before:browser:launch", (browser = {}, launchOptions) => {
+                prepareAudit(launchOptions);
+            });
+            on("task", {
+                lighthouse: lighthouse(),
+                // pa11y: pa11y(console.log.bind(console)),
+            });
+        },
+    },
+};
\ No newline at end of file
diff --git a/cypress/e2e/HWPA/hwpa.cy.js b/cypress/e2e/HWPA/hwpa.cy.js
new file mode 100644
index 0000000..73887f0
--- /dev/null
+++ b/cypress/e2e/HWPA/hwpa.cy.js
@@ -0,0 +1,259 @@
+//import home from '../selectors/home.css'
+import robert from '../../selectors/robert.css'
+import '@cypress-audit/lighthouse/commands';
+
+describe('HWPA ticket generation', () => {
+    it('loads the correct screen', () => {
+        cy.visit('https://rengawr.de/info/info.html', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },})
+        cy.get(robert.EGovC_demo).should('be.visible')
+            .and('contain', 'li')
+        cy.get('body > div > div > details:nth-child(4) > summary').click();
+        cy.get('body > div > div > details:nth-child(4) > ul > li:nth-child(2) > a').click();
+        
+
+    })
+    
+    it('logs into user portal', () =>{
+        cy.visit('https://rengawr.de/val/index.html?DebugLevel=0&jsApp=./oc/oApp_UserPortal_oc.js&AppName=Edit&AppCode=Start&OU_Name=EGOVC&LOG_Role=USER&ynDevTools=Y', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },})
+
+        //cy.lighthouse();
+
+
+        //enter login credentials and click login button
+        cy.get('#___5___Login___-4___USR_EMail').type('robert.wagner@egovc.de');
+        cy.get('#___5___Login___-4___USR_Pass').type('Welcome1');
+        cy.get('#CLK_6').click();
+        cy.wait(3000);
+
+        //open mobility -> logistik -> HWPA
+        cy.get('#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(9)').click();
+        cy.get('#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(9) > div > details:nth-child(4) > summary > div').click();
+        cy.get('#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(9) > div > details:nth-child(4) > div > div').first().click();
+
+        cy.wait(3000);
+
+        //<<<------   1 - Kontakt page   ------>>>
+        cy.get('input.w3-check[name="ynHWK"]').check();
+        cy.get('input.w3-check[name="ynGS"]').check();
+        cy.get('input.w3-check[name="ynKFZ"]').check();
+        cy.get('input.w3-input[name="PLZ"]').type('74889');
+
+        //Speichern und Weiter
+        cy.get('.w3-button[title="Speichern und Weiter"]').click();
+        cy.wait(3000);
+
+
+        //<<<------   2 - Antrag page   ------>>>
+        cy.get('.w3-button[title="Antrag starten"]').click();
+
+        //<<<------   1 - Kontakt page   ------>>>
+        
+        //Nachname
+        //cy.get('')
+        cy.get('input.w3-input[name="USR_LastName"]').type('Grueber');
+        
+        //vorname
+        cy.get('input.w3-input[name="USR_FirstName"]').type('Hans');
+
+        //Namenszusatz (Beispiel: Freifrau, Graf)
+        cy.get('input.w3-input[name="USR_NameAddOn1"]').type('Graf');
+
+        //Vorsatzworte zum Namen (Beispiel: von, van, de)
+        cy.get('input.w3-input[name="USR_NameAddOn2"]').type('van');
+        
+        //Titel (Beispiel: Prof. Dr. med.
+        cy.get('input.w3-input[name="USR_Title"]').type('Dr.');
+        
+        //E-Mail
+        cy.get('input.w3-input[name="USR_EMail"]').invoke('val').should('contain', 'robert.wagner@egovc.de');
+
+        //Telefonisch tagsüber zu erreichen (Angabe freiwillig)
+        cy.get('input.w3-input[name="Telefon"]').invoke('val').should('contain', '072321-2636 534');
+
+        //Mobiltelefon (Angabe freiwillig)
+        cy.get('input.w3-input[name="Mobiltelefon"]').type('123123123123');
+
+        //Rückrufnummer
+        //cy.get('input.w3-input[name="CallBack"]').type('123123123123');
+        
+        //Starttermin
+        cy.get('input.w3-input[name="DateWish"]').type('2025-05-04');
+        
+        //click "Speichern und Weiter"
+        cy.get('.w3-button[title="Speichern und Weiter"]').click();
+        cy.wait(3000);
+        
+        //<<<------   2 - UNTERNEHMENSDATEN page   ------>>>
+        //Eingetragene Firmierung / Unternehmensname
+        cy.get('input.w3-input[name="ORG_Name"]').type('TestCorp123');
+
+        //Art des ausgeführten Handwerks
+        cy.get('input.w3-input[name="__Key_GenericString_2"]').type('Mahler');
+
+        //Betriebliche Steuernummer
+        cy.get('input.w3-input[name="TaxId"]').type('123123');
+
+        //Postleitzahl
+        //cy.get('input.w3-input[name="PLZ"]').type('552074');
+
+        //Ort
+        //cy.get('input.w3-input[name="Stadt"]').type('TestBurg');
+
+        //Straße
+        cy.get('input.w3-input[name="Strasse"]').type('TestStrasse');
+
+        //Hausnummer
+        cy.get('input.w3-input[name="StrasseNr"]').type('123');
+
+        //Hausnummerzusatz
+        cy.get('input.w3-input[name="StrasseNrExt"]').type('123123');
+
+        //check Handwerkskarte option
+        //cy.get('input.w3-check[name="rdGewNachweis"]').check();
+
+        //speichern und weiter
+        cy.get('.w3-button[title="Speichern und Weiter"]').click();
+        cy.wait(3000);
+
+        //<<<------   3 - Handwerkskarte page   ------>>>
+       
+        //Betreibsnummer
+        cy.get('input.w3-input[name="TaxId"]').type('123');
+
+        //upload hwpa mouse image
+        cy.get('input.fileUpload-drop-input').eq(0).selectFile('./cypress/upload_files/hwpa_mouse.png');
+        cy.get('input.fileUpload-drop-input').eq(1).selectFile('./cypress/upload_files/hwpa_mouse.png');
+
+        //Speichern und Weiter
+        cy.get('.w3-button[title="Speichern und Weiter"]').click();
+        cy.wait(3000);
+
+
+        ///<<<------   4 - Gewerbenachsweis page   ------>>>
+        //upload hwpa mouse
+        cy.get('input.fileUpload-drop-input').selectFile('./cypress/upload_files/hwpa_mouse.png');
+        
+        //Speichern und Weiter
+        cy.get('.w3-button[title="Speichern und Weiter"]').click();
+        cy.wait(3000);
+
+        //<<<------   5 - Fahrzeugphoto page   ------>>>
+        cy.get('input.fileUpload-drop-input').selectFile('./cypress/upload_files/hwpa_mouse.png');
+
+        //upload hwpa mouse
+        cy.get('input.fileUpload-drop-input').selectFile('./cypress/upload_files/hwpa_mouse.png');
+        cy.get('.w3-button[title="Speichern und Weiter"]').click();
+
+        //<<<------   6 - Zulassung page   ------>>>
+        cy.get('input.w3-input[name="idKFZ"]').type('HD ZZ 777');
+        cy.get('input.fileUpload-drop-input').selectFile('./cypress/upload_files/hwpa_mouse.png');
+        
+        //Submit request!!!
+        cy.get('.w3-button[title="Antrag senden"]').click();
+        cy.wait(3000);
+
+
+
+
+
+
+    })
+    
+    it('logs into clerk portal', () =>{
+        cy.visit('https://rengawr.de/val/index.html?DebugLevel=0&jsApp=./oc/oApp_ClerkPortal_oc.js&AppName=Edit&AppCode=Start&OU_Name=EGOVC&LOG_Role=CLERK&ynDevTools=Y', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },})
+
+        //enter login credentials and  login button
+        cy.get('#___5___Login___-4___USR_EMail').type('robert.wagner@egovc.de');
+        cy.get('#___5___Login___-4___USR_Pass').type('Welcome1');
+        cy.get('#CLK_6').click();
+        cy.wait(3000);
+
+        //open the first ticket ticket
+        cy.get('.w3-button[title="Abarbeitung starten"]').first().click();
+        
+        cy.wait(3000);
+
+        //Kontakt
+        //TODO: enter comment
+        //
+        //select ok
+        cy.get('select[name="ynPassed"]').select(1);
+        //Speichern und weiter
+        cy.get('.w3-button[title="Speichern und Weiter"]').click();
+        cy.wait(3000);
+
+        //Unternehmensdaten
+        //TODO: enter comment
+        //
+        //select ok
+        cy.get('select[name="ynPassed"]').select(1);
+        //Speichern und weiter
+        cy.get('.w3-button[title="Speichern und Weiter"]').click();
+        cy.wait(3000);
+
+        //GewerbenAchWeis
+        //TODO: enter comment
+        //
+        //verify Kopie der Handwerkskarte
+        cy.get('select[name="ynPassed"]').select(1);
+        //speichern und weiter
+        cy.get('.w3-button[title="Speichern und Weiter"]').click();
+        cy.wait(3000);
+
+        //zulassung des fahrzeugs
+        //TODO: enter comment
+        //
+        //select ok
+        cy.get('select[name="ynPassed"]').select(1);
+        //speichern und weiter
+        cy.get('.w3-button[title="Speichern und Weiter"]').click();
+        cy.wait(3000);
+
+        //photo des fahrzeugs
+        //TODO: enter comment
+        //
+        //select ok
+        cy.get('select[name="ynPassed"]').select(1);
+        //speichern und weiter
+        cy.get('.w3-button[title="Speichern und Weiter"]').click();
+        cy.wait(3000);
+
+        //Final page
+        //accept application and generate permits
+        cy.get('.w3-button[title="Speichern und Weiter"]').click();
+
+        //KFZ regestreirung
+        cy.get('.w3-button[title="Genehmigung"]').click();
+        cy.wait(3000);
+
+        //2 - Fahrzeug
+        cy.get('.w3-button[title="Speichern und Weiter"]').click();
+        cy.wait(3000);
+
+        //3 - TEXT <<>>>
+        cy.get('.w3-button[title="Speichern und Weiter"]').click();
+        cy.get('.w3-input[name="RBB_Buchungszeichen"]').type('testtesttest')
+
+        //4 - Daten
+        //Speichern und weiter
+        cy.get('.w3-button[title="Speichern und Weiter"]').click();
+        cy.wait(3000);
+
+        //4 - Daten
+        cy.get('.w3-button[title="Speichern und Weiter"]').click();
+        cy.wait(3000);
+
+        //5 - PDF
+        //Dokumente versenden
+        cy.get('.w3-button[title="Dokumente versenden"]').click();
+        cy.wait(6000);
+
+
+
+    })
+    
+    it('correctly selects Auto-Info-Prozess', () =>{
+
+
+    })
+})
diff --git a/cypress/e2e/editor/formular-editor.cy.js b/cypress/e2e/editor/formular-editor.cy.js
new file mode 100644
index 0000000..86271d0
--- /dev/null
+++ b/cypress/e2e/editor/formular-editor.cy.js
@@ -0,0 +1,105 @@
+import home from '../selectors/home.css'
+import robert from '../selectors/robert.css'
+
+describe('Home page', () => {
+    it('3.2 Formular-Elemente', () => {
+        cy.visit('http://localhost:3000/index.html?DebugLevel=0&jsApp=./oc/oApp_Editor_oc.js&APP_Prefix=Edit&AppCode=StartEditProcess&rwLib=PRD&OU_Name=EGOVC&LOG_Role=EDIT&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1&ynDevTools=Y&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },})
+        //cy.visit('https://rengawr.de/info/info.html', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },})
+        //cy.visit('https://oma@oma.de:Omnia$$2020@rengawr.de/info/info.html', auth: {username: "", password: "",},)
+        cy.get(robert.EGovC_demo).should('be.visible')
+            .and('contain', 'li')
+        
+        //click formula button
+        cy.get("#CFD-5 > div:nth-child(9) > fieldset > button").click()
+        
+        //Formular Elemente is visible and contains expected elements
+        cy.get("#gridLeft > div > div.w3-card-4").should('be.visible')
+            .and('contain', 'btGeneric')
+            .and('contain', 'GenericApiCall')
+            .and('contain', 'GenericCalc')
+            .and('contain', 'GenericCalcedJSON')
+            .and('contain', 'GenericCheck')
+            .and('contain', 'GenericDataList')
+            .and('contain', 'GenericDate')
+            .and('contain', 'GenericDate2Local')
+            .and('contain', 'GenericDigits')
+            .and('contain', 'GenericDotWord')
+            .and('contain', 'GenericFixSelect')
+            .and('contain', 'GenericFloat')
+            .and('contain', 'GenericInteger')
+            .and('contain', 'GenericJSON')
+            .and('contain', 'GenericNumber')
+            .and('contain', 'GenericPath')
+            .and('contain', 'GenericRadio')
+            .and('contain', 'GenericRow')
+            .and('contain', 'GenericSelectFromExcel')
+            .and('contain', 'GenericSelectGroup')
+            .and('contain', 'GenericSelectHTM')
+            .and('contain', 'GenericSelectHTMLeika')
+            .and('contain', 'GenericString')
+            .and('contain', 'GenericStringArray')
+            .and('contain', 'GenericText')
+            .and('contain', 'GenericTime')
+            .and('contain', 'GenericUniqueNumber')
+            .and('contain', 'GenericWord')
+            .and('contain', 'GenericYN')
+            .and('contain', 'GenericYNFadeIn')
+            .and('contain', 'GenericYNFadeOut')
+            .and('contain', 'GenericYNRow')
+
+    })
+    it('3.1.1 Neues Formular // New form', () =>{
+        
+        //load homepage
+        cy.visit('http://localhost:3000/index.html?DebugLevel=0&jsApp=./oc/oApp_Editor_oc.js&APP_Prefix=Edit&AppCode=StartEditProcess&rwLib=PRD&OU_Name=EGOVC&LOG_Role=EDIT&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1&ynDevTools=Y&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },})
+     
+        //selects a leistungen
+        cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1)").click()
+        cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1) > div > details:nth-child(1)").click()
+        cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1) > div > details:nth-child(1) > div").click()
+        
+        //leistungen correctly selected
+        cy.get("[id^=___10___EditPortalMenu___-4___APP_Prefix").invoke('val').should('contain', 'Abholung_EGG')
+        
+        //click formula button
+        cy.get("#CFD-5 > div:nth-child(9) > fieldset > button").click()
+
+        //click new formula
+        cy.get("#Button_-11_Forms > a:nth-child(1)").click({force: true})
+
+        //assert it opens new formula thingy
+        cy.get("body > div.alertify.ajs-movable.ajs-closable.ajs-pinnable.ajs-zoom.ajs-resizable.ajs-maximizable > div.ajs-modal > div > div.ajs-header").should('contain', 'Neues Formular')
+
+        //enter text into new formula body
+        cy.get("#___355___EditForm_New___-354___FEG_Prefix").type("test123")
+        cy.get("#___355___EditForm_New___-354___FEG_Title").type("test123")
+        cy.get("#___355___EditForm_New___-354___FEG_Icon").select("book")
+
+        //click OK
+        cy.get("body > div.alertify.ajs-movable.ajs-closable.ajs-pinnable.ajs-zoom.ajs-resizable.ajs-maximizable > div.ajs-modal > div > div.ajs-footer > div.ajs-primary.ajs-buttons > button.ajs-button.ajs-ok").click()
+
+        //expect formula to be created
+        cy.get('#FEGMember > div.w3-card-4 > div:nth-child(2) > h4').should('contain', "test123")
+
+    })
+    
+    it('3.1.2 Formular editieren // Edit form', () =>{
+        cy.visit('http://localhost:3000/index.html?DebugLevel=0&jsApp=./oc/oApp_Editor_oc.js&APP_Prefix=Edit&AppCode=StartEditProcess&rwLib=PRD&OU_Name=EGOVC&LOG_Role=EDIT&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1&ynDevTools=Y&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },})
+        cy.get('[id^=gridLeft]').should('be.visible')
+        //cy.get('details').eq(0).click();
+        cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1)").click()
+        cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1) > div > details:nth-child(1)").click()
+        cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1) > div > details:nth-child(1) > div").click()
+
+        //contains value
+        cy.get("[id^=___10___EditPortalMenu___-4___APP_Prefix").invoke('val').should('contain', 'Abholung_EGG')
+
+
+        //click formula button
+        cy.get("#CFD-5 > div:nth-child(9) > fieldset > button").click()
+
+        //cy.get("#CFD-11 > div > fieldset:nth-child(6) > div > button").trigger("mouseover").wait(1000)
+        //cy.get("#Button_-11_Process > a:nth-child(6) > div").click({force: true})
+
+    })
+})
diff --git a/cypress/e2e/editor/leistung.cy.js b/cypress/e2e/editor/leistung.cy.js
new file mode 100644
index 0000000..fcdfa40
--- /dev/null
+++ b/cypress/e2e/editor/leistung.cy.js
@@ -0,0 +1,22 @@
+import home from '../selectors/home.css'
+import robert from '../selectors/robert.css'
+
+describe('Home page', () => {
+    it('loads the correct screen', () => {
+        cy.visit('https://rengawr.de/info/info.html', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },})
+        //cy.visit('https://oma@oma.de:Omnia$$2020@rengawr.de/info/info.html', auth: {username: "", password: "",},)
+        cy.get(robert.EGovC_demo).should('be.visible')
+            .and('contain', 'li')
+
+        
+        const indexToClick = 3;
+
+        // Select the nth <details> element and click it
+        cy.get('details').eq(indexToClick).click();
+        
+        cy.get('a[href="https://rengawr.de/val/index.html?DebugLevel=0&jsApp=./oc/oApp_Editor_oc.js&AppName=Edit&AppCode=StartEditProcess&PO_Prefix=Leika&OU_Name=EGOVC&LOG_Role=EDIT&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1"]')
+            .click();
+    })
+/*     it('is possible to go to EGovC MRN HWPA screen', () =>{
+    }) */
+})
diff --git a/cypress/e2e/editor/prozess.cy.js b/cypress/e2e/editor/prozess.cy.js
new file mode 100644
index 0000000..550fbdd
--- /dev/null
+++ b/cypress/e2e/editor/prozess.cy.js
@@ -0,0 +1,46 @@
+import home from '../selectors/home.css'
+import robert from '../selectors/robert.css'
+
+describe('Home page', () => {
+    it('loads the correct screen', () => {
+        cy.visit('http://localhost:3000/index.html?DebugLevel=0&jsApp=./oc/oApp_Editor_oc.js&APP_Prefix=Edit&AppCode=StartEditProcess&rwLib=PRD&OU_Name=EGOVC&LOG_Role=EDIT&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1&ynDevTools=Y&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },})
+        //cy.visit('https://rengawr.de/info/info.html', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },})
+        //cy.visit('https://oma@oma.de:Omnia$$2020@rengawr.de/info/info.html', auth: {username: "", password: "",},)
+        cy.get(robert.EGovC_demo).should('be.visible')
+            .and('contain', 'li')
+        
+
+    })
+    it('correctly selects Auto-Genehmigung-Prozess', () =>{
+        cy.visit('http://localhost:3000/index.html?DebugLevel=0&jsApp=./oc/oApp_Editor_oc.js&APP_Prefix=Edit&AppCode=StartEditProcess&rwLib=PRD&OU_Name=EGOVC&LOG_Role=EDIT&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1&ynDevTools=Y&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },})
+        cy.get('[id^=gridLeft]').should('be.visible')
+        //cy.get('details').eq(0).click();
+        cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1)").click()
+        cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1) > div > details:nth-child(1)").click()
+        cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1) > div > details:nth-child(1) > div").click()
+
+        //contains value
+        cy.get("[id^=___10___EditPortalMenu___-4___APP_Prefix").invoke('val').should('contain', 'Abholung_EGG')
+
+
+    })
+    
+    it('correctly selects Auto-Info-Prozess', () =>{
+        cy.visit('http://localhost:3000/index.html?DebugLevel=0&jsApp=./oc/oApp_Editor_oc.js&APP_Prefix=Edit&AppCode=StartEditProcess&rwLib=PRD&OU_Name=EGOVC&LOG_Role=EDIT&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1&ynDevTools=Y&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },})
+        cy.get('[id^=gridLeft]').should('be.visible')
+        //cy.get('details').eq(0).click();
+        cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1)").click()
+        cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1) > div > details:nth-child(1)").click()
+        cy.get("#gridLeft > div > div.w3-card-4 > div:nth-child(2) > div > details:nth-child(1) > div > details:nth-child(1) > div").click()
+
+        //contains value
+        cy.get("[id^=___10___EditPortalMenu___-4___APP_Prefix").invoke('val').should('contain', 'Abholung_EGG')
+
+        //click process button
+        cy.get("#CFD-5 > div:nth-child(5) > fieldset").click()
+
+        cy.get("#CFD-11 > div > fieldset:nth-child(6) > div > button").trigger("mouseover").wait(1000)
+        cy.get("#Button_-11_Process > a:nth-child(6) > div").click({force: true})
+
+    })
+})
diff --git a/cypress/e2e/editor/seiten-editor.cy .js b/cypress/e2e/editor/seiten-editor.cy .js
new file mode 100644
index 0000000..fcdfa40
--- /dev/null
+++ b/cypress/e2e/editor/seiten-editor.cy .js	
@@ -0,0 +1,22 @@
+import home from '../selectors/home.css'
+import robert from '../selectors/robert.css'
+
+describe('Home page', () => {
+    it('loads the correct screen', () => {
+        cy.visit('https://rengawr.de/info/info.html', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },})
+        //cy.visit('https://oma@oma.de:Omnia$$2020@rengawr.de/info/info.html', auth: {username: "", password: "",},)
+        cy.get(robert.EGovC_demo).should('be.visible')
+            .and('contain', 'li')
+
+        
+        const indexToClick = 3;
+
+        // Select the nth <details> element and click it
+        cy.get('details').eq(indexToClick).click();
+        
+        cy.get('a[href="https://rengawr.de/val/index.html?DebugLevel=0&jsApp=./oc/oApp_Editor_oc.js&AppName=Edit&AppCode=StartEditProcess&PO_Prefix=Leika&OU_Name=EGOVC&LOG_Role=EDIT&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1"]')
+            .click();
+    })
+/*     it('is possible to go to EGovC MRN HWPA screen', () =>{
+    }) */
+})
diff --git a/cypress/e2e/editor/serviceportal.cy .js b/cypress/e2e/editor/serviceportal.cy .js
new file mode 100644
index 0000000..fcdfa40
--- /dev/null
+++ b/cypress/e2e/editor/serviceportal.cy .js	
@@ -0,0 +1,22 @@
+import home from '../selectors/home.css'
+import robert from '../selectors/robert.css'
+
+describe('Home page', () => {
+    it('loads the correct screen', () => {
+        cy.visit('https://rengawr.de/info/info.html', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },})
+        //cy.visit('https://oma@oma.de:Omnia$$2020@rengawr.de/info/info.html', auth: {username: "", password: "",},)
+        cy.get(robert.EGovC_demo).should('be.visible')
+            .and('contain', 'li')
+
+        
+        const indexToClick = 3;
+
+        // Select the nth <details> element and click it
+        cy.get('details').eq(indexToClick).click();
+        
+        cy.get('a[href="https://rengawr.de/val/index.html?DebugLevel=0&jsApp=./oc/oApp_Editor_oc.js&AppName=Edit&AppCode=StartEditProcess&PO_Prefix=Leika&OU_Name=EGOVC&LOG_Role=EDIT&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1"]')
+            .click();
+    })
+/*     it('is possible to go to EGovC MRN HWPA screen', () =>{
+    }) */
+})
diff --git a/cypress/e2e/editor/workspace.cy.js b/cypress/e2e/editor/workspace.cy.js
new file mode 100644
index 0000000..fcdfa40
--- /dev/null
+++ b/cypress/e2e/editor/workspace.cy.js
@@ -0,0 +1,22 @@
+import home from '../selectors/home.css'
+import robert from '../selectors/robert.css'
+
+describe('Home page', () => {
+    it('loads the correct screen', () => {
+        cy.visit('https://rengawr.de/info/info.html', {auth: {username: "oma@oma.de", password: "Omnia$$2020", },})
+        //cy.visit('https://oma@oma.de:Omnia$$2020@rengawr.de/info/info.html', auth: {username: "", password: "",},)
+        cy.get(robert.EGovC_demo).should('be.visible')
+            .and('contain', 'li')
+
+        
+        const indexToClick = 3;
+
+        // Select the nth <details> element and click it
+        cy.get('details').eq(indexToClick).click();
+        
+        cy.get('a[href="https://rengawr.de/val/index.html?DebugLevel=0&jsApp=./oc/oApp_Editor_oc.js&AppName=Edit&AppCode=StartEditProcess&PO_Prefix=Leika&OU_Name=EGOVC&LOG_Role=EDIT&USR_EMail=robert.wagner@egovc.de&USR_Pass=Welcome1"]')
+            .click();
+    })
+/*     it('is possible to go to EGovC MRN HWPA screen', () =>{
+    }) */
+})
diff --git a/cypress/e2e/article.cy.js b/cypress/e2e/reference/article.cy.js
similarity index 97%
rename from cypress/e2e/article.cy.js
rename to cypress/e2e/reference/article.cy.js
index b7c0e47..577b06e 100644
--- a/cypress/e2e/article.cy.js
+++ b/cypress/e2e/reference/article.cy.js
@@ -1,5 +1,5 @@
-import editor from '../selectors/editor.css'
-import article from '../selectors/article.css'
+import editor from '../../selectors/editor.css'
+import article from '../../selectors/article.css'
 
 describe('Article', () => {
     const seeMoreLink = 'https://github.com/helenanull/cypress-example'
diff --git a/cypress/e2e/comments.cy.js b/cypress/e2e/reference/comments.cy.js
similarity index 95%
rename from cypress/e2e/comments.cy.js
rename to cypress/e2e/reference/comments.cy.js
index 1ea5a58..9ea0112 100644
--- a/cypress/e2e/comments.cy.js
+++ b/cypress/e2e/reference/comments.cy.js
@@ -1,4 +1,4 @@
-import article from '../selectors/article.css'
+import article from '../../selectors/article.css'
 
 describe('Comments', () => {
     beforeEach(() => {
diff --git a/cypress/e2e/header.cy.js b/cypress/e2e/reference/header.cy.js
similarity index 93%
rename from cypress/e2e/header.cy.js
rename to cypress/e2e/reference/header.cy.js
index ec37ada..78cca22 100644
--- a/cypress/e2e/header.cy.js
+++ b/cypress/e2e/reference/header.cy.js
@@ -1,4 +1,4 @@
-import header from '../selectors/header.css'
+import header from '../../selectors/header.css'
 
 describe('Header', () => {
     it('contains correct elements when logged out', () => {
diff --git a/cypress/e2e/home.cy.js b/cypress/e2e/reference/home.cy.js
similarity index 97%
rename from cypress/e2e/home.cy.js
rename to cypress/e2e/reference/home.cy.js
index 44be3c6..fa386e8 100644
--- a/cypress/e2e/home.cy.js
+++ b/cypress/e2e/reference/home.cy.js
@@ -1,4 +1,4 @@
-import home from '../selectors/home.css'
+import home from '../../selectors/home.css'
 
 describe('Home page', () => {
     it('contains correct elements when logged out', () => {
diff --git a/cypress/e2e/login.cy.js b/cypress/e2e/reference/login.cy.js
similarity index 95%
rename from cypress/e2e/login.cy.js
rename to cypress/e2e/reference/login.cy.js
index 455aeda..bf21226 100644
--- a/cypress/e2e/login.cy.js
+++ b/cypress/e2e/reference/login.cy.js
@@ -1,5 +1,5 @@
-import login from '../selectors/login.css'
-import header from '../selectors/header.css'
+import login from '../../selectors/login.css'
+import header from '../../selectors/header.css'
 
 describe('Login', () => {
     // context is the same as describe
diff --git a/cypress/e2e/profile.cy.js b/cypress/e2e/reference/profile.cy.js
similarity index 97%
rename from cypress/e2e/profile.cy.js
rename to cypress/e2e/reference/profile.cy.js
index 0809da7..c4fe6e1 100644
--- a/cypress/e2e/profile.cy.js
+++ b/cypress/e2e/reference/profile.cy.js
@@ -1,4 +1,4 @@
-import profile from '../selectors/profile.css'
+import profile from '../../selectors/profile.css'
 
 describe('Profile page', () => {
     beforeEach(() => {
diff --git a/cypress/e2e/register.cy.js b/cypress/e2e/reference/register.cy.js
similarity index 95%
rename from cypress/e2e/register.cy.js
rename to cypress/e2e/reference/register.cy.js
index 6714c89..d5914c6 100644
--- a/cypress/e2e/register.cy.js
+++ b/cypress/e2e/reference/register.cy.js
@@ -1,5 +1,5 @@
-import registration from '../selectors/register.css'
-import header from '../selectors/header.css'
+import registration from '../../selectors/register.css'
+import header from '../../selectors/header.css'
 
 describe('Register', () => {
     // https://docs.cypress.io/guides/core-concepts/variables-and-aliases.html#Aliases
diff --git a/cypress/e2e/settings.cy.js b/cypress/e2e/reference/settings.cy.js
similarity index 90%
rename from cypress/e2e/settings.cy.js
rename to cypress/e2e/reference/settings.cy.js
index 47bdbba..ebf75f9 100644
--- a/cypress/e2e/settings.cy.js
+++ b/cypress/e2e/reference/settings.cy.js
@@ -1,5 +1,5 @@
-import settings from '../selectors/settings.css'
-import profile from '../selectors/profile.css'
+import settings from '../../selectors/settings.css'
+import profile from '../../selectors/profile.css'
 
 describe('Settings', () => {
     beforeEach(() => {
diff --git a/cypress/selectors/robert.css.js b/cypress/selectors/robert.css.js
new file mode 100644
index 0000000..269f2df
--- /dev/null
+++ b/cypress/selectors/robert.css.js
@@ -0,0 +1,12 @@
+module.exports = {
+    title: '.container h1',
+    imageField: '[ng-model="$ctrl.formData.image"]',
+    usernameField: '[ng-model="$ctrl.formData.username"]',
+    bioField: '[ng-model="$ctrl.formData.bio"]',
+    emailField: '[ng-model="$ctrl.formData.email"]',
+    passwordField: '[ng-model="$ctrl.formData.password"]',
+    submitButton: 'button[type="submit"]',
+    logoutButton: 'button[ng-click="$ctrl.logout()"]',
+    errorMessages: '.error-messages',
+    EGovC_demo: 'details'
+}
diff --git a/cypress/support/command.js b/cypress/support/command.js
new file mode 100644
index 0000000..26208f6
--- /dev/null
+++ b/cypress/support/command.js
@@ -0,0 +1 @@
+import '@cypress-audit/lighthouse/commands';
diff --git a/cypress/upload_files/hwpa_mouse.png b/cypress/upload_files/hwpa_mouse.png
new file mode 100644
index 0000000..b5f34ff
Binary files /dev/null and b/cypress/upload_files/hwpa_mouse.png differ
diff --git a/package-lock.json b/package-lock.json
index 54d5098..0933eab 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,7 +8,9 @@
       "name": "cypress-example",
       "version": "1.0.0",
       "devDependencies": {
-        "cypress": "^13.6.2",
+        "@cypress-audit/lighthouse": "^1.4.2",
+        "cypress": "^13.7.0",
+        "cypress-utils": "^3.0.0",
         "eslint": "^7.23.0"
       }
     },
@@ -110,6 +112,15 @@
         "node": ">=0.1.90"
       }
     },
+    "node_modules/@cypress-audit/lighthouse": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/@cypress-audit/lighthouse/-/lighthouse-1.4.2.tgz",
+      "integrity": "sha512-xiYeCnZYav89vsIWNtyXdU1mORyp/OGK3qQ8tDYN3HacYjTtcsp+avcoi4X2vXZWC7yu4dcu17SbTg4H64ymSQ==",
+      "dev": true,
+      "dependencies": {
+        "lighthouse": "^10.0.2"
+      }
+    },
     "node_modules/@cypress/request": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.0.tgz",
@@ -193,6 +204,174 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/@puppeteer/browsers": {
+      "version": "1.4.6",
+      "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.6.tgz",
+      "integrity": "sha512-x4BEjr2SjOPowNeiguzjozQbsc6h437ovD/wu+JpaenxVLm3jkgzHY2xOslMTp50HoTvQreMjiexiGQw1sqZlQ==",
+      "dev": true,
+      "dependencies": {
+        "debug": "4.3.4",
+        "extract-zip": "2.0.1",
+        "progress": "2.0.3",
+        "proxy-agent": "6.3.0",
+        "tar-fs": "3.0.4",
+        "unbzip2-stream": "1.4.3",
+        "yargs": "17.7.1"
+      },
+      "bin": {
+        "browsers": "lib/cjs/main-cli.js"
+      },
+      "engines": {
+        "node": ">=16.3.0"
+      },
+      "peerDependencies": {
+        "typescript": ">= 4.7.4"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@puppeteer/browsers/node_modules/yargs": {
+      "version": "17.7.1",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz",
+      "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==",
+      "dev": true,
+      "dependencies": {
+        "cliui": "^8.0.1",
+        "escalade": "^3.1.1",
+        "get-caller-file": "^2.0.5",
+        "require-directory": "^2.1.1",
+        "string-width": "^4.2.3",
+        "y18n": "^5.0.5",
+        "yargs-parser": "^21.1.1"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@sentry/core": {
+      "version": "6.19.7",
+      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.19.7.tgz",
+      "integrity": "sha512-tOfZ/umqB2AcHPGbIrsFLcvApdTm9ggpi/kQZFkej7kMphjT+SGBiQfYtjyg9jcRW+ilAR4JXC9BGKsdEQ+8Vw==",
+      "dev": true,
+      "dependencies": {
+        "@sentry/hub": "6.19.7",
+        "@sentry/minimal": "6.19.7",
+        "@sentry/types": "6.19.7",
+        "@sentry/utils": "6.19.7",
+        "tslib": "^1.9.3"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/@sentry/core/node_modules/tslib": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+      "dev": true
+    },
+    "node_modules/@sentry/hub": {
+      "version": "6.19.7",
+      "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.19.7.tgz",
+      "integrity": "sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA==",
+      "dev": true,
+      "dependencies": {
+        "@sentry/types": "6.19.7",
+        "@sentry/utils": "6.19.7",
+        "tslib": "^1.9.3"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/@sentry/hub/node_modules/tslib": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+      "dev": true
+    },
+    "node_modules/@sentry/minimal": {
+      "version": "6.19.7",
+      "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.19.7.tgz",
+      "integrity": "sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ==",
+      "dev": true,
+      "dependencies": {
+        "@sentry/hub": "6.19.7",
+        "@sentry/types": "6.19.7",
+        "tslib": "^1.9.3"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/@sentry/minimal/node_modules/tslib": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+      "dev": true
+    },
+    "node_modules/@sentry/node": {
+      "version": "6.19.7",
+      "resolved": "https://registry.npmjs.org/@sentry/node/-/node-6.19.7.tgz",
+      "integrity": "sha512-gtmRC4dAXKODMpHXKfrkfvyBL3cI8y64vEi3fDD046uqYcrWdgoQsffuBbxMAizc6Ez1ia+f0Flue6p15Qaltg==",
+      "dev": true,
+      "dependencies": {
+        "@sentry/core": "6.19.7",
+        "@sentry/hub": "6.19.7",
+        "@sentry/types": "6.19.7",
+        "@sentry/utils": "6.19.7",
+        "cookie": "^0.4.1",
+        "https-proxy-agent": "^5.0.0",
+        "lru_map": "^0.3.3",
+        "tslib": "^1.9.3"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/@sentry/node/node_modules/tslib": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+      "dev": true
+    },
+    "node_modules/@sentry/types": {
+      "version": "6.19.7",
+      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.19.7.tgz",
+      "integrity": "sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/@sentry/utils": {
+      "version": "6.19.7",
+      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.19.7.tgz",
+      "integrity": "sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA==",
+      "dev": true,
+      "dependencies": {
+        "@sentry/types": "6.19.7",
+        "tslib": "^1.9.3"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/@sentry/utils/node_modules/tslib": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+      "dev": true
+    },
+    "node_modules/@tootallnate/quickjs-emscripten": {
+      "version": "0.23.0",
+      "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz",
+      "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==",
+      "dev": true
+    },
     "node_modules/@types/node": {
       "version": "18.18.5",
       "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.5.tgz",
@@ -242,6 +421,18 @@
         "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
       }
     },
+    "node_modules/agent-base": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+      "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+      "dev": true,
+      "dependencies": {
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6.0.0"
+      }
+    },
     "node_modules/aggregate-error": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
@@ -378,6 +569,18 @@
         "node": ">=0.8"
       }
     },
+    "node_modules/ast-types": {
+      "version": "0.13.4",
+      "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz",
+      "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==",
+      "dev": true,
+      "dependencies": {
+        "tslib": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/astral-regex": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
@@ -423,12 +626,34 @@
       "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==",
       "dev": true
     },
+    "node_modules/axe-core": {
+      "version": "4.7.2",
+      "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz",
+      "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/b4a": {
+      "version": "1.6.6",
+      "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz",
+      "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==",
+      "dev": true
+    },
     "node_modules/balanced-match": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
       "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
       "dev": true
     },
+    "node_modules/bare-events": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz",
+      "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==",
+      "dev": true,
+      "optional": true
+    },
     "node_modules/base64-js": {
       "version": "1.5.1",
       "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
@@ -449,6 +674,15 @@
         }
       ]
     },
+    "node_modules/basic-ftp": {
+      "version": "5.0.5",
+      "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz",
+      "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==",
+      "dev": true,
+      "engines": {
+        "node": ">=10.0.0"
+      }
+    },
     "node_modules/bcrypt-pbkdf": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
@@ -590,6 +824,48 @@
         "node": ">= 0.8.0"
       }
     },
+    "node_modules/chrome-launcher": {
+      "version": "0.15.2",
+      "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz",
+      "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==",
+      "dev": true,
+      "dependencies": {
+        "@types/node": "*",
+        "escape-string-regexp": "^4.0.0",
+        "is-wsl": "^2.2.0",
+        "lighthouse-logger": "^1.0.0"
+      },
+      "bin": {
+        "print-chrome-path": "bin/print-chrome-path.js"
+      },
+      "engines": {
+        "node": ">=12.13.0"
+      }
+    },
+    "node_modules/chrome-launcher/node_modules/escape-string-regexp": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/chromium-bidi": {
+      "version": "0.4.16",
+      "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.16.tgz",
+      "integrity": "sha512-7ZbXdWERxRxSwo3txsBjjmc/NLxqb1Bk30mRb0BMS4YIaiV6zvKZqL/UAH+DdqcDYayDWk2n/y8klkBDODrPvA==",
+      "dev": true,
+      "dependencies": {
+        "mitt": "3.0.0"
+      },
+      "peerDependencies": {
+        "devtools-protocol": "*"
+      }
+    },
     "node_modules/ci-info": {
       "version": "3.8.0",
       "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz",
@@ -657,6 +933,20 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/cliui": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+      "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+      "dev": true,
+      "dependencies": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.1",
+        "wrap-ansi": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
     "node_modules/color-convert": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -717,12 +1007,47 @@
       "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
       "dev": true
     },
+    "node_modules/configstore": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
+      "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
+      "dev": true,
+      "dependencies": {
+        "dot-prop": "^5.2.0",
+        "graceful-fs": "^4.1.2",
+        "make-dir": "^3.0.0",
+        "unique-string": "^2.0.0",
+        "write-file-atomic": "^3.0.0",
+        "xdg-basedir": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/cookie": {
+      "version": "0.4.2",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
+      "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
     "node_modules/core-util-is": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
       "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
       "dev": true
     },
+    "node_modules/cross-fetch": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz",
+      "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==",
+      "dev": true,
+      "dependencies": {
+        "node-fetch": "^2.6.12"
+      }
+    },
     "node_modules/cross-spawn": {
       "version": "7.0.3",
       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -737,22 +1062,36 @@
         "node": ">= 8"
       }
     },
+    "node_modules/crypto-random-string": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
+      "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/csp_evaluator": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/csp_evaluator/-/csp_evaluator-1.1.1.tgz",
+      "integrity": "sha512-N3ASg0C4kNPUaNxt1XAvzHIVuzdtr8KLgfk1O8WDyimp1GisPAHESupArO2ieHk9QWbrJ/WkQODyh21Ps/xhxw==",
+      "dev": true
+    },
     "node_modules/cypress": {
-      "version": "13.6.2",
-      "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.6.2.tgz",
-      "integrity": "sha512-TW3bGdPU4BrfvMQYv1z3oMqj71YI4AlgJgnrycicmPZAXtvywVFZW9DAToshO65D97rCWfG/kqMFsYB6Kp91gQ==",
+      "version": "13.7.0",
+      "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.7.0.tgz",
+      "integrity": "sha512-UimjRSJJYdTlvkChcdcfywKJ6tUYuwYuk/n1uMMglrvi+ZthNhoRYcxnWgTqUtkl17fXrPAsD5XT2rcQYN1xKA==",
       "dev": true,
       "hasInstallScript": true,
       "dependencies": {
         "@cypress/request": "^3.0.0",
         "@cypress/xvfb": "^1.2.4",
-        "@types/node": "^18.17.5",
         "@types/sinonjs__fake-timers": "8.1.1",
         "@types/sizzle": "^2.3.2",
         "arch": "^2.2.0",
         "blob-util": "^2.0.2",
         "bluebird": "^3.7.2",
-        "buffer": "^5.6.0",
+        "buffer": "^5.7.1",
         "cachedir": "^2.3.0",
         "chalk": "^4.1.0",
         "check-more-types": "^2.24.0",
@@ -770,7 +1109,7 @@
         "figures": "^3.2.0",
         "fs-extra": "^9.1.0",
         "getos": "^3.2.1",
-        "is-ci": "^3.0.0",
+        "is-ci": "^3.0.1",
         "is-installed-globally": "~0.4.0",
         "lazy-ass": "^1.6.0",
         "listr2": "^3.8.3",
@@ -795,28 +1134,67 @@
         "node": "^16.0.0 || ^18.0.0 || >=20.0.0"
       }
     },
-    "node_modules/cypress/node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+    "node_modules/cypress-utils": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/cypress-utils/-/cypress-utils-3.0.0.tgz",
+      "integrity": "sha512-qpP6jbD/k9/4jpFPhYVXKmsuyPsHNqL9/j6Lj6hxSGdWkwdchCnF1LvryvzLEVCKVqMJYa1yiTNcPNqUNnAEFQ==",
       "dev": true,
       "dependencies": {
-        "ms": "2.1.2"
+        "async": "^3.2.4",
+        "glob": "^8.0.3",
+        "lodash": "^4.17.21",
+        "minimatch": "^3.0.4",
+        "yargs": "^17.5.1"
+      },
+      "bin": {
+        "cypress-utils": "index.js"
       },
       "engines": {
-        "node": ">=6.0"
+        "node": ">= 14.0.0"
       },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
+      "peerDependencies": {
+        "cypress": ">=10"
       }
     },
-    "node_modules/cypress/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
+    "node_modules/cypress-utils/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/cypress-utils/node_modules/glob": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
+      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+      "dev": true,
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^5.0.1",
+        "once": "^1.3.0"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/cypress-utils/node_modules/glob/node_modules/minimatch": {
+      "version": "5.1.6",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+      "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=10"
+      }
     },
     "node_modules/cypress/node_modules/semver": {
       "version": "7.5.4",
@@ -860,6 +1238,15 @@
         "node": ">=0.10"
       }
     },
+    "node_modules/data-uri-to-buffer": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz",
+      "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==",
+      "dev": true,
+      "engines": {
+        "node": ">= 14"
+      }
+    },
     "node_modules/dayjs": {
       "version": "1.11.9",
       "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz",
@@ -867,9 +1254,9 @@
       "dev": true
     },
     "node_modules/debug": {
-      "version": "4.3.2",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
-      "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
+      "version": "4.3.4",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
       "dev": true,
       "dependencies": {
         "ms": "2.1.2"
@@ -895,6 +1282,29 @@
       "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
       "dev": true
     },
+    "node_modules/define-lazy-prop": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+      "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/degenerator": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz",
+      "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==",
+      "dev": true,
+      "dependencies": {
+        "ast-types": "^0.13.4",
+        "escodegen": "^2.1.0",
+        "esprima": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 14"
+      }
+    },
     "node_modules/delayed-stream": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -904,6 +1314,12 @@
         "node": ">=0.4.0"
       }
     },
+    "node_modules/devtools-protocol": {
+      "version": "0.0.1155343",
+      "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1155343.tgz",
+      "integrity": "sha512-oD9vGBV2wTc7fAzAM6KC0chSgs234V8+qDEeK+mcbRj2UvcuA7lgBztGi/opj/iahcXD3BSj8Ymvib628yy9FA==",
+      "dev": true
+    },
     "node_modules/doctrine": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
@@ -916,6 +1332,18 @@
         "node": ">=6.0.0"
       }
     },
+    "node_modules/dot-prop": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
+      "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
+      "dev": true,
+      "dependencies": {
+        "is-obj": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/ecc-jsbn": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
@@ -953,6 +1381,15 @@
         "node": ">=8.6"
       }
     },
+    "node_modules/escalade": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+      "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/escape-string-regexp": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
@@ -962,19 +1399,49 @@
         "node": ">=0.8.0"
       }
     },
-    "node_modules/eslint": {
-      "version": "7.23.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.23.0.tgz",
-      "integrity": "sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==",
+    "node_modules/escodegen": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
+      "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
       "dev": true,
       "dependencies": {
-        "@babel/code-frame": "7.12.11",
-        "@eslint/eslintrc": "^0.4.0",
-        "ajv": "^6.10.0",
-        "chalk": "^4.0.0",
-        "cross-spawn": "^7.0.2",
-        "debug": "^4.0.1",
-        "doctrine": "^3.0.0",
+        "esprima": "^4.0.1",
+        "estraverse": "^5.2.0",
+        "esutils": "^2.0.2"
+      },
+      "bin": {
+        "escodegen": "bin/escodegen.js",
+        "esgenerate": "bin/esgenerate.js"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "optionalDependencies": {
+        "source-map": "~0.6.1"
+      }
+    },
+    "node_modules/escodegen/node_modules/estraverse": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+      "dev": true,
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/eslint": {
+      "version": "7.23.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.23.0.tgz",
+      "integrity": "sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==",
+      "dev": true,
+      "dependencies": {
+        "@babel/code-frame": "7.12.11",
+        "@eslint/eslintrc": "^0.4.0",
+        "ajv": "^6.10.0",
+        "chalk": "^4.0.0",
+        "cross-spawn": "^7.0.2",
+        "debug": "^4.0.1",
+        "doctrine": "^3.0.0",
         "enquirer": "^2.3.5",
         "eslint-scope": "^5.1.1",
         "eslint-utils": "^2.1.0",
@@ -1261,6 +1728,12 @@
       "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
       "dev": true
     },
+    "node_modules/fast-fifo": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
+      "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
+      "dev": true
+    },
     "node_modules/fast-json-stable-stringify": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
@@ -1393,6 +1866,15 @@
       "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
       "dev": true
     },
+    "node_modules/get-caller-file": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+      "dev": true,
+      "engines": {
+        "node": "6.* || 8.* || >= 10.*"
+      }
+    },
     "node_modules/get-intrinsic": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
@@ -1422,6 +1904,44 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/get-uri": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz",
+      "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==",
+      "dev": true,
+      "dependencies": {
+        "basic-ftp": "^5.0.2",
+        "data-uri-to-buffer": "^6.0.2",
+        "debug": "^4.3.4",
+        "fs-extra": "^11.2.0"
+      },
+      "engines": {
+        "node": ">= 14"
+      }
+    },
+    "node_modules/get-uri/node_modules/fs-extra": {
+      "version": "11.2.0",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+      "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+      "dev": true,
+      "dependencies": {
+        "graceful-fs": "^4.2.0",
+        "jsonfile": "^6.0.1",
+        "universalify": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=14.14"
+      }
+    },
+    "node_modules/get-uri/node_modules/universalify": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+      "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+      "dev": true,
+      "engines": {
+        "node": ">= 10.0.0"
+      }
+    },
     "node_modules/getos": {
       "version": "3.2.1",
       "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz",
@@ -1553,6 +2073,40 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/http-link-header": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.3.tgz",
+      "integrity": "sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/http-proxy-agent": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+      "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
+      "dev": true,
+      "dependencies": {
+        "agent-base": "^7.1.0",
+        "debug": "^4.3.4"
+      },
+      "engines": {
+        "node": ">= 14"
+      }
+    },
+    "node_modules/http-proxy-agent/node_modules/agent-base": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz",
+      "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==",
+      "dev": true,
+      "dependencies": {
+        "debug": "^4.3.4"
+      },
+      "engines": {
+        "node": ">= 14"
+      }
+    },
     "node_modules/http-signature": {
       "version": "1.3.6",
       "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz",
@@ -1567,6 +2121,19 @@
         "node": ">=0.10"
       }
     },
+    "node_modules/https-proxy-agent": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+      "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+      "dev": true,
+      "dependencies": {
+        "agent-base": "6",
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
     "node_modules/human-signals": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
@@ -1605,6 +2172,12 @@
         "node": ">= 4"
       }
     },
+    "node_modules/image-ssim": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/image-ssim/-/image-ssim-0.2.0.tgz",
+      "integrity": "sha512-W7+sO6/yhxy83L0G7xR8YAc5Z5QFtYEXXRV6EaE8tuYBZJnA3gVgp3q7X7muhLZVodeb9UfvjSbwt9VJwjIYAg==",
+      "dev": true
+    },
     "node_modules/import-fresh": {
       "version": "3.3.0",
       "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@@ -1664,6 +2237,47 @@
         "node": ">=10"
       }
     },
+    "node_modules/intl-messageformat": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-4.4.0.tgz",
+      "integrity": "sha512-z+Bj2rS3LZSYU4+sNitdHrwnBhr0wO80ZJSW8EzKDBowwUe3Q/UsvgCGjrwa+HPzoGCLEb9HAjfJgo4j2Sac8w==",
+      "dev": true,
+      "dependencies": {
+        "intl-messageformat-parser": "^1.8.1"
+      }
+    },
+    "node_modules/intl-messageformat-parser": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-1.8.1.tgz",
+      "integrity": "sha512-IMSCKVf0USrM/959vj3xac7s8f87sc+80Y/ipBzdKy4ifBv5Gsj2tZ41EAaURVg01QU71fYr77uA8Meh6kELbg==",
+      "deprecated": "We've written a new parser that's 6x faster and is backwards compatible. Please use @formatjs/icu-messageformat-parser",
+      "dev": true
+    },
+    "node_modules/ip-address": {
+      "version": "9.0.5",
+      "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
+      "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
+      "dev": true,
+      "dependencies": {
+        "jsbn": "1.1.0",
+        "sprintf-js": "^1.1.3"
+      },
+      "engines": {
+        "node": ">= 12"
+      }
+    },
+    "node_modules/ip-address/node_modules/jsbn": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
+      "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==",
+      "dev": true
+    },
+    "node_modules/ip-address/node_modules/sprintf-js": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
+      "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
+      "dev": true
+    },
     "node_modules/is-boolean-object": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz",
@@ -1691,6 +2305,21 @@
         "is-ci": "bin.js"
       }
     },
+    "node_modules/is-docker": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+      "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
+      "dev": true,
+      "bin": {
+        "is-docker": "cli.js"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/is-extglob": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -1749,6 +2378,15 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/is-obj": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
+      "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/is-path-inside": {
       "version": "3.0.3",
       "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
@@ -1800,6 +2438,18 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/is-wsl": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+      "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+      "dev": true,
+      "dependencies": {
+        "is-docker": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/isexe": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -1812,6 +2462,21 @@
       "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
       "dev": true
     },
+    "node_modules/jpeg-js": {
+      "version": "0.4.4",
+      "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz",
+      "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==",
+      "dev": true
+    },
+    "node_modules/js-library-detector": {
+      "version": "6.7.0",
+      "resolved": "https://registry.npmjs.org/js-library-detector/-/js-library-detector-6.7.0.tgz",
+      "integrity": "sha512-c80Qupofp43y4cJ7+8TTDN/AsDwLi5oOm/plBrWI+iQt485vKXCco+yVmOwEgdo9VOdsYTuV0UlTeetVPTriXA==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      }
+    },
     "node_modules/js-tokens": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -1919,6 +2584,89 @@
         "node": ">= 0.8.0"
       }
     },
+    "node_modules/lighthouse": {
+      "version": "10.4.0",
+      "resolved": "https://registry.npmjs.org/lighthouse/-/lighthouse-10.4.0.tgz",
+      "integrity": "sha512-XQWHEWkJ8YxSPsxttBJORy5+hQrzbvGkYfeP3fJjyYKioWkF2MXfFqNK4ZuV4jL8pBu7Z91qnQP6In0bq1yXww==",
+      "dev": true,
+      "dependencies": {
+        "@sentry/node": "^6.17.4",
+        "axe-core": "4.7.2",
+        "chrome-launcher": "^0.15.2",
+        "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.6.0",
+        "lighthouse-logger": "^1.4.1",
+        "lighthouse-stack-packs": "1.11.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": "^20.8.0",
+        "robots-parser": "^3.0.0",
+        "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"
+      },
+      "bin": {
+        "chrome-debug": "core/scripts/manual-chrome-launcher.js",
+        "lighthouse": "cli/index.js",
+        "smokehouse": "cli/test/smokehouse/frontends/smokehouse-bin.js"
+      },
+      "engines": {
+        "node": ">=16.16"
+      }
+    },
+    "node_modules/lighthouse-logger": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz",
+      "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==",
+      "dev": true,
+      "dependencies": {
+        "debug": "^2.6.9",
+        "marky": "^1.2.2"
+      }
+    },
+    "node_modules/lighthouse-logger/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/lighthouse-logger/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true
+    },
+    "node_modules/lighthouse-stack-packs": {
+      "version": "1.11.0",
+      "resolved": "https://registry.npmjs.org/lighthouse-stack-packs/-/lighthouse-stack-packs-1.11.0.tgz",
+      "integrity": "sha512-sRr0z1S/I26VffRLq9KJsKtLk856YrJlNGmcJmbLX8dFn3MuzVPUbstuChEhqnSxZb8TZmVfthuXuwhG9vRoSw==",
+      "dev": true
+    },
+    "node_modules/lighthouse/node_modules/semver": {
+      "version": "5.7.2",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+      "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+      "dev": true,
+      "bin": {
+        "semver": "bin/semver"
+      }
+    },
     "node_modules/listr2": {
       "version": "3.14.0",
       "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz",
@@ -2041,6 +2789,18 @@
         "node": ">=8"
       }
     },
+    "node_modules/lookup-closest-locale": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/lookup-closest-locale/-/lookup-closest-locale-6.2.0.tgz",
+      "integrity": "sha512-/c2kL+Vnp1jnV6K6RpDTHK3dgg0Tu2VVp+elEiJpjfS1UyY7AjOYHohRug6wT0OpoX2qFgNORndE9RqesfVxWQ==",
+      "dev": true
+    },
+    "node_modules/lru_map": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz",
+      "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==",
+      "dev": true
+    },
     "node_modules/lru-cache": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -2053,12 +2813,48 @@
         "node": ">=10"
       }
     },
+    "node_modules/make-dir": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+      "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+      "dev": true,
+      "dependencies": {
+        "semver": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/make-dir/node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+      "dev": true,
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/marky": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz",
+      "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==",
+      "dev": true
+    },
     "node_modules/merge-stream": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
       "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
       "dev": true
     },
+    "node_modules/metaviewport-parser": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/metaviewport-parser/-/metaviewport-parser-0.3.0.tgz",
+      "integrity": "sha512-EoYJ8xfjQ6kpe9VbVHvZTZHiOl4HL1Z18CrZ+qahvLXT7ZO4YTC2JMyt5FaUp9JJp6J4Ybb/z7IsCXZt86/QkQ==",
+      "dev": true
+    },
     "node_modules/mime-db": {
       "version": "1.52.0",
       "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
@@ -2110,6 +2906,18 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/mitt": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz",
+      "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==",
+      "dev": true
+    },
+    "node_modules/mkdirp-classic": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
+      "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+      "dev": true
+    },
     "node_modules/ms": {
       "version": "2.1.3",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -2122,6 +2930,35 @@
       "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
       "dev": true
     },
+    "node_modules/netmask": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz",
+      "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
+    "node_modules/node-fetch": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+      "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+      "dev": true,
+      "dependencies": {
+        "whatwg-url": "^5.0.0"
+      },
+      "engines": {
+        "node": "4.x || >=6.0.0"
+      },
+      "peerDependencies": {
+        "encoding": "^0.1.0"
+      },
+      "peerDependenciesMeta": {
+        "encoding": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/npm-run-path": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
@@ -2167,6 +3004,23 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/open": {
+      "version": "8.4.2",
+      "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
+      "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
+      "dev": true,
+      "dependencies": {
+        "define-lazy-prop": "^2.0.0",
+        "is-docker": "^2.1.1",
+        "is-wsl": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/optionator": {
       "version": "0.9.1",
       "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
@@ -2205,6 +3059,63 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/pac-proxy-agent": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz",
+      "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==",
+      "dev": true,
+      "dependencies": {
+        "@tootallnate/quickjs-emscripten": "^0.23.0",
+        "agent-base": "^7.0.2",
+        "debug": "^4.3.4",
+        "get-uri": "^6.0.1",
+        "http-proxy-agent": "^7.0.0",
+        "https-proxy-agent": "^7.0.2",
+        "pac-resolver": "^7.0.0",
+        "socks-proxy-agent": "^8.0.2"
+      },
+      "engines": {
+        "node": ">= 14"
+      }
+    },
+    "node_modules/pac-proxy-agent/node_modules/agent-base": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz",
+      "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==",
+      "dev": true,
+      "dependencies": {
+        "debug": "^4.3.4"
+      },
+      "engines": {
+        "node": ">= 14"
+      }
+    },
+    "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": {
+      "version": "7.0.4",
+      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz",
+      "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==",
+      "dev": true,
+      "dependencies": {
+        "agent-base": "^7.0.2",
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 14"
+      }
+    },
+    "node_modules/pac-resolver": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz",
+      "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==",
+      "dev": true,
+      "dependencies": {
+        "degenerator": "^5.0.0",
+        "netmask": "^2.0.2"
+      },
+      "engines": {
+        "node": ">= 14"
+      }
+    },
     "node_modules/parent-module": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -2217,6 +3128,12 @@
         "node": ">=6"
       }
     },
+    "node_modules/parse-cache-control": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+      "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==",
+      "dev": true
+    },
     "node_modules/path-is-absolute": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@@ -2295,12 +3212,83 @@
         "node": ">=0.4.0"
       }
     },
+    "node_modules/proxy-agent": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.0.tgz",
+      "integrity": "sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==",
+      "dev": true,
+      "dependencies": {
+        "agent-base": "^7.0.2",
+        "debug": "^4.3.4",
+        "http-proxy-agent": "^7.0.0",
+        "https-proxy-agent": "^7.0.0",
+        "lru-cache": "^7.14.1",
+        "pac-proxy-agent": "^7.0.0",
+        "proxy-from-env": "^1.1.0",
+        "socks-proxy-agent": "^8.0.1"
+      },
+      "engines": {
+        "node": ">= 14"
+      }
+    },
+    "node_modules/proxy-agent/node_modules/agent-base": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz",
+      "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==",
+      "dev": true,
+      "dependencies": {
+        "debug": "^4.3.4"
+      },
+      "engines": {
+        "node": ">= 14"
+      }
+    },
+    "node_modules/proxy-agent/node_modules/https-proxy-agent": {
+      "version": "7.0.4",
+      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz",
+      "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==",
+      "dev": true,
+      "dependencies": {
+        "agent-base": "^7.0.2",
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 14"
+      }
+    },
+    "node_modules/proxy-agent/node_modules/lru-cache": {
+      "version": "7.18.3",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+      "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/proxy-agent/node_modules/proxy-from-env": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+      "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+      "dev": true
+    },
     "node_modules/proxy-from-env": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
       "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==",
       "dev": true
     },
+    "node_modules/ps-list": {
+      "version": "8.1.1",
+      "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-8.1.1.tgz",
+      "integrity": "sha512-OPS9kEJYVmiO48u/B9qneqhkMvgCxT+Tm28VCEJpheTpl8cJ0ffZRRNgS5mrQRTrX5yRTpaJ+hRDeefXYmmorQ==",
+      "dev": true,
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/psl": {
       "version": "1.9.0",
       "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
@@ -2326,6 +3314,58 @@
         "node": ">=6"
       }
     },
+    "node_modules/puppeteer-core": {
+      "version": "20.9.0",
+      "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.9.0.tgz",
+      "integrity": "sha512-H9fYZQzMTRrkboEfPmf7m3CLDN6JvbxXA3qTtS+dFt27tR+CsFHzPsT6pzp6lYL6bJbAPaR0HaPO6uSi+F94Pg==",
+      "dev": true,
+      "dependencies": {
+        "@puppeteer/browsers": "1.4.6",
+        "chromium-bidi": "0.4.16",
+        "cross-fetch": "4.0.0",
+        "debug": "4.3.4",
+        "devtools-protocol": "0.0.1147663",
+        "ws": "8.13.0"
+      },
+      "engines": {
+        "node": ">=16.3.0"
+      },
+      "peerDependencies": {
+        "typescript": ">= 4.7.4"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/puppeteer-core/node_modules/devtools-protocol": {
+      "version": "0.0.1147663",
+      "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz",
+      "integrity": "sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ==",
+      "dev": true
+    },
+    "node_modules/puppeteer-core/node_modules/ws": {
+      "version": "8.13.0",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
+      "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10.0.0"
+      },
+      "peerDependencies": {
+        "bufferutil": "^4.0.1",
+        "utf-8-validate": ">=5.0.2"
+      },
+      "peerDependenciesMeta": {
+        "bufferutil": {
+          "optional": true
+        },
+        "utf-8-validate": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/qs": {
       "version": "6.10.4",
       "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz",
@@ -2347,6 +3387,12 @@
       "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
       "dev": true
     },
+    "node_modules/queue-tick": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
+      "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==",
+      "dev": true
+    },
     "node_modules/regexpp": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
@@ -2368,6 +3414,15 @@
         "throttleit": "^1.0.0"
       }
     },
+    "node_modules/require-directory": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+      "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/require-from-string": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
@@ -2426,6 +3481,15 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
+    "node_modules/robots-parser": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/robots-parser/-/robots-parser-3.0.1.tgz",
+      "integrity": "sha512-s+pyvQeIKIZ0dx5iJiQk1tPLJAWln39+MI5jtM8wnyws+G5azk+dMnMX0qfbqNetKKNgcWWOdi0sfm+FbQbgdQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=10.0.0"
+      }
+    },
     "node_modules/rxjs": {
       "version": "7.8.1",
       "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
@@ -2531,6 +3595,80 @@
         "node": ">=8"
       }
     },
+    "node_modules/smart-buffer": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+      "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 6.0.0",
+        "npm": ">= 3.0.0"
+      }
+    },
+    "node_modules/socks": {
+      "version": "2.8.1",
+      "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.1.tgz",
+      "integrity": "sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==",
+      "dev": true,
+      "dependencies": {
+        "ip-address": "^9.0.5",
+        "smart-buffer": "^4.2.0"
+      },
+      "engines": {
+        "node": ">= 10.0.0",
+        "npm": ">= 3.0.0"
+      }
+    },
+    "node_modules/socks-proxy-agent": {
+      "version": "8.0.2",
+      "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz",
+      "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==",
+      "dev": true,
+      "dependencies": {
+        "agent-base": "^7.0.2",
+        "debug": "^4.3.4",
+        "socks": "^2.7.1"
+      },
+      "engines": {
+        "node": ">= 14"
+      }
+    },
+    "node_modules/socks-proxy-agent/node_modules/agent-base": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz",
+      "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==",
+      "dev": true,
+      "dependencies": {
+        "debug": "^4.3.4"
+      },
+      "engines": {
+        "node": ">= 14"
+      }
+    },
+    "node_modules/source-map": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+      "dev": true,
+      "optional": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/speedline-core": {
+      "version": "1.4.3",
+      "resolved": "https://registry.npmjs.org/speedline-core/-/speedline-core-1.4.3.tgz",
+      "integrity": "sha512-DI7/OuAUD+GMpR6dmu8lliO2Wg5zfeh+/xsdyJZCzd8o5JgFUjCeLsBDuZjIQJdwXS3J0L/uZYrELKYqx+PXog==",
+      "dev": true,
+      "dependencies": {
+        "@types/node": "*",
+        "image-ssim": "^0.2.0",
+        "jpeg-js": "^0.4.1"
+      },
+      "engines": {
+        "node": ">=8.0"
+      }
+    },
     "node_modules/sprintf-js": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -2562,36 +3700,28 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/string-width": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
-      "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
+    "node_modules/streamx": {
+      "version": "2.16.1",
+      "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz",
+      "integrity": "sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==",
       "dev": true,
       "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.0"
+        "fast-fifo": "^1.1.0",
+        "queue-tick": "^1.0.1"
       },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/string-width/node_modules/ansi-regex": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
-      "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
+      "optionalDependencies": {
+        "bare-events": "^2.2.0"
       }
     },
-    "node_modules/string-width/node_modules/strip-ansi": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
-      "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+    "node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
       "dev": true,
       "dependencies": {
-        "ansi-regex": "^5.0.0"
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
       },
       "engines": {
         "node": ">=8"
@@ -2716,12 +3846,40 @@
         "url": "https://github.com/chalk/slice-ansi?sponsor=1"
       }
     },
+    "node_modules/tar-fs": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz",
+      "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==",
+      "dev": true,
+      "dependencies": {
+        "mkdirp-classic": "^0.5.2",
+        "pump": "^3.0.0",
+        "tar-stream": "^3.1.5"
+      }
+    },
+    "node_modules/tar-stream": {
+      "version": "3.1.7",
+      "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
+      "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
+      "dev": true,
+      "dependencies": {
+        "b4a": "^1.6.4",
+        "fast-fifo": "^1.2.0",
+        "streamx": "^2.15.0"
+      }
+    },
     "node_modules/text-table": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
       "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
       "dev": true
     },
+    "node_modules/third-party-web": {
+      "version": "0.23.4",
+      "resolved": "https://registry.npmjs.org/third-party-web/-/third-party-web-0.23.4.tgz",
+      "integrity": "sha512-kwYnSZRhEvv0SBW2fp8SBBKRglMoBjV8xz6C31m0ewqOtknB5UL+Ihg+M81hyFY5ldkZuGWPb+e4GVDkzf/gYg==",
+      "dev": true
+    },
     "node_modules/throttleit": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
@@ -2761,6 +3919,12 @@
         "node": ">=6"
       }
     },
+    "node_modules/tr46": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+      "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+      "dev": true
+    },
     "node_modules/tslib": {
       "version": "2.6.2",
       "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
@@ -2806,6 +3970,37 @@
         "node": ">=8"
       }
     },
+    "node_modules/typedarray-to-buffer": {
+      "version": "3.1.5",
+      "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
+      "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
+      "dev": true,
+      "dependencies": {
+        "is-typedarray": "^1.0.0"
+      }
+    },
+    "node_modules/unbzip2-stream": {
+      "version": "1.4.3",
+      "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
+      "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==",
+      "dev": true,
+      "dependencies": {
+        "buffer": "^5.2.1",
+        "through": "^2.3.8"
+      }
+    },
+    "node_modules/unique-string": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
+      "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
+      "dev": true,
+      "dependencies": {
+        "crypto-random-string": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/universalify": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
@@ -2872,6 +4067,22 @@
         "extsprintf": "^1.2.0"
       }
     },
+    "node_modules/webidl-conversions": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+      "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
+      "dev": true
+    },
+    "node_modules/whatwg-url": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+      "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+      "dev": true,
+      "dependencies": {
+        "tr46": "~0.0.3",
+        "webidl-conversions": "^3.0.0"
+      }
+    },
     "node_modules/which": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -2919,12 +4130,90 @@
       "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
       "dev": true
     },
+    "node_modules/write-file-atomic": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
+      "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+      "dev": true,
+      "dependencies": {
+        "imurmurhash": "^0.1.4",
+        "is-typedarray": "^1.0.0",
+        "signal-exit": "^3.0.2",
+        "typedarray-to-buffer": "^3.1.5"
+      }
+    },
+    "node_modules/ws": {
+      "version": "7.5.9",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
+      "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=8.3.0"
+      },
+      "peerDependencies": {
+        "bufferutil": "^4.0.1",
+        "utf-8-validate": "^5.0.2"
+      },
+      "peerDependenciesMeta": {
+        "bufferutil": {
+          "optional": true
+        },
+        "utf-8-validate": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/xdg-basedir": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
+      "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/y18n": {
+      "version": "5.0.8",
+      "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+      "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/yallist": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
       "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
       "dev": true
     },
+    "node_modules/yargs": {
+      "version": "17.7.2",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+      "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+      "dev": true,
+      "dependencies": {
+        "cliui": "^8.0.1",
+        "escalade": "^3.1.1",
+        "get-caller-file": "^2.0.5",
+        "require-directory": "^2.1.1",
+        "string-width": "^4.2.3",
+        "y18n": "^5.0.5",
+        "yargs-parser": "^21.1.1"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/yargs-parser": {
+      "version": "21.1.1",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+      "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      }
+    },
     "node_modules/yauzl": {
       "version": "2.10.0",
       "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
diff --git a/package.json b/package.json
index 7ad7c1c..f6e8eaf 100644
--- a/package.json
+++ b/package.json
@@ -10,7 +10,9 @@
     "cy:ci": "cypress run --env device=web --record --parallel --browser chrome --headless"
   },
   "devDependencies": {
-    "cypress": "^13.6.2",
+    "@cypress-audit/lighthouse": "^1.4.2",
+    "cypress": "^13.7.0",
+    "cypress-utils": "^3.0.0",
     "eslint": "^7.23.0"
   }
 }