HEX
Server: LiteSpeed
System: Linux atali.colombiahosting.com.co 5.14.0-570.12.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Tue May 13 06:11:55 EDT 2025 x86_64
User: coopserp (1713)
PHP: 8.2.29
Disabled: dl,exec,passthru,proc_open,proc_close,shell_exec,memory_limit,system,popen,curl_multi_exec,show_source,symlink,link,leak,listen,diskfreespace,tmpfile,ignore_user_abord,highlight_file,source,show_source,fpaththru,virtual,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix,posix_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setid,posix_times,posix_ttyname,posix_uname,proc_get_status,proc_nice,proc_terminate
Upload Files
File: //proc/thread-self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/cwd/siteseo-pro.tar
assets/css/metabox.css000064400000003015151545120660011013 0ustar00.siteseo-validation-tools .description{
display: block;
margin-top: 5px;
font-style: italic;
color: #666;
}

.siteseo-structured-data-metabox label{
display: block;
font-weight: bold;
margin-top: 10px;
}

.siteseo-structured-data-metabox select,
.siteseo-structured-data-metabox input[type="text"],
.siteseo-structured-data-metabox textarea{
width: 100%;
margin-bottom: 10px;
}

.hidden{
display: none;
}

.siteseo_structured_data_custom{
font-family: monospace;
font-size: 13px;
}

/** structured data preview**/
.siteseo-schema-preview{
margin-top: 20px;
width: 100%;
background: white;
color:white;
padding: 15px;
border: 1px solid #333;
border-radius: 4px;
position: relative;
}

#siteseo_validate_schema{
position: absolute;
top: 15px;
right: 15px;
}

.siteseo-schema-preview h4{
color: black;
margin-top: 0;
margin-bottom: 10px;
}

.siteseo-schema-preview pre{
overflow: auto;
max-height: 300px;
white-space: pre-wrap;
font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
font-size: 14px;
line-height: 1.5;
padding: 10px;
background: rgb(40, 49, 66);
border-radius: 3px;
}

.siteseo-schema-preview pre .bracket{
color: #f8f8f8;
}

.siteseo-validation-tools{
margin-top: 20px;
padding: 15px;
background: #f5f5f5;
border: 1px solid #e5e5e5;
width: 100%;
border-radius: 4px;
}

.siteseo-metabox-schema{
padding:15px;
}

.siteseo-metabox-schema textarea:focus,
.siteseo-metabox-schema select:focus,
.siteseo-metabox-schema input[type="text"]:focus{
border: 2px solid #003399;
}


.siteseo-schema-preview a{
margin-right:10px;
top:20px;
}

assets/css/admin.css000064400000013170151545121000010434 0ustar00.siteseopro-setting-content{
display:flex;
}

.siteseopro-tab-group{
padding:0;
}

.siteseopro-license-table{
background-color: #FFF;
border-radius:5px;
border: 1px solid #ccc;
padding: 10px;
}

.siteseopro-btn-primary{
background-color: #00308F;
border: 1px solid #3d5afe;
color: #FFF;
}

.siteseopro-btn-primary:hover,
a.siteseopro-btn-primary:hover{
background-color:#0529f7;
transform: translateY(-1px);
transition: background-color 0.6s, transform 0.4s;
color:#FFF;
}

.siteseopro-btn{
outline: none;
border: none;
border-radius: 3px;
box-shadow: 1px 0 5px 0 #ccc;
padding: 8px 10px;
font-weight: bold;
font-size:0.7rem;
cursor:pointer;
vertical-align:top;
}

a.siteseopro-btn{
text-decoration: none;
vertical-align:baseline;
text-align:center;
padding:5px 10px;
}

.siteseopro_license_notices{
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
z-index: 999;
backdrop-filter: blur(1px);
background-color: rgba(255, 255, 255, 0.5);
padding-left:35%;
padding-right:20%;
padding-top:21%;
}

.spinner{
display: none;
}

.spinner.is-active{
display: inline-block;

}
.tab-content{
display: none;
}

.tab-content.active{
display: block;
}

.siteseo-analysis-block{
clear: both;
}

.siteseo-audit-title{
display:flex;
align-items:center;
gap: 10px;
position: relative;
}

/* main below code*/
.siteseo-audit-title:focus{
color: #191e23;
border: none;
box-shadow: none;
outline-offset: -2px;
outline: 1px dotted #555d66;
}

.siteseo-audit-title:hover{
background: #f3f4f5;
}

.siteseo-audit-title {
display:flex;
position: relative;
background: #fff;
color: #1e1e1e;
width: 100%;
border: 0;
margin: 0;
padding: 15px 5px;
line-height: unset;
text-align: center;
font-size: 14px;
font-weight: 600;
cursor: pointer;
transition: all 300ms linear;
}

.description{
padding: 0 1rem 0.5rem 1rem;
display: none;
width: 100%;
}

.siteseo-pro-fechtime{
padding: 3px 12px;
margin-top:5px;
border-radius: 50px;
display:inline-flex;
justify-content:center;
align-self:center;
background: #00308f05;
border:1px solid #00308f45;
}

.siteseo-pro-details{
display:inline-flex;
padding: 3px 17px;
justify-content:center;
align-self:center;
border:1px solid #d3d3d3;
border-radius: 50px;
margin:10px 0;
}

.siteseopro-flex-wrapper{
display: flex;
justify-content:center;
}

.siteseo-circular-chart.siteseopro-flex-wrapper{
display: flex;
flex-flow: row nowrap;
}

.siteseo-single-chart{
width: 33%;
justify-content: space-around;
}

.siteseo-circular-chart{
display: block;
margin: 10px auto;
max-width: 80%;
max-height: 160px;
}

.siteseo-circle-bg{
fill: none;
stroke: #eee;
stroke-width: 3.8;
}

.siteseo-circle{
fill: none;
stroke-width: 2.8;
stroke-linecap: round;
animation: siteseo-progress 1s ease-out forwards;
}

@keyframes siteseo-progress{
  0%{
    stroke-dasharray: 0 100;
  }
}

.siteseo-percentage{
fill: #666;
font-family: sans-serif;
font-size: 0.5em;
text-anchor: middle;
} 

.siteseo-circle{
stroke: #3c9ee5;
}

.siteseo_notice {
padding:10px,12px;
margin-left:35%;
background: #00308f05;
border-radius:5px;
border: 1px solid #00308f45;
}

.siteseo-inner-tab:hover {
background-color:#f3f4f5;
}

.siteseo-pagespeed-input-wrapper{
display:flex;
justify-content:center;
gap:5px;
align-items:center;
}

.siteseo-pagespeed-input-wrapper input{
width: 35%;
}

#siteseopro-pagespeed-results ul.siteseo-inner-tabs{
width: unset !important;
max-width: unset !important;
padding: unset !important;
}

#siteseopro-pagespeed-results ul.siteseo-inner-tabs li{
padding: 0 20px;
}

.siteseo-audit-tabs{
display:flex;
flex-direction:column;
width: 50%;
align-self:center;	
}

.siteseo-ps-device-toggle{
cursor: pointer;
display:flex;
height:60px;
width:100px;
align-items:center;
justify-content:center;
border: 2px solid transparent;
background-color:transparent;
}

input[name=ps_device_type]:checked + label{
border-bottom: 2px solid #00308F !important;
color: #00308F;
}

.siteseo-toggleCnt{
display: flex;
align-items: center;
padding-left:20px;
}

.siteseo-toggleSw{
position: relative;
width: 47px;
height: 20px;
background-color: #ccc;
border-radius: 20px;
cursor: pointer;
margin-right: 10px;
transition: background-color 0.3s;
}

.siteseo-toggleSw::before{
content: '';
position: absolute;
width: 24px;
height: 24px;
background-color: white;
border: 2px solid #ccc;
border-radius: 50%;
top: -4px;
left: -2px;
transition: 0.3s;
}

.siteseo-toggleCnt span{
font-size: 14px;
color: #555;
font-weight: bold;
}

.siteseo-toggleSw.active{
background-color: #003399;
}

.siteseo-toggleSw.active::before{
left: 27px;
border-color: #003399;
}

.siteseo-arrow{
margin-right: 5px;
font-size: 14px;
color: #555;
font-weight: bold;
}
.siteseo-toggle-label{
font-style: italic;
font-size: 11px;
font-weight: normal;
}

.siteseo-arrow-icon{
font-size: 10%;
padding-top:3px;
}

.siteseo-metabox-subtabs{
display:flex;
flex-wrap:nowrap;
justify-content:center;
font-weight:500;
font-size:1.05em;
}

.siteseo-metabox-subtabs input{
display:none;
}

.siteseo-metabox-subtabs > div{
cursor:pointer;
padding: 20px;
display:inline-flex;
align-items:center;
justify-content:center;
text-align:center;
user-select: none;
}

.siteseo-metabox-subtabs > div{
border-bottom: 2px solid transparent;
}

.siteseo-metabox-tab-label-active{
border-bottom: 2px solid #00308F !important;
color: #00308F;
}

.siteseo-notice-pro{  
position: relative;
display: grid;
flex-direction: column;
background: #00308f05;
padding: 10px;
width: calc(100% - 20px);
z-index: 10;
border-radius: 5px;
width: auto;
display: flex;
border:1px solid #00308f45;
}

/* UTILITY CLASSES 
   NOTE: WRITE ALL YOUR CSS ABOVE THIS
*/
.siteseo-flex{
display:flex;
}

.siteseo-justify-center{
justify-content:center;
}

.siteseo-direction-column{
flex-direction:column;
}
/* DO NOT WRITE ANY CSS AFTER THIS */
assets/js/index-highlight.js000064400000004553151545121200012077 0ustar00/***
The MIT License (MIT)

Copyright (c) luyilin <luyilin12@gmail.com> (https://github.com/luyilin)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
***/

const defaultColors = {
  keyColor: '#9CCC65',
  numberColor: 'lightskyblue',
  stringColor: 'lightcoral',
  trueColor: 'lightseagreen',
  falseColor: '#f66578',
  nullColor: 'cornflowerblue'
}

const entityMap = {
  '&': '&amp;',
  '<': '&lt;',
  '>': '&gt;',
  '"': '&quot;',
  "'": '&#39;',
  '`': '&#x60;',
  '=': '&#x3D;'
};

function escapeHtml (html){
  return String(html).replace(/[&<>"'`=]/g, function (s) {
      return entityMap[s];
  });
}

function highlightJson (json, colorOptions = {}) {
  const valueType = typeof json
  if (valueType !== 'string') {
    json = JSON.stringify(json, null, 2) || valueType
  }
  let colors = Object.assign({}, defaultColors, colorOptions)
  json = json.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')
  return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+]?\d+)?)/g, (match) => {
    let color = colors.numberColor
    let style = ''
    if (/^"/.test(match)) {
      if (/:$/.test(match)) {
        color = colors.keyColor
      } else {
        color = colors.stringColor;
        match = '"' + escapeHtml(match.substr(1, match.length - 2)) + '"';
        style = 'word-wrap:break-word;white-space:pre-wrap;';
      }
    } else {
      color = /true/.test(match)
        ? colors.trueColor
        : /false/.test(match)
          ? colors.falseColor
          : /null/.test(match)
            ? colors.nullColor
            : color
    }
    return `<span style="${style}color:${color}">${match}</span>`
  })
}

document.addEventListener("DOMContentLoaded", () => {
	let jsonElement = document.getElementById("siteseo_highlighter");
	if(jsonElement && jsonElement.textContent){
		try{
			jsonElement.innerHTML = highlightJson(JSON.parse(jsonElement.textContent));
		} catch(e){
			console.log("Error parsing JSON for highlighting:", e);
		}
	}
});
assets/js/block.js000064400000002724151545121320010116 0ustar00(function (blocks, element, editor) {
    const el = element.createElement;
    const { InspectorControls } = editor;
    const { PanelBody, ToggleControl } = wp.components;

    blocks.registerBlockType('siteseo-pro/local-business', {
        title: 'Local Business',
        icon: 'store',
        category: 'siteseo',
        attributes: {
            displayOnHomepage: {
                type: 'boolean',
                default: true
            }
        },
        edit: function (props) {
            return [
                el('div', { className: props.className },
                    el('div', { className: 'local-business-preview' },
                        el('h3', null, 'Local Business'),
                        el('div', { dangerouslySetInnerHTML: { __html: siteseoProLocalBusiness.previewData } })
                    )
                ),
                el(InspectorControls, null,
                    el(PanelBody, { title: 'Settings' },
                        el(ToggleControl, {
                            label: 'Display on Homepage Only',
                            checked: props.attributes.displayOnHomepage,
                            onChange: (newVal) => props.setAttributes({ displayOnHomepage: newVal })
                        })
                    )
                )
            ];
        },
        save: function () {
            return null; // Use dynamic rendering
        }
    });
})(window.wp.blocks, window.wp.element, window.wp.blockEditor);assets/js/metabox.js000064400000012530151545121440010462 0ustar00jQuery(document).ready(function($){

	$(document).on('click', '#siteseo_validate_schema', function(e){
		e.preventDefault();

		// Fetch Schema
		var schemaContentWrap = $("#siteseo_schema_preview #raw_schema");
		if(!schemaContentWrap.length){
			schemaContentWrap = $("#siteseo_schema_preview");
		}
		
		let schemaContent = schemaContentWrap.text(),
		$form = $("<form>", {
			"method": "POST",
			"action": "https://search.google.com/test/rich-results",
			"target": "_blank"
		}),
		$input = $("<input>", {
			"type": "hidden",
			"name": "code_snippet",
			"value": schemaContent
		});

		$form.append($input);
		$("body").append($form);

		$form.submit();
		$form.remove();
	});
	
	$(document).on('change', '.siteseo_structured_data_type', function(e){
		e.preventDefault();
		
		let schemaType = $(this).val(),
		propertiesContainer = $('#siteseo_schema_properties_container'),
		customSchemaContainer = $('#siteseo_custom_schema_container'),
		propertiesDiv = $('.siteseo-schema-properties');

		$('.siteseo_structured_data_type').val(schemaType);
		
		propertiesDiv.empty();
		
		if(schemaType === ''){
			propertiesContainer.addClass('hidden');
			customSchemaContainer.addClass('hidden');
			$('#siteseo_schema_preview').html('');
			$('#raw_schema').text('');
			return;
		}
	   
		if(schemaType === 'CustomSchema'){
			propertiesContainer.addClass('hidden');
			customSchemaContainer.removeClass('hidden');
			updateCustomSchemaPreview();
			return;
		} else{
			propertiesContainer.removeClass('hidden');
			customSchemaContainer.addClass('hidden');
		}
		
		// schemas load
		let properties = structuredDataMetabox.propertyTemplates[schemaType] || {};
		// Create form fields for each property
		$.each(properties, function(property, defaultValue){
			var label = property.replace(/([a-z])([A-Z])/g, '$1 $2');
			label = label.charAt(0).toUpperCase() + label.slice(1);
			
			let field = '',
			is_textarea_fields = ['description', 'instructions', 'reviewBody', 'questions', 'step', 'ingredients', 'recipeInstructions', 'courseDescription', 'bookDescription', 'softwareRequirements', 'menu'],
			is_date_type_fields = ['datePublished', 'dateModified', 'uploadDate', 'startDate', 'endDate', 'foundingDate', 'releaseDate'];
			
			if(is_textarea_fields.includes(property)){
				field = $('<textarea/>').attr({ name: 'schema_properties[' + property + ']', id: 'siteseo_schema_property_' + property, rows: 3, class: 'widefat'}).val(defaultValue);
			} else if (is_date_type_fields.includes(property)){
				field = $('<input/>').attr({ type: 'datetime-local', name: 'schema_properties[' + property + ']', id: 'siteseo_schema_property_' + property,
				class: 'widefat'}).val(defaultValue);
			} else {
				field = $('<input/>').attr({ type: 'text', name: 'schema_properties[' + property + ']', id: 'siteseo_schema_property_' + property,
				class: 'widefat'}).val(defaultValue);
			}
			
			$('<p/>')
				.append($('<label/>').attr('for', 'siteseo_schema_property_' + property).text(label + ':'))
				.append(field)
				.appendTo(propertiesDiv);
			});
			
			// preview update
			updatePreview();
			$(document).on('input', '.siteseo-schema-properties input, #schema_properties textarea', updatePreview);
	});
	
	// preview function
	function updatePreview(){
		var schemaType = $('.siteseo_structured_data_type').val();
		if(schemaType === 'CustomSchema'){
			updateCustomSchemaPreview();
			return;
		}

		var schemaData = {
			'@context': 'https://schema.org',
			'@type': schemaType
		};
	   
		$('.siteseo-schema-properties input, #siteseo-schema-properties textarea').each(function(){
			var propertyName = $(this).attr('name').match(/\[(.*?)\]/)[1];
			var propertyValue = $(this).val();

			if(propertyValue !== ''){
			schemaData[propertyName] = propertyValue;
			}
		});
	   
		var jsonString = JSON.stringify(schemaData, null, 2);
		$('#raw_schema').text(jsonString);
	   
	   // Make sure highlighter element exists
		if($('#siteseo_schema_preview #siteseo_highlighter').length === 0){
		   $('#siteseo_schema_preview').html('<div id="siteseo_highlighter"></div><div id="raw_schema" style="display:none;"></div>');
		}
	   
		$('#siteseo_schema_preview #siteseo_highlighter').html(highlightJson(jsonString));
	}
	
	// Custom schema preview
	function updateCustomSchemaPreview(){
		var customSchema = $('.siteseo_structured_data_custom').val() || '';
		$('#raw_schema').text(customSchema);
	   
		// highlighter element exists
		if($('#siteseo_schema_preview #siteseo_highlighter').length === 0){
			$('#siteseo_schema_preview').html('<div id="siteseo_highlighter"></div><div id="raw_schema" style="display:none;"></div>');
		}
	   
		try{
			
			if(customSchema.trim()){
				var jsonObj = JSON.parse(customSchema);
				$('#siteseo_schema_preview #siteseo_highlighter').html(highlightJson(jsonObj));
			} else{
				$('#siteseo_schema_preview #siteseo_highlighter').html('');
			}
		} catch(e){
			
			$('#siteseo_schema_preview #siteseo_highlighter').text(customSchema);
		}
	}
   
	// as per schema change update preview
	$('.siteseo_structured_data_custom').on('input', updateCustomSchemaPreview);
   
	// Initial preview update
	if($('.siteseo_structured_data_type').val() !== ''){
		if($('.siteseo_structured_data_type').val() === 'CustomSchema'){
			updateCustomSchemaPreview();
		} else{
			updatePreview();
			$(document).on('input', '#siteseo-schema-properties input, #siteseo-schema-properties textarea', updatePreview);
		}
	}
});
assets/js/admin.js000064400000025240151545121570010121 0ustar00jQuery(document).ready(function($){
	$('#siteseopro-pagespeed-results .siteseo-metabox-tab-label').click(function(){
		$('.siteseo-metabox-tab-label').removeClass('siteseo-metabox-tab-label-active');
		$('.siteseo-metabox-tab').hide();

		$(this).addClass('siteseo-metabox-tab-label-active');

		var activeTab = $(this).data('tab');
		$('.' + activeTab).show();
	});
	
	$('input[name="ps_device_type"]').on('change', function(){
		jEle = jQuery(this),
		val = jEle.val();
		
		if(val == 'mobile'){
			jQuery('#siteseo-ps-mobile').css('display', 'flex');
			jQuery('#siteseo-ps-mobile').find('.siteseo-metabox-tab-label:first-child').trigger('click');
			jQuery('#siteseo-ps-desktop').hide();
		} else {
			jQuery('#siteseo-ps-mobile').hide();
			jQuery('#siteseo-ps-desktop').css('display', 'flex');
			jQuery('#siteseo-ps-desktop').find('.siteseo-metabox-tab-label:first-child').trigger('click');
		}
		
	});

    $('#siteseopro-pagespeed-btn').on('click', function(){
		$('#siteseopro-pagespeed-results').empty();
    let spinner = $(this).next(),
		input = $(this).closest('div').find('input');

    spinner.addClass('is-active'),

		siteseo_pagespeed_request(input.val(), true);
		siteseo_pagespeed_request(input.val(), false);
    });

	$('#siteseopro-clear-Page-speed-insights').on('click', function(){
		$.ajax({
			url: siteseo_pro.ajax_url,
			type: 'POST',
			data: {
				action: 'siteseo_pro_pagespeed_insights_remove_results',
				nonce: siteseo_pro.nonce
			},
			success: function(response){
				$('#siteseopro-pagespeed-results').empty();
			}
		});

	});

	$('.siteseo-audit-title').next('.description').hide();

    $('.siteseo-audit-title').on('click', function(e){
        var description = $(this).next('.description');
        var icon = $(this).find(".toggle-icon");

        if(description.is(':visible')){
			description.hide();
			icon.addClass('class', 'toggle-icon dashicons dashicons-arrow-up-alt2');
        } else {
			description.show();
			icon.addClass('class', 'toggle-icon dashicons dashicons-arrow-down-alt2');
        }
    });
	
	// create robots txt
  $('#siteseo-create-robots').on('click', function(){
    event.preventDefault();
    let spinner = $(event.target).next('.spinner');
		
	  if(spinner.length){
		  spinner.addClass('is-active');
		}

		$.ajax({
      method : 'POST',
      url : siteseo_pro.ajax_url,
      data : {
      	action : 'siteseo_pro_create_robots',
      	_ajax_nonce : siteseo_pro.nonce
			},
			success: function(res){

				if(spinner.length){
					spinner.removeClass('is-active');
				}

				if(res.success){
					alert(res.data);
					window.location.reload();
					return;
				}

				alert('Unable to create the robots.txt file');
			}
		});
	});
	
	//htaccess
	$('#siteseo_htaccess_btn').on('click', function(){
        event.preventDefault();
		
		let spinner = $(event.target).next('.spinner');

		if(spinner.length){
			spinner.addClass('is-active');
		}

        let htaccess_code = $('#siteseo_htaccess_file').val(),
        htaccess_enable = $('#siteseo_htaccess_enable').is(':checked') ? 1 : 0;

        $.ajax({
        
            url : siteseo_pro.ajax_url,
			method: 'POST',
            data: {
                action: 'siteseo_pro_update_htaccess',
                htaccess_code: htaccess_code,
                htaccess_enable: htaccess_enable,
                _ajax_nonce : siteseo_pro.nonce
            },
            success: function(res){
				if(spinner.length){
					spinner.removeClass('is-active');
				}
				
				if(res.success){
					alert(res.data);
					return;
				}
				
				if(res.data){
					alert(res.data)
					return;
				}

				alert('Something went wrong, updating the file');
            }
        });
    });
	
	// Csv download
	$('#siteseo-export-csv').on('click', function(event){
		event.preventDefault();
        
		$.ajax({
			method: 'POST',
			url: siteseo_pro.ajax_url,
			data: {
				action: 'siteseo_pro_export_redirect_csv',
				_ajax_nonce: siteseo_pro.nonce
			},
            
			beforeSend: function(){
				$('#siteseo-export-csv').prop('disabled', true);
			},
			xhrFields:{
				responseType: 'blob'
			},
			success: function(response, status, xhr){
                
        var filename = 'siteseo-redirect-data-' + new Date().toISOString().slice(0,10) + '.csv';
				var disposition = xhr.getResponseHeader('Content-Disposition');
                if(disposition){
					var match = disposition.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/);
					if(match && match[1]){
                        filename = match[1].replace(/['"]/g, '');
					}
				}
                
			  var blob = new Blob([response], { type: 'text/csv' });
				var url = window.URL.createObjectURL(blob);
				var a = document.createElement('a');
				a.href = url;
				a.download = filename;
				document.body.appendChild(a);
				a.click();
				window.URL.revokeObjectURL(url);
				document.body.removeChild(a);
			},
			error: function(){
				alert('Error connecting to the server');
			},
			complete: function(){
				$('#siteseo-export-csv').prop('disabled', false);
			}
		});
	});
	
	// Clear all redirect logs
	$('#siteseo_redirect_all_logs').on('click', function(){
		event.preventDefault();
		
		if(!confirm('Are you sure you want to clear all logs?')){
			return;
		}

		let spinner = $(event.target).next('.spinner');

		if(spinner.length){
			spinner.addClass('is-active');
		}

		$.ajax({
			method: 'POST',
			url: siteseo_pro.ajax_url,
			data: {
				action: 'siteseo_pro_clear_all_logs',
				_ajax_nonce: siteseo_pro.nonce
			},
			success: function(res){
				if(spinner.length){
					spinner.removeClass('is-active');
				}

				if(res.success){
					alert(res.data);
					window.location.reload();
					return;
				}
				alert('Unable to clear logs.');
			},
			error: function(){
				alert('Error clearing logs.');
				if(spinner.length){
					spinner.removeClass('is-active');
				}
			}
		});
	});
	
	// update robots file
	$('#siteseo-update-robots').on('click', function(){
		event.preventDefault();
	
		let spinner = $(event.target).next('.spinner');

		if(spinner.length){
			spinner.addClass('is-active');
		}

		$.ajax({
			method : 'POST',
			url : siteseo_pro.ajax_url,
			data : {
				action : 'siteseo_pro_update_robots',
				robots : $('#siteseo_robots_file_content').val(),
				_ajax_nonce : siteseo_pro.nonce
			},
			success: function(res){
				
				if(spinner.length){
					spinner.removeClass('is-active');
				}

				if(res.success){
					alert(res.data);
					window.location.reload();
					return;
				}

				if(res.data){
					alert(res.data);
					return;
				}
				
				alert('Unable to create the robots.txt file');
			}
		});
	});
	
	$('#select-all-logs').on('click', function(){
		$('.log-selector').prop('checked', this.checked);
	});
	
	//Delete specific recoder 
	$('#siteseo-remove-selected-log').on('click', function(){
		var selectedIds = [];
		
		$('.log-selector:checked').each(function(){
			selectedIds.push($(this).val());
		});
		
		if(selectedIds.length === 0){
			alert('Please select at least one log to delete');
			return;
		}
		
		if(!confirm('Are you sure you want to delete the selected logs?')){
			return;
		}
		
		$.ajax({
			type : 'POST',
			url: siteseo_pro.ajax_url,
			data:{
				action: 'siteseo_pro_remove_selected_logs',
				ids: selectedIds,
				_ajax_nonce: siteseo_pro.nonce
			},
			success: function(response){
				if(response.success){
					
					$('.log-selector:checked').closest('tr').remove();
					alert('Selected logs deleted successfully');
				}else{
					alert('Error: ' + response.data);
				}
			},
			error: function(){
				alert('Failed to delete logs. Please try again.');
			}
		});
	});

	// handel ajax toggle
  $('.siteseo-toggleSw').on('click', function(){
    const $toggle = $(this);
    const toggleKey = $toggle.data('toggle-key');
    const action = $toggle.data('action');

    saveToggle($toggle, toggleKey, action);
	});

  function saveToggle($toggle, toggleKey, action){
    const $container = $toggle.closest('.siteseo-toggleCnt');
    const $stateText = $container.find(`.toggle_state_${toggleKey}`);
    const $input = $(`#${toggleKey}`);

    $container.addClass('loading');
    $toggle.toggleClass('active');

    const newValue = $toggle.hasClass('active') ? '1' : '0';
    $input.val(newValue);
    $stateText.text($toggle.hasClass('active') ? 'Click to disable this feature' : 'Click to enable this feature');

    $.ajax({
    url: ajaxurl,
    type: 'POST',
    data: {
    	action: action,
    	toggle_value: newValue,
    	nonce: $toggle.data('nonce')
    },
    success: function(response){
    	if(response.success){
    		// Show the custom toast message
    		ToastMsg('Your settings have been saved.');
    	} else{
    		console.error('Failed to save toggle state');
    		toggleError($toggle, $input, $stateText);
    		ToastMsg(response.data.message || 'Failed to save toggle state', 'error');
    	}
    },
    error: function() {
    	console.error('Ajax request failed');
    	toggleError($toggle, $input, $stateText);
    	ToastMsg('Unable to save settings', 'error');
    },
    complete: function() {
    $container.removeClass('loading');
			}
		});
	}
	
	//toast
	function ToastMsg(message, type = 'success') {

		const toast = $('<div>')
			.addClass('siteseo-toast')
			.addClass(type) 
			.html(`<span class="dashicons dashicons-yes"></span> ${message}`);

		$('body').append(toast); 

		// 3 seconds
		toast.fadeIn(300).delay(3000).fadeOut(300, function () {
			toast.remove();
		});
	}

	// error hadeler
	function toggleError($toggle, $input, $stateText) {
		$toggle.toggleClass('active');
		$input.val($toggle.hasClass('active') ? '1' : '0');
		$stateText.text($toggle.hasClass('active') ? 'Disable' : 'Enable');
	}

	// media uploader for image logo 
	$('#siteseopro_structured_data_upload_img').click(function(e) {
		var mediaUploader;
		e.preventDefault();
		
		if (mediaUploader) {
			mediaUploader.open();
			return;
		}

		
		mediaUploader = wp.media.frames.file_frame = wp.media({
			title: 'Media',
			button: {
				text: 'Select'
			},
			multiple: false
		});

		
		mediaUploader.on('select', function() {
			var attachment = mediaUploader.state().get('selection').first().toJSON();
			$('#structured_data_image_url').val(attachment.url);
		});
		
		mediaUploader.open();

	});
	
});

async function siteseo_pagespeed_request(url, is_mobile = false){
	jQuery.ajax({
		url: siteseo_pro.ajax_url,
		type: 'POST',
		data: {
			action: 'siteseo_pro_get_pagespeed_insights',
			is_mobile : is_mobile,
			test_url : url,
			nonce: siteseo_pro.nonce
		},
		success: function(response){
			if(!response.success){
				alert(response.data ?? 'Something went wrong');
				return;
			}

			if(siteseo_pro.pagespeed_response){
				//spinner.removeClass('is-active');
				location.reload(true);
				return;
			}

			siteseo_pro['pagespeed_response'] = true;
		}
	});	

	
}assets/js/breadcrumbs/package.json000064400000000643151545121760013253 0ustar00{
	"name": "breadcrumbs",
	"version": "0.1.0",
	"description": "Adds HTML breadcrumbs on the page",
	"author": "SiteSEO",
	"license": "GPL-2.0",
	"main": "build/index.js",
	"scripts": {
		"build": "wp-scripts build",
		"format": "wp-scripts format",
		"lint:css": "wp-scripts lint-style",
		"lint:js": "wp-scripts lint-js",
		"start": "wp-scripts start"
	},
	"devDependencies": {
		"@wordpress/scripts": "^27.7.0"
	}
}
assets/js/breadcrumbs/package-lock.json000064400002320402151545122120014170 0ustar00{
	"name": "breadcrumbs",
	"version": "0.1.0",
	"lockfileVersion": 3,
	"requires": true,
	"packages": {
		"": {
			"name": "breadcrumbs",
			"version": "0.1.0",
			"license": "GPL-2.0",
			"devDependencies": {
				"@wordpress/scripts": "^27.7.0"
			}
		},
		"node_modules/@ampproject/remapping": {
			"version": "2.3.0",
			"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
			"integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
			"dev": true,
			"dependencies": {
				"@jridgewell/gen-mapping": "^0.3.5",
				"@jridgewell/trace-mapping": "^0.3.24"
			},
			"engines": {
				"node": ">=6.0.0"
			}
		},
		"node_modules/@babel/code-frame": {
			"version": "7.24.2",
			"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz",
			"integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==",
			"dev": true,
			"dependencies": {
				"@babel/highlight": "^7.24.2",
				"picocolors": "^1.0.0"
			},
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/compat-data": {
			"version": "7.24.4",
			"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz",
			"integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==",
			"dev": true,
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/core": {
			"version": "7.24.4",
			"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz",
			"integrity": "sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==",
			"dev": true,
			"dependencies": {
				"@ampproject/remapping": "^2.2.0",
				"@babel/code-frame": "^7.24.2",
				"@babel/generator": "^7.24.4",
				"@babel/helper-compilation-targets": "^7.23.6",
				"@babel/helper-module-transforms": "^7.23.3",
				"@babel/helpers": "^7.24.4",
				"@babel/parser": "^7.24.4",
				"@babel/template": "^7.24.0",
				"@babel/traverse": "^7.24.1",
				"@babel/types": "^7.24.0",
				"convert-source-map": "^2.0.0",
				"debug": "^4.1.0",
				"gensync": "^1.0.0-beta.2",
				"json5": "^2.2.3",
				"semver": "^6.3.1"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/babel"
			}
		},
		"node_modules/@babel/eslint-parser": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.1.tgz",
			"integrity": "sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==",
			"dev": true,
			"dependencies": {
				"@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1",
				"eslint-visitor-keys": "^2.1.0",
				"semver": "^6.3.1"
			},
			"engines": {
				"node": "^10.13.0 || ^12.13.0 || >=14.0.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.11.0",
				"eslint": "^7.5.0 || ^8.0.0"
			}
		},
		"node_modules/@babel/generator": {
			"version": "7.24.4",
			"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz",
			"integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==",
			"dev": true,
			"dependencies": {
				"@babel/types": "^7.24.0",
				"@jridgewell/gen-mapping": "^0.3.5",
				"@jridgewell/trace-mapping": "^0.3.25",
				"jsesc": "^2.5.1"
			},
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/helper-annotate-as-pure": {
			"version": "7.22.5",
			"resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
			"integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
			"dev": true,
			"dependencies": {
				"@babel/types": "^7.22.5"
			},
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
			"version": "7.22.15",
			"resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz",
			"integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==",
			"dev": true,
			"dependencies": {
				"@babel/types": "^7.22.15"
			},
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/helper-compilation-targets": {
			"version": "7.23.6",
			"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
			"integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
			"dev": true,
			"dependencies": {
				"@babel/compat-data": "^7.23.5",
				"@babel/helper-validator-option": "^7.23.5",
				"browserslist": "^4.22.2",
				"lru-cache": "^5.1.1",
				"semver": "^6.3.1"
			},
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/helper-create-class-features-plugin": {
			"version": "7.24.4",
			"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz",
			"integrity": "sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==",
			"dev": true,
			"dependencies": {
				"@babel/helper-annotate-as-pure": "^7.22.5",
				"@babel/helper-environment-visitor": "^7.22.20",
				"@babel/helper-function-name": "^7.23.0",
				"@babel/helper-member-expression-to-functions": "^7.23.0",
				"@babel/helper-optimise-call-expression": "^7.22.5",
				"@babel/helper-replace-supers": "^7.24.1",
				"@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
				"@babel/helper-split-export-declaration": "^7.22.6",
				"semver": "^6.3.1"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0"
			}
		},
		"node_modules/@babel/helper-create-regexp-features-plugin": {
			"version": "7.22.15",
			"resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz",
			"integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==",
			"dev": true,
			"dependencies": {
				"@babel/helper-annotate-as-pure": "^7.22.5",
				"regexpu-core": "^5.3.1",
				"semver": "^6.3.1"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0"
			}
		},
		"node_modules/@babel/helper-define-polyfill-provider": {
			"version": "0.6.2",
			"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz",
			"integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==",
			"dev": true,
			"dependencies": {
				"@babel/helper-compilation-targets": "^7.22.6",
				"@babel/helper-plugin-utils": "^7.22.5",
				"debug": "^4.1.1",
				"lodash.debounce": "^4.0.8",
				"resolve": "^1.14.2"
			},
			"peerDependencies": {
				"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
			}
		},
		"node_modules/@babel/helper-environment-visitor": {
			"version": "7.22.20",
			"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
			"integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
			"dev": true,
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/helper-function-name": {
			"version": "7.23.0",
			"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
			"integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
			"dev": true,
			"dependencies": {
				"@babel/template": "^7.22.15",
				"@babel/types": "^7.23.0"
			},
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/helper-hoist-variables": {
			"version": "7.22.5",
			"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
			"integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
			"dev": true,
			"dependencies": {
				"@babel/types": "^7.22.5"
			},
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/helper-member-expression-to-functions": {
			"version": "7.23.0",
			"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz",
			"integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==",
			"dev": true,
			"dependencies": {
				"@babel/types": "^7.23.0"
			},
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/helper-module-imports": {
			"version": "7.24.3",
			"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz",
			"integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==",
			"dev": true,
			"dependencies": {
				"@babel/types": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/helper-module-transforms": {
			"version": "7.23.3",
			"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
			"integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
			"dev": true,
			"dependencies": {
				"@babel/helper-environment-visitor": "^7.22.20",
				"@babel/helper-module-imports": "^7.22.15",
				"@babel/helper-simple-access": "^7.22.5",
				"@babel/helper-split-export-declaration": "^7.22.6",
				"@babel/helper-validator-identifier": "^7.22.20"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0"
			}
		},
		"node_modules/@babel/helper-optimise-call-expression": {
			"version": "7.22.5",
			"resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz",
			"integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==",
			"dev": true,
			"dependencies": {
				"@babel/types": "^7.22.5"
			},
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/helper-plugin-utils": {
			"version": "7.24.0",
			"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz",
			"integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==",
			"dev": true,
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/helper-remap-async-to-generator": {
			"version": "7.22.20",
			"resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz",
			"integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==",
			"dev": true,
			"dependencies": {
				"@babel/helper-annotate-as-pure": "^7.22.5",
				"@babel/helper-environment-visitor": "^7.22.20",
				"@babel/helper-wrap-function": "^7.22.20"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0"
			}
		},
		"node_modules/@babel/helper-replace-supers": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz",
			"integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==",
			"dev": true,
			"dependencies": {
				"@babel/helper-environment-visitor": "^7.22.20",
				"@babel/helper-member-expression-to-functions": "^7.23.0",
				"@babel/helper-optimise-call-expression": "^7.22.5"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0"
			}
		},
		"node_modules/@babel/helper-simple-access": {
			"version": "7.22.5",
			"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
			"integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
			"dev": true,
			"dependencies": {
				"@babel/types": "^7.22.5"
			},
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/helper-skip-transparent-expression-wrappers": {
			"version": "7.22.5",
			"resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz",
			"integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==",
			"dev": true,
			"dependencies": {
				"@babel/types": "^7.22.5"
			},
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/helper-split-export-declaration": {
			"version": "7.22.6",
			"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
			"integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
			"dev": true,
			"dependencies": {
				"@babel/types": "^7.22.5"
			},
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/helper-string-parser": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz",
			"integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==",
			"dev": true,
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/helper-validator-identifier": {
			"version": "7.22.20",
			"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
			"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
			"dev": true,
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/helper-validator-option": {
			"version": "7.23.5",
			"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
			"integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==",
			"dev": true,
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/helper-wrap-function": {
			"version": "7.22.20",
			"resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz",
			"integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==",
			"dev": true,
			"dependencies": {
				"@babel/helper-function-name": "^7.22.5",
				"@babel/template": "^7.22.15",
				"@babel/types": "^7.22.19"
			},
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/helpers": {
			"version": "7.24.4",
			"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz",
			"integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==",
			"dev": true,
			"dependencies": {
				"@babel/template": "^7.24.0",
				"@babel/traverse": "^7.24.1",
				"@babel/types": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/highlight": {
			"version": "7.24.2",
			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz",
			"integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==",
			"dev": true,
			"dependencies": {
				"@babel/helper-validator-identifier": "^7.22.20",
				"chalk": "^2.4.2",
				"js-tokens": "^4.0.0",
				"picocolors": "^1.0.0"
			},
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/highlight/node_modules/ansi-styles": {
			"version": "3.2.1",
			"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
			"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
			"dev": true,
			"dependencies": {
				"color-convert": "^1.9.0"
			},
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/@babel/highlight/node_modules/chalk": {
			"version": "2.4.2",
			"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
			"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
			"dev": true,
			"dependencies": {
				"ansi-styles": "^3.2.1",
				"escape-string-regexp": "^1.0.5",
				"supports-color": "^5.3.0"
			},
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/@babel/highlight/node_modules/color-convert": {
			"version": "1.9.3",
			"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
			"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
			"dev": true,
			"dependencies": {
				"color-name": "1.1.3"
			}
		},
		"node_modules/@babel/highlight/node_modules/color-name": {
			"version": "1.1.3",
			"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
			"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
			"dev": true
		},
		"node_modules/@babel/highlight/node_modules/escape-string-regexp": {
			"version": "1.0.5",
			"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
			"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
			"dev": true,
			"engines": {
				"node": ">=0.8.0"
			}
		},
		"node_modules/@babel/highlight/node_modules/has-flag": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
			"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
			"dev": true,
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/@babel/highlight/node_modules/supports-color": {
			"version": "5.5.0",
			"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
			"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
			"dev": true,
			"dependencies": {
				"has-flag": "^3.0.0"
			},
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/@babel/parser": {
			"version": "7.24.4",
			"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz",
			"integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==",
			"dev": true,
			"bin": {
				"parser": "bin/babel-parser.js"
			},
			"engines": {
				"node": ">=6.0.0"
			}
		},
		"node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
			"version": "7.24.4",
			"resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz",
			"integrity": "sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==",
			"dev": true,
			"dependencies": {
				"@babel/helper-environment-visitor": "^7.22.20",
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0"
			}
		},
		"node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz",
			"integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0"
			}
		},
		"node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz",
			"integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
				"@babel/plugin-transform-optional-chaining": "^7.24.1"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.13.0"
			}
		},
		"node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz",
			"integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==",
			"dev": true,
			"dependencies": {
				"@babel/helper-environment-visitor": "^7.22.20",
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0"
			}
		},
		"node_modules/@babel/plugin-proposal-private-property-in-object": {
			"version": "7.21.0-placeholder-for-preset-env.2",
			"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
			"integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
			"dev": true,
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-syntax-async-generators": {
			"version": "7.8.4",
			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
			"integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.8.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-syntax-bigint": {
			"version": "7.8.3",
			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
			"integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.8.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-syntax-class-properties": {
			"version": "7.12.13",
			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
			"integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.12.13"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-syntax-class-static-block": {
			"version": "7.14.5",
			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
			"integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.14.5"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-syntax-dynamic-import": {
			"version": "7.8.3",
			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
			"integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.8.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-syntax-export-namespace-from": {
			"version": "7.8.3",
			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
			"integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.8.3"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-syntax-import-assertions": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz",
			"integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-syntax-import-attributes": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz",
			"integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-syntax-import-meta": {
			"version": "7.10.4",
			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
			"integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.10.4"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-syntax-json-strings": {
			"version": "7.8.3",
			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
			"integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.8.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-syntax-jsx": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz",
			"integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-syntax-logical-assignment-operators": {
			"version": "7.10.4",
			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
			"integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.10.4"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
			"version": "7.8.3",
			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
			"integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.8.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-syntax-numeric-separator": {
			"version": "7.10.4",
			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
			"integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.10.4"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-syntax-object-rest-spread": {
			"version": "7.8.3",
			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
			"integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.8.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-syntax-optional-catch-binding": {
			"version": "7.8.3",
			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
			"integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.8.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-syntax-optional-chaining": {
			"version": "7.8.3",
			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
			"integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.8.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-syntax-private-property-in-object": {
			"version": "7.14.5",
			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
			"integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.14.5"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-syntax-top-level-await": {
			"version": "7.14.5",
			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
			"integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.14.5"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-syntax-typescript": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz",
			"integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-syntax-unicode-sets-regex": {
			"version": "7.18.6",
			"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
			"integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
			"dev": true,
			"dependencies": {
				"@babel/helper-create-regexp-features-plugin": "^7.18.6",
				"@babel/helper-plugin-utils": "^7.18.6"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0"
			}
		},
		"node_modules/@babel/plugin-transform-arrow-functions": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz",
			"integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-async-generator-functions": {
			"version": "7.24.3",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz",
			"integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==",
			"dev": true,
			"dependencies": {
				"@babel/helper-environment-visitor": "^7.22.20",
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/helper-remap-async-to-generator": "^7.22.20",
				"@babel/plugin-syntax-async-generators": "^7.8.4"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-async-to-generator": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz",
			"integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==",
			"dev": true,
			"dependencies": {
				"@babel/helper-module-imports": "^7.24.1",
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/helper-remap-async-to-generator": "^7.22.20"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-block-scoped-functions": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz",
			"integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-block-scoping": {
			"version": "7.24.4",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz",
			"integrity": "sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-class-properties": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz",
			"integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==",
			"dev": true,
			"dependencies": {
				"@babel/helper-create-class-features-plugin": "^7.24.1",
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-class-static-block": {
			"version": "7.24.4",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz",
			"integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==",
			"dev": true,
			"dependencies": {
				"@babel/helper-create-class-features-plugin": "^7.24.4",
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/plugin-syntax-class-static-block": "^7.14.5"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.12.0"
			}
		},
		"node_modules/@babel/plugin-transform-classes": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz",
			"integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==",
			"dev": true,
			"dependencies": {
				"@babel/helper-annotate-as-pure": "^7.22.5",
				"@babel/helper-compilation-targets": "^7.23.6",
				"@babel/helper-environment-visitor": "^7.22.20",
				"@babel/helper-function-name": "^7.23.0",
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/helper-replace-supers": "^7.24.1",
				"@babel/helper-split-export-declaration": "^7.22.6",
				"globals": "^11.1.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-computed-properties": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz",
			"integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/template": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-destructuring": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz",
			"integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-dotall-regex": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz",
			"integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==",
			"dev": true,
			"dependencies": {
				"@babel/helper-create-regexp-features-plugin": "^7.22.15",
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-duplicate-keys": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz",
			"integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-dynamic-import": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz",
			"integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/plugin-syntax-dynamic-import": "^7.8.3"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-exponentiation-operator": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz",
			"integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==",
			"dev": true,
			"dependencies": {
				"@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15",
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-export-namespace-from": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz",
			"integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/plugin-syntax-export-namespace-from": "^7.8.3"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-for-of": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz",
			"integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-function-name": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz",
			"integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==",
			"dev": true,
			"dependencies": {
				"@babel/helper-compilation-targets": "^7.23.6",
				"@babel/helper-function-name": "^7.23.0",
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-json-strings": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz",
			"integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/plugin-syntax-json-strings": "^7.8.3"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-literals": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz",
			"integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-logical-assignment-operators": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz",
			"integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-member-expression-literals": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz",
			"integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-modules-amd": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz",
			"integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==",
			"dev": true,
			"dependencies": {
				"@babel/helper-module-transforms": "^7.23.3",
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-modules-commonjs": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz",
			"integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==",
			"dev": true,
			"dependencies": {
				"@babel/helper-module-transforms": "^7.23.3",
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/helper-simple-access": "^7.22.5"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-modules-systemjs": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz",
			"integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==",
			"dev": true,
			"dependencies": {
				"@babel/helper-hoist-variables": "^7.22.5",
				"@babel/helper-module-transforms": "^7.23.3",
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/helper-validator-identifier": "^7.22.20"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-modules-umd": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz",
			"integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==",
			"dev": true,
			"dependencies": {
				"@babel/helper-module-transforms": "^7.23.3",
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
			"version": "7.22.5",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz",
			"integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==",
			"dev": true,
			"dependencies": {
				"@babel/helper-create-regexp-features-plugin": "^7.22.5",
				"@babel/helper-plugin-utils": "^7.22.5"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0"
			}
		},
		"node_modules/@babel/plugin-transform-new-target": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz",
			"integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz",
			"integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-numeric-separator": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz",
			"integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/plugin-syntax-numeric-separator": "^7.10.4"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-object-rest-spread": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz",
			"integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==",
			"dev": true,
			"dependencies": {
				"@babel/helper-compilation-targets": "^7.23.6",
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
				"@babel/plugin-transform-parameters": "^7.24.1"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-object-super": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz",
			"integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/helper-replace-supers": "^7.24.1"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-optional-catch-binding": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz",
			"integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-optional-chaining": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz",
			"integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
				"@babel/plugin-syntax-optional-chaining": "^7.8.3"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-parameters": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz",
			"integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-private-methods": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz",
			"integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==",
			"dev": true,
			"dependencies": {
				"@babel/helper-create-class-features-plugin": "^7.24.1",
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-private-property-in-object": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz",
			"integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==",
			"dev": true,
			"dependencies": {
				"@babel/helper-annotate-as-pure": "^7.22.5",
				"@babel/helper-create-class-features-plugin": "^7.24.1",
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/plugin-syntax-private-property-in-object": "^7.14.5"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-property-literals": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz",
			"integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-react-constant-elements": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.24.1.tgz",
			"integrity": "sha512-QXp1U9x0R7tkiGB0FOk8o74jhnap0FlZ5gNkRIWdG3eP+SvMFg118e1zaWewDzgABb106QSKpVsD3Wgd8t6ifA==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-react-display-name": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz",
			"integrity": "sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-react-jsx": {
			"version": "7.23.4",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz",
			"integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==",
			"dev": true,
			"dependencies": {
				"@babel/helper-annotate-as-pure": "^7.22.5",
				"@babel/helper-module-imports": "^7.22.15",
				"@babel/helper-plugin-utils": "^7.22.5",
				"@babel/plugin-syntax-jsx": "^7.23.3",
				"@babel/types": "^7.23.4"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-react-jsx-development": {
			"version": "7.22.5",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz",
			"integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==",
			"dev": true,
			"dependencies": {
				"@babel/plugin-transform-react-jsx": "^7.22.5"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-react-pure-annotations": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.1.tgz",
			"integrity": "sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA==",
			"dev": true,
			"dependencies": {
				"@babel/helper-annotate-as-pure": "^7.22.5",
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-regenerator": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz",
			"integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0",
				"regenerator-transform": "^0.15.2"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-reserved-words": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz",
			"integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-runtime": {
			"version": "7.24.3",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.3.tgz",
			"integrity": "sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==",
			"dev": true,
			"dependencies": {
				"@babel/helper-module-imports": "^7.24.3",
				"@babel/helper-plugin-utils": "^7.24.0",
				"babel-plugin-polyfill-corejs2": "^0.4.10",
				"babel-plugin-polyfill-corejs3": "^0.10.1",
				"babel-plugin-polyfill-regenerator": "^0.6.1",
				"semver": "^6.3.1"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-shorthand-properties": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz",
			"integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-spread": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz",
			"integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-sticky-regex": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz",
			"integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-template-literals": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz",
			"integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-typeof-symbol": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz",
			"integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-typescript": {
			"version": "7.24.4",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.4.tgz",
			"integrity": "sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g==",
			"dev": true,
			"dependencies": {
				"@babel/helper-annotate-as-pure": "^7.22.5",
				"@babel/helper-create-class-features-plugin": "^7.24.4",
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/plugin-syntax-typescript": "^7.24.1"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-unicode-escapes": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz",
			"integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-unicode-property-regex": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz",
			"integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==",
			"dev": true,
			"dependencies": {
				"@babel/helper-create-regexp-features-plugin": "^7.22.15",
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-unicode-regex": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz",
			"integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==",
			"dev": true,
			"dependencies": {
				"@babel/helper-create-regexp-features-plugin": "^7.22.15",
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/plugin-transform-unicode-sets-regex": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz",
			"integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==",
			"dev": true,
			"dependencies": {
				"@babel/helper-create-regexp-features-plugin": "^7.22.15",
				"@babel/helper-plugin-utils": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0"
			}
		},
		"node_modules/@babel/preset-env": {
			"version": "7.24.4",
			"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.4.tgz",
			"integrity": "sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==",
			"dev": true,
			"dependencies": {
				"@babel/compat-data": "^7.24.4",
				"@babel/helper-compilation-targets": "^7.23.6",
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/helper-validator-option": "^7.23.5",
				"@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.4",
				"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1",
				"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1",
				"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1",
				"@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
				"@babel/plugin-syntax-async-generators": "^7.8.4",
				"@babel/plugin-syntax-class-properties": "^7.12.13",
				"@babel/plugin-syntax-class-static-block": "^7.14.5",
				"@babel/plugin-syntax-dynamic-import": "^7.8.3",
				"@babel/plugin-syntax-export-namespace-from": "^7.8.3",
				"@babel/plugin-syntax-import-assertions": "^7.24.1",
				"@babel/plugin-syntax-import-attributes": "^7.24.1",
				"@babel/plugin-syntax-import-meta": "^7.10.4",
				"@babel/plugin-syntax-json-strings": "^7.8.3",
				"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
				"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
				"@babel/plugin-syntax-numeric-separator": "^7.10.4",
				"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
				"@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
				"@babel/plugin-syntax-optional-chaining": "^7.8.3",
				"@babel/plugin-syntax-private-property-in-object": "^7.14.5",
				"@babel/plugin-syntax-top-level-await": "^7.14.5",
				"@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
				"@babel/plugin-transform-arrow-functions": "^7.24.1",
				"@babel/plugin-transform-async-generator-functions": "^7.24.3",
				"@babel/plugin-transform-async-to-generator": "^7.24.1",
				"@babel/plugin-transform-block-scoped-functions": "^7.24.1",
				"@babel/plugin-transform-block-scoping": "^7.24.4",
				"@babel/plugin-transform-class-properties": "^7.24.1",
				"@babel/plugin-transform-class-static-block": "^7.24.4",
				"@babel/plugin-transform-classes": "^7.24.1",
				"@babel/plugin-transform-computed-properties": "^7.24.1",
				"@babel/plugin-transform-destructuring": "^7.24.1",
				"@babel/plugin-transform-dotall-regex": "^7.24.1",
				"@babel/plugin-transform-duplicate-keys": "^7.24.1",
				"@babel/plugin-transform-dynamic-import": "^7.24.1",
				"@babel/plugin-transform-exponentiation-operator": "^7.24.1",
				"@babel/plugin-transform-export-namespace-from": "^7.24.1",
				"@babel/plugin-transform-for-of": "^7.24.1",
				"@babel/plugin-transform-function-name": "^7.24.1",
				"@babel/plugin-transform-json-strings": "^7.24.1",
				"@babel/plugin-transform-literals": "^7.24.1",
				"@babel/plugin-transform-logical-assignment-operators": "^7.24.1",
				"@babel/plugin-transform-member-expression-literals": "^7.24.1",
				"@babel/plugin-transform-modules-amd": "^7.24.1",
				"@babel/plugin-transform-modules-commonjs": "^7.24.1",
				"@babel/plugin-transform-modules-systemjs": "^7.24.1",
				"@babel/plugin-transform-modules-umd": "^7.24.1",
				"@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
				"@babel/plugin-transform-new-target": "^7.24.1",
				"@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1",
				"@babel/plugin-transform-numeric-separator": "^7.24.1",
				"@babel/plugin-transform-object-rest-spread": "^7.24.1",
				"@babel/plugin-transform-object-super": "^7.24.1",
				"@babel/plugin-transform-optional-catch-binding": "^7.24.1",
				"@babel/plugin-transform-optional-chaining": "^7.24.1",
				"@babel/plugin-transform-parameters": "^7.24.1",
				"@babel/plugin-transform-private-methods": "^7.24.1",
				"@babel/plugin-transform-private-property-in-object": "^7.24.1",
				"@babel/plugin-transform-property-literals": "^7.24.1",
				"@babel/plugin-transform-regenerator": "^7.24.1",
				"@babel/plugin-transform-reserved-words": "^7.24.1",
				"@babel/plugin-transform-shorthand-properties": "^7.24.1",
				"@babel/plugin-transform-spread": "^7.24.1",
				"@babel/plugin-transform-sticky-regex": "^7.24.1",
				"@babel/plugin-transform-template-literals": "^7.24.1",
				"@babel/plugin-transform-typeof-symbol": "^7.24.1",
				"@babel/plugin-transform-unicode-escapes": "^7.24.1",
				"@babel/plugin-transform-unicode-property-regex": "^7.24.1",
				"@babel/plugin-transform-unicode-regex": "^7.24.1",
				"@babel/plugin-transform-unicode-sets-regex": "^7.24.1",
				"@babel/preset-modules": "0.1.6-no-external-plugins",
				"babel-plugin-polyfill-corejs2": "^0.4.10",
				"babel-plugin-polyfill-corejs3": "^0.10.4",
				"babel-plugin-polyfill-regenerator": "^0.6.1",
				"core-js-compat": "^3.31.0",
				"semver": "^6.3.1"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/preset-modules": {
			"version": "0.1.6-no-external-plugins",
			"resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
			"integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.0.0",
				"@babel/types": "^7.4.4",
				"esutils": "^2.0.2"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
			}
		},
		"node_modules/@babel/preset-react": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.1.tgz",
			"integrity": "sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/helper-validator-option": "^7.23.5",
				"@babel/plugin-transform-react-display-name": "^7.24.1",
				"@babel/plugin-transform-react-jsx": "^7.23.4",
				"@babel/plugin-transform-react-jsx-development": "^7.22.5",
				"@babel/plugin-transform-react-pure-annotations": "^7.24.1"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/preset-typescript": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz",
			"integrity": "sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.24.0",
				"@babel/helper-validator-option": "^7.23.5",
				"@babel/plugin-syntax-jsx": "^7.24.1",
				"@babel/plugin-transform-modules-commonjs": "^7.24.1",
				"@babel/plugin-transform-typescript": "^7.24.1"
			},
			"engines": {
				"node": ">=6.9.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@babel/regjsgen": {
			"version": "0.8.0",
			"resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
			"integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
			"dev": true
		},
		"node_modules/@babel/runtime": {
			"version": "7.24.4",
			"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz",
			"integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==",
			"dev": true,
			"dependencies": {
				"regenerator-runtime": "^0.14.0"
			},
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/template": {
			"version": "7.24.0",
			"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz",
			"integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==",
			"dev": true,
			"dependencies": {
				"@babel/code-frame": "^7.23.5",
				"@babel/parser": "^7.24.0",
				"@babel/types": "^7.24.0"
			},
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/traverse": {
			"version": "7.24.1",
			"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz",
			"integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==",
			"dev": true,
			"dependencies": {
				"@babel/code-frame": "^7.24.1",
				"@babel/generator": "^7.24.1",
				"@babel/helper-environment-visitor": "^7.22.20",
				"@babel/helper-function-name": "^7.23.0",
				"@babel/helper-hoist-variables": "^7.22.5",
				"@babel/helper-split-export-declaration": "^7.22.6",
				"@babel/parser": "^7.24.1",
				"@babel/types": "^7.24.0",
				"debug": "^4.3.1",
				"globals": "^11.1.0"
			},
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@babel/types": {
			"version": "7.24.0",
			"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz",
			"integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==",
			"dev": true,
			"dependencies": {
				"@babel/helper-string-parser": "^7.23.4",
				"@babel/helper-validator-identifier": "^7.22.20",
				"to-fast-properties": "^2.0.0"
			},
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"node_modules/@bcoe/v8-coverage": {
			"version": "0.2.3",
			"resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
			"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
			"dev": true
		},
		"node_modules/@csstools/selector-specificity": {
			"version": "2.2.0",
			"resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz",
			"integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==",
			"dev": true,
			"engines": {
				"node": "^14 || ^16 || >=18"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/csstools"
			},
			"peerDependencies": {
				"postcss-selector-parser": "^6.0.10"
			}
		},
		"node_modules/@discoveryjs/json-ext": {
			"version": "0.5.7",
			"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
			"integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
			"dev": true,
			"engines": {
				"node": ">=10.0.0"
			}
		},
		"node_modules/@es-joy/jsdoccomment": {
			"version": "0.41.0",
			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.41.0.tgz",
			"integrity": "sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==",
			"dev": true,
			"dependencies": {
				"comment-parser": "1.4.1",
				"esquery": "^1.5.0",
				"jsdoc-type-pratt-parser": "~4.0.0"
			},
			"engines": {
				"node": ">=16"
			}
		},
		"node_modules/@eslint-community/eslint-utils": {
			"version": "4.4.0",
			"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
			"integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
			"dev": true,
			"dependencies": {
				"eslint-visitor-keys": "^3.3.0"
			},
			"engines": {
				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
			},
			"peerDependencies": {
				"eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
			}
		},
		"node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
			"version": "3.4.3",
			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
			"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
			"dev": true,
			"engines": {
				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
			},
			"funding": {
				"url": "https://opencollective.com/eslint"
			}
		},
		"node_modules/@eslint-community/regexpp": {
			"version": "4.10.0",
			"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
			"integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
			"dev": true,
			"engines": {
				"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
			}
		},
		"node_modules/@eslint/eslintrc": {
			"version": "2.1.4",
			"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
			"integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
			"dev": true,
			"dependencies": {
				"ajv": "^6.12.4",
				"debug": "^4.3.2",
				"espree": "^9.6.0",
				"globals": "^13.19.0",
				"ignore": "^5.2.0",
				"import-fresh": "^3.2.1",
				"js-yaml": "^4.1.0",
				"minimatch": "^3.1.2",
				"strip-json-comments": "^3.1.1"
			},
			"engines": {
				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
			},
			"funding": {
				"url": "https://opencollective.com/eslint"
			}
		},
		"node_modules/@eslint/eslintrc/node_modules/argparse": {
			"version": "2.0.1",
			"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
			"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
			"dev": true
		},
		"node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
			"version": "1.1.11",
			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
			"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
			"dev": true,
			"dependencies": {
				"balanced-match": "^1.0.0",
				"concat-map": "0.0.1"
			}
		},
		"node_modules/@eslint/eslintrc/node_modules/globals": {
			"version": "13.24.0",
			"resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
			"integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
			"dev": true,
			"dependencies": {
				"type-fest": "^0.20.2"
			},
			"engines": {
				"node": ">=8"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/@eslint/eslintrc/node_modules/js-yaml": {
			"version": "4.1.0",
			"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
			"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
			"dev": true,
			"dependencies": {
				"argparse": "^2.0.1"
			},
			"bin": {
				"js-yaml": "bin/js-yaml.js"
			}
		},
		"node_modules/@eslint/eslintrc/node_modules/minimatch": {
			"version": "3.1.2",
			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
			"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
			"dev": true,
			"dependencies": {
				"brace-expansion": "^1.1.7"
			},
			"engines": {
				"node": "*"
			}
		},
		"node_modules/@eslint/eslintrc/node_modules/type-fest": {
			"version": "0.20.2",
			"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
			"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
			"dev": true,
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/@eslint/js": {
			"version": "8.57.0",
			"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
			"integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
			"dev": true,
			"engines": {
				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
			}
		},
		"node_modules/@hapi/hoek": {
			"version": "9.3.0",
			"resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz",
			"integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==",
			"dev": true
		},
		"node_modules/@hapi/topo": {
			"version": "5.1.0",
			"resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz",
			"integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==",
			"dev": true,
			"dependencies": {
				"@hapi/hoek": "^9.0.0"
			}
		},
		"node_modules/@humanwhocodes/config-array": {
			"version": "0.11.14",
			"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
			"integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
			"dev": true,
			"dependencies": {
				"@humanwhocodes/object-schema": "^2.0.2",
				"debug": "^4.3.1",
				"minimatch": "^3.0.5"
			},
			"engines": {
				"node": ">=10.10.0"
			}
		},
		"node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
			"version": "1.1.11",
			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
			"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
			"dev": true,
			"dependencies": {
				"balanced-match": "^1.0.0",
				"concat-map": "0.0.1"
			}
		},
		"node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
			"version": "3.1.2",
			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
			"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
			"dev": true,
			"dependencies": {
				"brace-expansion": "^1.1.7"
			},
			"engines": {
				"node": "*"
			}
		},
		"node_modules/@humanwhocodes/module-importer": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
			"integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
			"dev": true,
			"engines": {
				"node": ">=12.22"
			},
			"funding": {
				"type": "github",
				"url": "https://github.com/sponsors/nzakas"
			}
		},
		"node_modules/@humanwhocodes/object-schema": {
			"version": "2.0.3",
			"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
			"integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
			"dev": true
		},
		"node_modules/@istanbuljs/load-nyc-config": {
			"version": "1.1.0",
			"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
			"integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
			"dev": true,
			"dependencies": {
				"camelcase": "^5.3.1",
				"find-up": "^4.1.0",
				"get-package-type": "^0.1.0",
				"js-yaml": "^3.13.1",
				"resolve-from": "^5.0.0"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": {
			"version": "5.3.1",
			"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
			"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
			"dev": true,
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/@istanbuljs/schema": {
			"version": "0.1.3",
			"resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
			"integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/@jest/console": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
			"integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
			"dev": true,
			"dependencies": {
				"@jest/types": "^29.6.3",
				"@types/node": "*",
				"chalk": "^4.0.0",
				"jest-message-util": "^29.7.0",
				"jest-util": "^29.7.0",
				"slash": "^3.0.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/@jest/core": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz",
			"integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==",
			"dev": true,
			"dependencies": {
				"@jest/console": "^29.7.0",
				"@jest/reporters": "^29.7.0",
				"@jest/test-result": "^29.7.0",
				"@jest/transform": "^29.7.0",
				"@jest/types": "^29.6.3",
				"@types/node": "*",
				"ansi-escapes": "^4.2.1",
				"chalk": "^4.0.0",
				"ci-info": "^3.2.0",
				"exit": "^0.1.2",
				"graceful-fs": "^4.2.9",
				"jest-changed-files": "^29.7.0",
				"jest-config": "^29.7.0",
				"jest-haste-map": "^29.7.0",
				"jest-message-util": "^29.7.0",
				"jest-regex-util": "^29.6.3",
				"jest-resolve": "^29.7.0",
				"jest-resolve-dependencies": "^29.7.0",
				"jest-runner": "^29.7.0",
				"jest-runtime": "^29.7.0",
				"jest-snapshot": "^29.7.0",
				"jest-util": "^29.7.0",
				"jest-validate": "^29.7.0",
				"jest-watcher": "^29.7.0",
				"micromatch": "^4.0.4",
				"pretty-format": "^29.7.0",
				"slash": "^3.0.0",
				"strip-ansi": "^6.0.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			},
			"peerDependencies": {
				"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
			},
			"peerDependenciesMeta": {
				"node-notifier": {
					"optional": true
				}
			}
		},
		"node_modules/@jest/environment": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
			"integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
			"dev": true,
			"dependencies": {
				"@jest/fake-timers": "^29.7.0",
				"@jest/types": "^29.6.3",
				"@types/node": "*",
				"jest-mock": "^29.7.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/@jest/expect": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz",
			"integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==",
			"dev": true,
			"dependencies": {
				"expect": "^29.7.0",
				"jest-snapshot": "^29.7.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/@jest/expect-utils": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
			"integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
			"dev": true,
			"dependencies": {
				"jest-get-type": "^29.6.3"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/@jest/fake-timers": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
			"integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
			"dev": true,
			"dependencies": {
				"@jest/types": "^29.6.3",
				"@sinonjs/fake-timers": "^10.0.2",
				"@types/node": "*",
				"jest-message-util": "^29.7.0",
				"jest-mock": "^29.7.0",
				"jest-util": "^29.7.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/@jest/globals": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz",
			"integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==",
			"dev": true,
			"dependencies": {
				"@jest/environment": "^29.7.0",
				"@jest/expect": "^29.7.0",
				"@jest/types": "^29.6.3",
				"jest-mock": "^29.7.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/@jest/reporters": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz",
			"integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==",
			"dev": true,
			"dependencies": {
				"@bcoe/v8-coverage": "^0.2.3",
				"@jest/console": "^29.7.0",
				"@jest/test-result": "^29.7.0",
				"@jest/transform": "^29.7.0",
				"@jest/types": "^29.6.3",
				"@jridgewell/trace-mapping": "^0.3.18",
				"@types/node": "*",
				"chalk": "^4.0.0",
				"collect-v8-coverage": "^1.0.0",
				"exit": "^0.1.2",
				"glob": "^7.1.3",
				"graceful-fs": "^4.2.9",
				"istanbul-lib-coverage": "^3.0.0",
				"istanbul-lib-instrument": "^6.0.0",
				"istanbul-lib-report": "^3.0.0",
				"istanbul-lib-source-maps": "^4.0.0",
				"istanbul-reports": "^3.1.3",
				"jest-message-util": "^29.7.0",
				"jest-util": "^29.7.0",
				"jest-worker": "^29.7.0",
				"slash": "^3.0.0",
				"string-length": "^4.0.1",
				"strip-ansi": "^6.0.0",
				"v8-to-istanbul": "^9.0.1"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			},
			"peerDependencies": {
				"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
			},
			"peerDependenciesMeta": {
				"node-notifier": {
					"optional": true
				}
			}
		},
		"node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": {
			"version": "6.0.2",
			"resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz",
			"integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==",
			"dev": true,
			"dependencies": {
				"@babel/core": "^7.23.9",
				"@babel/parser": "^7.23.9",
				"@istanbuljs/schema": "^0.1.3",
				"istanbul-lib-coverage": "^3.2.0",
				"semver": "^7.5.4"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/@jest/reporters/node_modules/lru-cache": {
			"version": "6.0.0",
			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
			"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
			"dev": true,
			"dependencies": {
				"yallist": "^4.0.0"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/@jest/reporters/node_modules/semver": {
			"version": "7.6.0",
			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
			"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
			"dev": true,
			"dependencies": {
				"lru-cache": "^6.0.0"
			},
			"bin": {
				"semver": "bin/semver.js"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/@jest/reporters/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/@jest/schemas": {
			"version": "29.6.3",
			"resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
			"integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
			"dev": true,
			"dependencies": {
				"@sinclair/typebox": "^0.27.8"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/@jest/source-map": {
			"version": "29.6.3",
			"resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz",
			"integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==",
			"dev": true,
			"dependencies": {
				"@jridgewell/trace-mapping": "^0.3.18",
				"callsites": "^3.0.0",
				"graceful-fs": "^4.2.9"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/@jest/test-result": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz",
			"integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==",
			"dev": true,
			"dependencies": {
				"@jest/console": "^29.7.0",
				"@jest/types": "^29.6.3",
				"@types/istanbul-lib-coverage": "^2.0.0",
				"collect-v8-coverage": "^1.0.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/@jest/test-sequencer": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz",
			"integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==",
			"dev": true,
			"dependencies": {
				"@jest/test-result": "^29.7.0",
				"graceful-fs": "^4.2.9",
				"jest-haste-map": "^29.7.0",
				"slash": "^3.0.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/@jest/transform": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
			"integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
			"dev": true,
			"dependencies": {
				"@babel/core": "^7.11.6",
				"@jest/types": "^29.6.3",
				"@jridgewell/trace-mapping": "^0.3.18",
				"babel-plugin-istanbul": "^6.1.1",
				"chalk": "^4.0.0",
				"convert-source-map": "^2.0.0",
				"fast-json-stable-stringify": "^2.1.0",
				"graceful-fs": "^4.2.9",
				"jest-haste-map": "^29.7.0",
				"jest-regex-util": "^29.6.3",
				"jest-util": "^29.7.0",
				"micromatch": "^4.0.4",
				"pirates": "^4.0.4",
				"slash": "^3.0.0",
				"write-file-atomic": "^4.0.2"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/@jest/types": {
			"version": "29.6.3",
			"resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
			"integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
			"dev": true,
			"dependencies": {
				"@jest/schemas": "^29.6.3",
				"@types/istanbul-lib-coverage": "^2.0.0",
				"@types/istanbul-reports": "^3.0.0",
				"@types/node": "*",
				"@types/yargs": "^17.0.8",
				"chalk": "^4.0.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/@jridgewell/gen-mapping": {
			"version": "0.3.5",
			"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
			"integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
			"dev": true,
			"dependencies": {
				"@jridgewell/set-array": "^1.2.1",
				"@jridgewell/sourcemap-codec": "^1.4.10",
				"@jridgewell/trace-mapping": "^0.3.24"
			},
			"engines": {
				"node": ">=6.0.0"
			}
		},
		"node_modules/@jridgewell/resolve-uri": {
			"version": "3.1.2",
			"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
			"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
			"dev": true,
			"engines": {
				"node": ">=6.0.0"
			}
		},
		"node_modules/@jridgewell/set-array": {
			"version": "1.2.1",
			"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
			"integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
			"dev": true,
			"engines": {
				"node": ">=6.0.0"
			}
		},
		"node_modules/@jridgewell/source-map": {
			"version": "0.3.6",
			"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
			"integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
			"dev": true,
			"dependencies": {
				"@jridgewell/gen-mapping": "^0.3.5",
				"@jridgewell/trace-mapping": "^0.3.25"
			}
		},
		"node_modules/@jridgewell/sourcemap-codec": {
			"version": "1.4.15",
			"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
			"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
			"dev": true
		},
		"node_modules/@jridgewell/trace-mapping": {
			"version": "0.3.25",
			"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
			"integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
			"dev": true,
			"dependencies": {
				"@jridgewell/resolve-uri": "^3.1.0",
				"@jridgewell/sourcemap-codec": "^1.4.14"
			}
		},
		"node_modules/@leichtgewicht/ip-codec": {
			"version": "2.0.5",
			"resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
			"integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
			"dev": true
		},
		"node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
			"version": "5.1.1-v1",
			"resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
			"integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==",
			"dev": true,
			"dependencies": {
				"eslint-scope": "5.1.1"
			}
		},
		"node_modules/@nodelib/fs.scandir": {
			"version": "2.1.5",
			"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
			"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
			"dev": true,
			"dependencies": {
				"@nodelib/fs.stat": "2.0.5",
				"run-parallel": "^1.1.9"
			},
			"engines": {
				"node": ">= 8"
			}
		},
		"node_modules/@nodelib/fs.stat": {
			"version": "2.0.5",
			"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
			"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
			"dev": true,
			"engines": {
				"node": ">= 8"
			}
		},
		"node_modules/@nodelib/fs.walk": {
			"version": "1.2.8",
			"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
			"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
			"dev": true,
			"dependencies": {
				"@nodelib/fs.scandir": "2.1.5",
				"fastq": "^1.6.0"
			},
			"engines": {
				"node": ">= 8"
			}
		},
		"node_modules/@pkgr/core": {
			"version": "0.1.1",
			"resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz",
			"integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==",
			"dev": true,
			"engines": {
				"node": "^12.20.0 || ^14.18.0 || >=16.0.0"
			},
			"funding": {
				"url": "https://opencollective.com/unts"
			}
		},
		"node_modules/@playwright/test": {
			"version": "1.43.1",
			"resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.43.1.tgz",
			"integrity": "sha512-HgtQzFgNEEo4TE22K/X7sYTYNqEMMTZmFS8kTq6m8hXj+m1D8TgwgIbumHddJa9h4yl4GkKb8/bgAl2+g7eDgA==",
			"dev": true,
			"peer": true,
			"dependencies": {
				"playwright": "1.43.1"
			},
			"bin": {
				"playwright": "cli.js"
			},
			"engines": {
				"node": ">=16"
			}
		},
		"node_modules/@pmmmwh/react-refresh-webpack-plugin": {
			"version": "0.5.13",
			"resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.13.tgz",
			"integrity": "sha512-odZVYXly+JwzYri9rKqqUAk0cY6zLpv4dxoKinhoJNShV36Gpxf+CyDIILJ4tYsJ1ZxIWs233Y39iVnynvDA/g==",
			"dev": true,
			"dependencies": {
				"ansi-html-community": "^0.0.8",
				"core-js-pure": "^3.23.3",
				"error-stack-parser": "^2.0.6",
				"html-entities": "^2.1.0",
				"loader-utils": "^2.0.4",
				"schema-utils": "^3.0.0",
				"source-map": "^0.7.3"
			},
			"engines": {
				"node": ">= 10.13"
			},
			"peerDependencies": {
				"@types/webpack": "4.x || 5.x",
				"react-refresh": ">=0.10.0 <1.0.0",
				"sockjs-client": "^1.4.0",
				"type-fest": ">=0.17.0 <5.0.0",
				"webpack": ">=4.43.0 <6.0.0",
				"webpack-dev-server": "3.x || 4.x || 5.x",
				"webpack-hot-middleware": "2.x",
				"webpack-plugin-serve": "0.x || 1.x"
			},
			"peerDependenciesMeta": {
				"@types/webpack": {
					"optional": true
				},
				"sockjs-client": {
					"optional": true
				},
				"type-fest": {
					"optional": true
				},
				"webpack-dev-server": {
					"optional": true
				},
				"webpack-hot-middleware": {
					"optional": true
				},
				"webpack-plugin-serve": {
					"optional": true
				}
			}
		},
		"node_modules/@polka/url": {
			"version": "1.0.0-next.25",
			"resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz",
			"integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==",
			"dev": true
		},
		"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/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/@puppeteer/browsers/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/@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/@sideway/address": {
			"version": "4.1.5",
			"resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz",
			"integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==",
			"dev": true,
			"dependencies": {
				"@hapi/hoek": "^9.0.0"
			}
		},
		"node_modules/@sideway/formula": {
			"version": "3.0.1",
			"resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz",
			"integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==",
			"dev": true
		},
		"node_modules/@sideway/pinpoint": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz",
			"integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==",
			"dev": true
		},
		"node_modules/@sinclair/typebox": {
			"version": "0.27.8",
			"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
			"integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
			"dev": true
		},
		"node_modules/@sinonjs/commons": {
			"version": "3.0.1",
			"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
			"integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
			"dev": true,
			"dependencies": {
				"type-detect": "4.0.8"
			}
		},
		"node_modules/@sinonjs/fake-timers": {
			"version": "10.3.0",
			"resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
			"integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
			"dev": true,
			"dependencies": {
				"@sinonjs/commons": "^3.0.0"
			}
		},
		"node_modules/@svgr/babel-plugin-add-jsx-attribute": {
			"version": "8.0.0",
			"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz",
			"integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==",
			"dev": true,
			"engines": {
				"node": ">=14"
			},
			"funding": {
				"type": "github",
				"url": "https://github.com/sponsors/gregberge"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@svgr/babel-plugin-remove-jsx-attribute": {
			"version": "8.0.0",
			"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz",
			"integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==",
			"dev": true,
			"engines": {
				"node": ">=14"
			},
			"funding": {
				"type": "github",
				"url": "https://github.com/sponsors/gregberge"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": {
			"version": "8.0.0",
			"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz",
			"integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==",
			"dev": true,
			"engines": {
				"node": ">=14"
			},
			"funding": {
				"type": "github",
				"url": "https://github.com/sponsors/gregberge"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": {
			"version": "8.0.0",
			"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz",
			"integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==",
			"dev": true,
			"engines": {
				"node": ">=14"
			},
			"funding": {
				"type": "github",
				"url": "https://github.com/sponsors/gregberge"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@svgr/babel-plugin-svg-dynamic-title": {
			"version": "8.0.0",
			"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz",
			"integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==",
			"dev": true,
			"engines": {
				"node": ">=14"
			},
			"funding": {
				"type": "github",
				"url": "https://github.com/sponsors/gregberge"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@svgr/babel-plugin-svg-em-dimensions": {
			"version": "8.0.0",
			"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz",
			"integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==",
			"dev": true,
			"engines": {
				"node": ">=14"
			},
			"funding": {
				"type": "github",
				"url": "https://github.com/sponsors/gregberge"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@svgr/babel-plugin-transform-react-native-svg": {
			"version": "8.1.0",
			"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz",
			"integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==",
			"dev": true,
			"engines": {
				"node": ">=14"
			},
			"funding": {
				"type": "github",
				"url": "https://github.com/sponsors/gregberge"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@svgr/babel-plugin-transform-svg-component": {
			"version": "8.0.0",
			"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz",
			"integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==",
			"dev": true,
			"engines": {
				"node": ">=12"
			},
			"funding": {
				"type": "github",
				"url": "https://github.com/sponsors/gregberge"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@svgr/babel-preset": {
			"version": "8.1.0",
			"resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz",
			"integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==",
			"dev": true,
			"dependencies": {
				"@svgr/babel-plugin-add-jsx-attribute": "8.0.0",
				"@svgr/babel-plugin-remove-jsx-attribute": "8.0.0",
				"@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0",
				"@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0",
				"@svgr/babel-plugin-svg-dynamic-title": "8.0.0",
				"@svgr/babel-plugin-svg-em-dimensions": "8.0.0",
				"@svgr/babel-plugin-transform-react-native-svg": "8.1.0",
				"@svgr/babel-plugin-transform-svg-component": "8.0.0"
			},
			"engines": {
				"node": ">=14"
			},
			"funding": {
				"type": "github",
				"url": "https://github.com/sponsors/gregberge"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0-0"
			}
		},
		"node_modules/@svgr/core": {
			"version": "8.1.0",
			"resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz",
			"integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==",
			"dev": true,
			"dependencies": {
				"@babel/core": "^7.21.3",
				"@svgr/babel-preset": "8.1.0",
				"camelcase": "^6.2.0",
				"cosmiconfig": "^8.1.3",
				"snake-case": "^3.0.4"
			},
			"engines": {
				"node": ">=14"
			},
			"funding": {
				"type": "github",
				"url": "https://github.com/sponsors/gregberge"
			}
		},
		"node_modules/@svgr/hast-util-to-babel-ast": {
			"version": "8.0.0",
			"resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz",
			"integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==",
			"dev": true,
			"dependencies": {
				"@babel/types": "^7.21.3",
				"entities": "^4.4.0"
			},
			"engines": {
				"node": ">=14"
			},
			"funding": {
				"type": "github",
				"url": "https://github.com/sponsors/gregberge"
			}
		},
		"node_modules/@svgr/plugin-jsx": {
			"version": "8.1.0",
			"resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz",
			"integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==",
			"dev": true,
			"dependencies": {
				"@babel/core": "^7.21.3",
				"@svgr/babel-preset": "8.1.0",
				"@svgr/hast-util-to-babel-ast": "8.0.0",
				"svg-parser": "^2.0.4"
			},
			"engines": {
				"node": ">=14"
			},
			"funding": {
				"type": "github",
				"url": "https://github.com/sponsors/gregberge"
			},
			"peerDependencies": {
				"@svgr/core": "*"
			}
		},
		"node_modules/@svgr/plugin-svgo": {
			"version": "8.1.0",
			"resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz",
			"integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==",
			"dev": true,
			"dependencies": {
				"cosmiconfig": "^8.1.3",
				"deepmerge": "^4.3.1",
				"svgo": "^3.0.2"
			},
			"engines": {
				"node": ">=14"
			},
			"funding": {
				"type": "github",
				"url": "https://github.com/sponsors/gregberge"
			},
			"peerDependencies": {
				"@svgr/core": "*"
			}
		},
		"node_modules/@svgr/webpack": {
			"version": "8.1.0",
			"resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz",
			"integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==",
			"dev": true,
			"dependencies": {
				"@babel/core": "^7.21.3",
				"@babel/plugin-transform-react-constant-elements": "^7.21.3",
				"@babel/preset-env": "^7.20.2",
				"@babel/preset-react": "^7.18.6",
				"@babel/preset-typescript": "^7.21.0",
				"@svgr/core": "8.1.0",
				"@svgr/plugin-jsx": "8.1.0",
				"@svgr/plugin-svgo": "8.1.0"
			},
			"engines": {
				"node": ">=14"
			},
			"funding": {
				"type": "github",
				"url": "https://github.com/sponsors/gregberge"
			}
		},
		"node_modules/@tannin/compile": {
			"version": "1.1.0",
			"resolved": "https://registry.npmjs.org/@tannin/compile/-/compile-1.1.0.tgz",
			"integrity": "sha512-n8m9eNDfoNZoxdvWiTfW/hSPhehzLJ3zW7f8E7oT6mCROoMNWCB4TYtv041+2FMAxweiE0j7i1jubQU4MEC/Gg==",
			"dev": true,
			"dependencies": {
				"@tannin/evaluate": "^1.2.0",
				"@tannin/postfix": "^1.1.0"
			}
		},
		"node_modules/@tannin/evaluate": {
			"version": "1.2.0",
			"resolved": "https://registry.npmjs.org/@tannin/evaluate/-/evaluate-1.2.0.tgz",
			"integrity": "sha512-3ioXvNowbO/wSrxsDG5DKIMxC81P0QrQTYai8zFNY+umuoHWRPbQ/TuuDEOju9E+jQDXmj6yI5GyejNuh8I+eg==",
			"dev": true
		},
		"node_modules/@tannin/plural-forms": {
			"version": "1.1.0",
			"resolved": "https://registry.npmjs.org/@tannin/plural-forms/-/plural-forms-1.1.0.tgz",
			"integrity": "sha512-xl9R2mDZO/qiHam1AgMnAES6IKIg7OBhcXqy6eDsRCdXuxAFPcjrej9HMjyCLE0DJ/8cHf0i5OQTstuBRhpbHw==",
			"dev": true,
			"dependencies": {
				"@tannin/compile": "^1.1.0"
			}
		},
		"node_modules/@tannin/postfix": {
			"version": "1.1.0",
			"resolved": "https://registry.npmjs.org/@tannin/postfix/-/postfix-1.1.0.tgz",
			"integrity": "sha512-oocsqY7g0cR+Gur5jRQLSrX2OtpMLMse1I10JQBm8CdGMrDkh1Mg2gjsiquMHRtBs4Qwu5wgEp5GgIYHk4SNPw==",
			"dev": true
		},
		"node_modules/@tootallnate/once": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
			"integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
			"dev": true,
			"engines": {
				"node": ">= 10"
			}
		},
		"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/@trysound/sax": {
			"version": "0.2.0",
			"resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
			"integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
			"dev": true,
			"engines": {
				"node": ">=10.13.0"
			}
		},
		"node_modules/@types/babel__core": {
			"version": "7.20.5",
			"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
			"integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
			"dev": true,
			"dependencies": {
				"@babel/parser": "^7.20.7",
				"@babel/types": "^7.20.7",
				"@types/babel__generator": "*",
				"@types/babel__template": "*",
				"@types/babel__traverse": "*"
			}
		},
		"node_modules/@types/babel__generator": {
			"version": "7.6.8",
			"resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz",
			"integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
			"dev": true,
			"dependencies": {
				"@babel/types": "^7.0.0"
			}
		},
		"node_modules/@types/babel__template": {
			"version": "7.4.4",
			"resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
			"integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
			"dev": true,
			"dependencies": {
				"@babel/parser": "^7.1.0",
				"@babel/types": "^7.0.0"
			}
		},
		"node_modules/@types/babel__traverse": {
			"version": "7.20.5",
			"resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz",
			"integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==",
			"dev": true,
			"dependencies": {
				"@babel/types": "^7.20.7"
			}
		},
		"node_modules/@types/body-parser": {
			"version": "1.19.5",
			"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
			"integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
			"dev": true,
			"dependencies": {
				"@types/connect": "*",
				"@types/node": "*"
			}
		},
		"node_modules/@types/bonjour": {
			"version": "3.5.13",
			"resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz",
			"integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==",
			"dev": true,
			"dependencies": {
				"@types/node": "*"
			}
		},
		"node_modules/@types/connect": {
			"version": "3.4.38",
			"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
			"integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
			"dev": true,
			"dependencies": {
				"@types/node": "*"
			}
		},
		"node_modules/@types/connect-history-api-fallback": {
			"version": "1.5.4",
			"resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz",
			"integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==",
			"dev": true,
			"dependencies": {
				"@types/express-serve-static-core": "*",
				"@types/node": "*"
			}
		},
		"node_modules/@types/eslint": {
			"version": "8.56.10",
			"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz",
			"integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==",
			"dev": true,
			"dependencies": {
				"@types/estree": "*",
				"@types/json-schema": "*"
			}
		},
		"node_modules/@types/eslint-scope": {
			"version": "3.7.7",
			"resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
			"integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
			"dev": true,
			"dependencies": {
				"@types/eslint": "*",
				"@types/estree": "*"
			}
		},
		"node_modules/@types/estree": {
			"version": "1.0.5",
			"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
			"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
			"dev": true
		},
		"node_modules/@types/express": {
			"version": "4.17.21",
			"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz",
			"integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==",
			"dev": true,
			"dependencies": {
				"@types/body-parser": "*",
				"@types/express-serve-static-core": "^4.17.33",
				"@types/qs": "*",
				"@types/serve-static": "*"
			}
		},
		"node_modules/@types/express-serve-static-core": {
			"version": "4.19.0",
			"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz",
			"integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==",
			"dev": true,
			"dependencies": {
				"@types/node": "*",
				"@types/qs": "*",
				"@types/range-parser": "*",
				"@types/send": "*"
			}
		},
		"node_modules/@types/glob": {
			"version": "7.2.0",
			"resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
			"integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
			"dev": true,
			"dependencies": {
				"@types/minimatch": "*",
				"@types/node": "*"
			}
		},
		"node_modules/@types/graceful-fs": {
			"version": "4.1.9",
			"resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",
			"integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==",
			"dev": true,
			"dependencies": {
				"@types/node": "*"
			}
		},
		"node_modules/@types/http-errors": {
			"version": "2.0.4",
			"resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
			"integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
			"dev": true
		},
		"node_modules/@types/http-proxy": {
			"version": "1.17.14",
			"resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz",
			"integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==",
			"dev": true,
			"dependencies": {
				"@types/node": "*"
			}
		},
		"node_modules/@types/istanbul-lib-coverage": {
			"version": "2.0.6",
			"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
			"integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
			"dev": true
		},
		"node_modules/@types/istanbul-lib-report": {
			"version": "3.0.3",
			"resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
			"integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
			"dev": true,
			"dependencies": {
				"@types/istanbul-lib-coverage": "*"
			}
		},
		"node_modules/@types/istanbul-reports": {
			"version": "3.0.4",
			"resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
			"integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
			"dev": true,
			"dependencies": {
				"@types/istanbul-lib-report": "*"
			}
		},
		"node_modules/@types/jsdom": {
			"version": "20.0.1",
			"resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz",
			"integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==",
			"dev": true,
			"dependencies": {
				"@types/node": "*",
				"@types/tough-cookie": "*",
				"parse5": "^7.0.0"
			}
		},
		"node_modules/@types/json-schema": {
			"version": "7.0.15",
			"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
			"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
			"dev": true
		},
		"node_modules/@types/json5": {
			"version": "0.0.29",
			"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
			"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
			"dev": true
		},
		"node_modules/@types/mime": {
			"version": "1.3.5",
			"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
			"integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
			"dev": true
		},
		"node_modules/@types/minimatch": {
			"version": "5.1.2",
			"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
			"integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==",
			"dev": true
		},
		"node_modules/@types/minimist": {
			"version": "1.2.5",
			"resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz",
			"integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==",
			"dev": true
		},
		"node_modules/@types/node": {
			"version": "20.12.7",
			"resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz",
			"integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==",
			"dev": true,
			"dependencies": {
				"undici-types": "~5.26.4"
			}
		},
		"node_modules/@types/node-forge": {
			"version": "1.3.11",
			"resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz",
			"integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==",
			"dev": true,
			"dependencies": {
				"@types/node": "*"
			}
		},
		"node_modules/@types/normalize-package-data": {
			"version": "2.4.4",
			"resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
			"integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
			"dev": true
		},
		"node_modules/@types/parse-json": {
			"version": "4.0.2",
			"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
			"integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==",
			"dev": true
		},
		"node_modules/@types/qs": {
			"version": "6.9.15",
			"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz",
			"integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==",
			"dev": true
		},
		"node_modules/@types/range-parser": {
			"version": "1.2.7",
			"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
			"integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
			"dev": true
		},
		"node_modules/@types/retry": {
			"version": "0.12.0",
			"resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz",
			"integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==",
			"dev": true
		},
		"node_modules/@types/semver": {
			"version": "7.5.8",
			"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
			"integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
			"dev": true
		},
		"node_modules/@types/send": {
			"version": "0.17.4",
			"resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
			"integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
			"dev": true,
			"dependencies": {
				"@types/mime": "^1",
				"@types/node": "*"
			}
		},
		"node_modules/@types/serve-index": {
			"version": "1.9.4",
			"resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz",
			"integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==",
			"dev": true,
			"dependencies": {
				"@types/express": "*"
			}
		},
		"node_modules/@types/serve-static": {
			"version": "1.15.7",
			"resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz",
			"integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==",
			"dev": true,
			"dependencies": {
				"@types/http-errors": "*",
				"@types/node": "*",
				"@types/send": "*"
			}
		},
		"node_modules/@types/sockjs": {
			"version": "0.3.36",
			"resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz",
			"integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==",
			"dev": true,
			"dependencies": {
				"@types/node": "*"
			}
		},
		"node_modules/@types/source-list-map": {
			"version": "0.1.6",
			"resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.6.tgz",
			"integrity": "sha512-5JcVt1u5HDmlXkwOD2nslZVllBBc7HDuOICfiZah2Z0is8M8g+ddAEawbmd3VjedfDHBzxCaXLs07QEmb7y54g==",
			"dev": true
		},
		"node_modules/@types/stack-utils": {
			"version": "2.0.3",
			"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
			"integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
			"dev": true
		},
		"node_modules/@types/tapable": {
			"version": "1.0.12",
			"resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.12.tgz",
			"integrity": "sha512-bTHG8fcxEqv1M9+TD14P8ok8hjxoOCkfKc8XXLaaD05kI7ohpeI956jtDOD3XHKBQrlyPughUtzm1jtVhHpA5Q==",
			"dev": true
		},
		"node_modules/@types/tough-cookie": {
			"version": "4.0.5",
			"resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz",
			"integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==",
			"dev": true
		},
		"node_modules/@types/uglify-js": {
			"version": "3.17.5",
			"resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.5.tgz",
			"integrity": "sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ==",
			"dev": true,
			"dependencies": {
				"source-map": "^0.6.1"
			}
		},
		"node_modules/@types/uglify-js/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,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/@types/webpack": {
			"version": "4.41.38",
			"resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.38.tgz",
			"integrity": "sha512-oOW7E931XJU1mVfCnxCVgv8GLFL768pDO5u2Gzk82i8yTIgX6i7cntyZOkZYb/JtYM8252SN9bQp9tgkVDSsRw==",
			"dev": true,
			"dependencies": {
				"@types/node": "*",
				"@types/tapable": "^1",
				"@types/uglify-js": "*",
				"@types/webpack-sources": "*",
				"anymatch": "^3.0.0",
				"source-map": "^0.6.0"
			}
		},
		"node_modules/@types/webpack-sources": {
			"version": "3.2.3",
			"resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.3.tgz",
			"integrity": "sha512-4nZOdMwSPHZ4pTEZzSp0AsTM4K7Qmu40UKW4tJDiOVs20UzYF9l+qUe4s0ftfN0pin06n+5cWWDJXH+sbhAiDw==",
			"dev": true,
			"dependencies": {
				"@types/node": "*",
				"@types/source-list-map": "*",
				"source-map": "^0.7.3"
			}
		},
		"node_modules/@types/webpack/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,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/@types/ws": {
			"version": "8.5.10",
			"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz",
			"integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==",
			"dev": true,
			"dependencies": {
				"@types/node": "*"
			}
		},
		"node_modules/@types/yargs": {
			"version": "17.0.32",
			"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
			"integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
			"dev": true,
			"dependencies": {
				"@types/yargs-parser": "*"
			}
		},
		"node_modules/@types/yargs-parser": {
			"version": "21.0.3",
			"resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
			"integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
			"dev": true
		},
		"node_modules/@types/yauzl": {
			"version": "2.10.3",
			"resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
			"integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==",
			"dev": true,
			"optional": true,
			"dependencies": {
				"@types/node": "*"
			}
		},
		"node_modules/@typescript-eslint/eslint-plugin": {
			"version": "6.21.0",
			"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz",
			"integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==",
			"dev": true,
			"dependencies": {
				"@eslint-community/regexpp": "^4.5.1",
				"@typescript-eslint/scope-manager": "6.21.0",
				"@typescript-eslint/type-utils": "6.21.0",
				"@typescript-eslint/utils": "6.21.0",
				"@typescript-eslint/visitor-keys": "6.21.0",
				"debug": "^4.3.4",
				"graphemer": "^1.4.0",
				"ignore": "^5.2.4",
				"natural-compare": "^1.4.0",
				"semver": "^7.5.4",
				"ts-api-utils": "^1.0.1"
			},
			"engines": {
				"node": "^16.0.0 || >=18.0.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/typescript-eslint"
			},
			"peerDependencies": {
				"@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha",
				"eslint": "^7.0.0 || ^8.0.0"
			},
			"peerDependenciesMeta": {
				"typescript": {
					"optional": true
				}
			}
		},
		"node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": {
			"version": "6.0.0",
			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
			"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
			"dev": true,
			"dependencies": {
				"yallist": "^4.0.0"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": {
			"version": "7.6.0",
			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
			"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
			"dev": true,
			"dependencies": {
				"lru-cache": "^6.0.0"
			},
			"bin": {
				"semver": "bin/semver.js"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/@typescript-eslint/eslint-plugin/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/@typescript-eslint/parser": {
			"version": "6.21.0",
			"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz",
			"integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==",
			"dev": true,
			"dependencies": {
				"@typescript-eslint/scope-manager": "6.21.0",
				"@typescript-eslint/types": "6.21.0",
				"@typescript-eslint/typescript-estree": "6.21.0",
				"@typescript-eslint/visitor-keys": "6.21.0",
				"debug": "^4.3.4"
			},
			"engines": {
				"node": "^16.0.0 || >=18.0.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/typescript-eslint"
			},
			"peerDependencies": {
				"eslint": "^7.0.0 || ^8.0.0"
			},
			"peerDependenciesMeta": {
				"typescript": {
					"optional": true
				}
			}
		},
		"node_modules/@typescript-eslint/scope-manager": {
			"version": "6.21.0",
			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz",
			"integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==",
			"dev": true,
			"dependencies": {
				"@typescript-eslint/types": "6.21.0",
				"@typescript-eslint/visitor-keys": "6.21.0"
			},
			"engines": {
				"node": "^16.0.0 || >=18.0.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/typescript-eslint"
			}
		},
		"node_modules/@typescript-eslint/type-utils": {
			"version": "6.21.0",
			"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz",
			"integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==",
			"dev": true,
			"dependencies": {
				"@typescript-eslint/typescript-estree": "6.21.0",
				"@typescript-eslint/utils": "6.21.0",
				"debug": "^4.3.4",
				"ts-api-utils": "^1.0.1"
			},
			"engines": {
				"node": "^16.0.0 || >=18.0.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/typescript-eslint"
			},
			"peerDependencies": {
				"eslint": "^7.0.0 || ^8.0.0"
			},
			"peerDependenciesMeta": {
				"typescript": {
					"optional": true
				}
			}
		},
		"node_modules/@typescript-eslint/types": {
			"version": "6.21.0",
			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz",
			"integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==",
			"dev": true,
			"engines": {
				"node": "^16.0.0 || >=18.0.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/typescript-eslint"
			}
		},
		"node_modules/@typescript-eslint/typescript-estree": {
			"version": "6.21.0",
			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz",
			"integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==",
			"dev": true,
			"dependencies": {
				"@typescript-eslint/types": "6.21.0",
				"@typescript-eslint/visitor-keys": "6.21.0",
				"debug": "^4.3.4",
				"globby": "^11.1.0",
				"is-glob": "^4.0.3",
				"minimatch": "9.0.3",
				"semver": "^7.5.4",
				"ts-api-utils": "^1.0.1"
			},
			"engines": {
				"node": "^16.0.0 || >=18.0.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/typescript-eslint"
			},
			"peerDependenciesMeta": {
				"typescript": {
					"optional": true
				}
			}
		},
		"node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": {
			"version": "6.0.0",
			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
			"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
			"dev": true,
			"dependencies": {
				"yallist": "^4.0.0"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
			"version": "7.6.0",
			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
			"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
			"dev": true,
			"dependencies": {
				"lru-cache": "^6.0.0"
			},
			"bin": {
				"semver": "bin/semver.js"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/@typescript-eslint/typescript-estree/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/@typescript-eslint/utils": {
			"version": "6.21.0",
			"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz",
			"integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==",
			"dev": true,
			"dependencies": {
				"@eslint-community/eslint-utils": "^4.4.0",
				"@types/json-schema": "^7.0.12",
				"@types/semver": "^7.5.0",
				"@typescript-eslint/scope-manager": "6.21.0",
				"@typescript-eslint/types": "6.21.0",
				"@typescript-eslint/typescript-estree": "6.21.0",
				"semver": "^7.5.4"
			},
			"engines": {
				"node": "^16.0.0 || >=18.0.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/typescript-eslint"
			},
			"peerDependencies": {
				"eslint": "^7.0.0 || ^8.0.0"
			}
		},
		"node_modules/@typescript-eslint/utils/node_modules/lru-cache": {
			"version": "6.0.0",
			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
			"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
			"dev": true,
			"dependencies": {
				"yallist": "^4.0.0"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/@typescript-eslint/utils/node_modules/semver": {
			"version": "7.6.0",
			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
			"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
			"dev": true,
			"dependencies": {
				"lru-cache": "^6.0.0"
			},
			"bin": {
				"semver": "bin/semver.js"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/@typescript-eslint/utils/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/@typescript-eslint/visitor-keys": {
			"version": "6.21.0",
			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz",
			"integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==",
			"dev": true,
			"dependencies": {
				"@typescript-eslint/types": "6.21.0",
				"eslint-visitor-keys": "^3.4.1"
			},
			"engines": {
				"node": "^16.0.0 || >=18.0.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/typescript-eslint"
			}
		},
		"node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
			"version": "3.4.3",
			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
			"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
			"dev": true,
			"engines": {
				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
			},
			"funding": {
				"url": "https://opencollective.com/eslint"
			}
		},
		"node_modules/@ungap/structured-clone": {
			"version": "1.2.0",
			"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
			"integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
			"dev": true
		},
		"node_modules/@webassemblyjs/ast": {
			"version": "1.12.1",
			"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
			"integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==",
			"dev": true,
			"dependencies": {
				"@webassemblyjs/helper-numbers": "1.11.6",
				"@webassemblyjs/helper-wasm-bytecode": "1.11.6"
			}
		},
		"node_modules/@webassemblyjs/floating-point-hex-parser": {
			"version": "1.11.6",
			"resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
			"integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
			"dev": true
		},
		"node_modules/@webassemblyjs/helper-api-error": {
			"version": "1.11.6",
			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
			"integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
			"dev": true
		},
		"node_modules/@webassemblyjs/helper-buffer": {
			"version": "1.12.1",
			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz",
			"integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==",
			"dev": true
		},
		"node_modules/@webassemblyjs/helper-numbers": {
			"version": "1.11.6",
			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
			"integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
			"dev": true,
			"dependencies": {
				"@webassemblyjs/floating-point-hex-parser": "1.11.6",
				"@webassemblyjs/helper-api-error": "1.11.6",
				"@xtuc/long": "4.2.2"
			}
		},
		"node_modules/@webassemblyjs/helper-wasm-bytecode": {
			"version": "1.11.6",
			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
			"integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
			"dev": true
		},
		"node_modules/@webassemblyjs/helper-wasm-section": {
			"version": "1.12.1",
			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz",
			"integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==",
			"dev": true,
			"dependencies": {
				"@webassemblyjs/ast": "1.12.1",
				"@webassemblyjs/helper-buffer": "1.12.1",
				"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
				"@webassemblyjs/wasm-gen": "1.12.1"
			}
		},
		"node_modules/@webassemblyjs/ieee754": {
			"version": "1.11.6",
			"resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
			"integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
			"dev": true,
			"dependencies": {
				"@xtuc/ieee754": "^1.2.0"
			}
		},
		"node_modules/@webassemblyjs/leb128": {
			"version": "1.11.6",
			"resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
			"integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
			"dev": true,
			"dependencies": {
				"@xtuc/long": "4.2.2"
			}
		},
		"node_modules/@webassemblyjs/utf8": {
			"version": "1.11.6",
			"resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
			"integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
			"dev": true
		},
		"node_modules/@webassemblyjs/wasm-edit": {
			"version": "1.12.1",
			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz",
			"integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==",
			"dev": true,
			"dependencies": {
				"@webassemblyjs/ast": "1.12.1",
				"@webassemblyjs/helper-buffer": "1.12.1",
				"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
				"@webassemblyjs/helper-wasm-section": "1.12.1",
				"@webassemblyjs/wasm-gen": "1.12.1",
				"@webassemblyjs/wasm-opt": "1.12.1",
				"@webassemblyjs/wasm-parser": "1.12.1",
				"@webassemblyjs/wast-printer": "1.12.1"
			}
		},
		"node_modules/@webassemblyjs/wasm-gen": {
			"version": "1.12.1",
			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz",
			"integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==",
			"dev": true,
			"dependencies": {
				"@webassemblyjs/ast": "1.12.1",
				"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
				"@webassemblyjs/ieee754": "1.11.6",
				"@webassemblyjs/leb128": "1.11.6",
				"@webassemblyjs/utf8": "1.11.6"
			}
		},
		"node_modules/@webassemblyjs/wasm-opt": {
			"version": "1.12.1",
			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz",
			"integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==",
			"dev": true,
			"dependencies": {
				"@webassemblyjs/ast": "1.12.1",
				"@webassemblyjs/helper-buffer": "1.12.1",
				"@webassemblyjs/wasm-gen": "1.12.1",
				"@webassemblyjs/wasm-parser": "1.12.1"
			}
		},
		"node_modules/@webassemblyjs/wasm-parser": {
			"version": "1.12.1",
			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz",
			"integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==",
			"dev": true,
			"dependencies": {
				"@webassemblyjs/ast": "1.12.1",
				"@webassemblyjs/helper-api-error": "1.11.6",
				"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
				"@webassemblyjs/ieee754": "1.11.6",
				"@webassemblyjs/leb128": "1.11.6",
				"@webassemblyjs/utf8": "1.11.6"
			}
		},
		"node_modules/@webassemblyjs/wast-printer": {
			"version": "1.12.1",
			"resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
			"integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
			"dev": true,
			"dependencies": {
				"@webassemblyjs/ast": "1.12.1",
				"@xtuc/long": "4.2.2"
			}
		},
		"node_modules/@webpack-cli/configtest": {
			"version": "2.1.1",
			"resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz",
			"integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==",
			"dev": true,
			"engines": {
				"node": ">=14.15.0"
			},
			"peerDependencies": {
				"webpack": "5.x.x",
				"webpack-cli": "5.x.x"
			}
		},
		"node_modules/@webpack-cli/info": {
			"version": "2.0.2",
			"resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz",
			"integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==",
			"dev": true,
			"engines": {
				"node": ">=14.15.0"
			},
			"peerDependencies": {
				"webpack": "5.x.x",
				"webpack-cli": "5.x.x"
			}
		},
		"node_modules/@webpack-cli/serve": {
			"version": "2.0.5",
			"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz",
			"integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==",
			"dev": true,
			"engines": {
				"node": ">=14.15.0"
			},
			"peerDependencies": {
				"webpack": "5.x.x",
				"webpack-cli": "5.x.x"
			},
			"peerDependenciesMeta": {
				"webpack-dev-server": {
					"optional": true
				}
			}
		},
		"node_modules/@wordpress/api-fetch": {
			"version": "6.53.0",
			"resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-6.53.0.tgz",
			"integrity": "sha512-jHYueGfGfe89akyw1A28WGl17qIKTukMTwol4rHkZY43ygUmSJiTF/FSsExzMwk/j7OmGGr+GTa1TPO/tc71Lw==",
			"dev": true,
			"dependencies": {
				"@babel/runtime": "^7.16.0",
				"@wordpress/i18n": "^4.56.0",
				"@wordpress/url": "^3.57.0"
			},
			"engines": {
				"node": ">=12"
			}
		},
		"node_modules/@wordpress/babel-plugin-import-jsx-pragma": {
			"version": "4.39.0",
			"resolved": "https://registry.npmjs.org/@wordpress/babel-plugin-import-jsx-pragma/-/babel-plugin-import-jsx-pragma-4.39.0.tgz",
			"integrity": "sha512-yQySutPQq+Joa3ePzc9X8f5hZacmcn5e9KMiJYrXBUqj5VKl4RR8N3e+UOl1lWoB2NI/7bA9tW9TXJlDpHJX1w==",
			"dev": true,
			"engines": {
				"node": ">=14"
			},
			"peerDependencies": {
				"@babel/core": "^7.12.9"
			}
		},
		"node_modules/@wordpress/babel-preset-default": {
			"version": "7.40.0",
			"resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-7.40.0.tgz",
			"integrity": "sha512-/guM3C4NMoLK0pNO5Epbm/50L/MqXB0k3+fLtPbw3BC3v8Aus7ktE2l85gilowNyE3kYAyjFR/BsG5tassnaVQ==",
			"dev": true,
			"dependencies": {
				"@babel/core": "^7.16.0",
				"@babel/plugin-transform-react-jsx": "^7.16.0",
				"@babel/plugin-transform-runtime": "^7.16.0",
				"@babel/preset-env": "^7.16.0",
				"@babel/preset-typescript": "^7.16.0",
				"@babel/runtime": "^7.16.0",
				"@wordpress/babel-plugin-import-jsx-pragma": "^4.39.0",
				"@wordpress/browserslist-config": "^5.39.0",
				"@wordpress/warning": "^2.56.0",
				"browserslist": "^4.21.10",
				"core-js": "^3.31.0",
				"react": "^18.2.0"
			},
			"engines": {
				"node": ">=14"
			}
		},
		"node_modules/@wordpress/base-styles": {
			"version": "4.47.0",
			"resolved": "https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-4.47.0.tgz",
			"integrity": "sha512-1myPBFLuMnuxUE8M2VGZ+wbGhgasLNqFdxQnWfYDMRhaSESsZgaLaMoasNZ4+e/N7Nssl97ad/XGwZ721HXqvQ==",
			"dev": true
		},
		"node_modules/@wordpress/browserslist-config": {
			"version": "5.39.0",
			"resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.39.0.tgz",
			"integrity": "sha512-oy5CRWS3WsaFN/KAgOUIE6mmyuFu5qmKZZhQ+voCN+ifXTsj1J6ypR3RyY03Cbojy6kidyVYl3qRyMxbbUwWSQ==",
			"dev": true,
			"engines": {
				"node": ">=14"
			}
		},
		"node_modules/@wordpress/dependency-extraction-webpack-plugin": {
			"version": "5.7.0",
			"resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-5.7.0.tgz",
			"integrity": "sha512-s/xUnAEKwXmSUZLqrvX4n3tBWegxaiQfXJwd264MRJUmz4JibWJnvevkxM6tooEetu36xGiVHAIPvfvEEEtntQ==",
			"dev": true,
			"dependencies": {
				"json2php": "^0.0.7"
			},
			"engines": {
				"node": ">=18"
			},
			"peerDependencies": {
				"webpack": "^5.0.0"
			}
		},
		"node_modules/@wordpress/e2e-test-utils-playwright": {
			"version": "0.24.0",
			"resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-0.24.0.tgz",
			"integrity": "sha512-r/lTk9y3rmoKASZ1Bn+vYtv5Xw0e3RxT8nXJIpM0eaHmRxTg7u7aHvIVEfi6ZDAKWuuywoCDP/KAdy9FR3lhDQ==",
			"dev": true,
			"dependencies": {
				"@wordpress/api-fetch": "^6.53.0",
				"@wordpress/keycodes": "^3.56.0",
				"@wordpress/url": "^3.57.0",
				"change-case": "^4.1.2",
				"form-data": "^4.0.0",
				"get-port": "^5.1.1",
				"lighthouse": "^10.4.0",
				"mime": "^3.0.0",
				"web-vitals": "^3.5.0"
			},
			"engines": {
				"node": ">=12"
			},
			"peerDependencies": {
				"@playwright/test": ">=1"
			}
		},
		"node_modules/@wordpress/eslint-plugin": {
			"version": "17.13.0",
			"resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-17.13.0.tgz",
			"integrity": "sha512-QnG5HmOd+XsweKOvrqbOugm9rINUjcsh1jo2SN4cbbTWZJ6nPmcfLS0YJdrKkgOQUnKDPQgBPVEyI8tp19OtBw==",
			"dev": true,
			"dependencies": {
				"@babel/eslint-parser": "^7.16.0",
				"@typescript-eslint/eslint-plugin": "^6.4.1",
				"@typescript-eslint/parser": "^6.4.1",
				"@wordpress/babel-preset-default": "^7.40.0",
				"@wordpress/prettier-config": "^3.13.0",
				"cosmiconfig": "^7.0.0",
				"eslint-config-prettier": "^8.3.0",
				"eslint-plugin-import": "^2.25.2",
				"eslint-plugin-jest": "^27.2.3",
				"eslint-plugin-jsdoc": "^46.4.6",
				"eslint-plugin-jsx-a11y": "^6.5.1",
				"eslint-plugin-playwright": "^0.15.3",
				"eslint-plugin-prettier": "^5.0.0",
				"eslint-plugin-react": "^7.27.0",
				"eslint-plugin-react-hooks": "^4.3.0",
				"globals": "^13.12.0",
				"requireindex": "^1.2.0"
			},
			"engines": {
				"node": ">=14",
				"npm": ">=6.14.4"
			},
			"peerDependencies": {
				"@babel/core": ">=7",
				"eslint": ">=8",
				"prettier": ">=3",
				"typescript": ">=4"
			},
			"peerDependenciesMeta": {
				"prettier": {
					"optional": true
				},
				"typescript": {
					"optional": true
				}
			}
		},
		"node_modules/@wordpress/eslint-plugin/node_modules/cosmiconfig": {
			"version": "7.1.0",
			"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
			"integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
			"dev": true,
			"dependencies": {
				"@types/parse-json": "^4.0.0",
				"import-fresh": "^3.2.1",
				"parse-json": "^5.0.0",
				"path-type": "^4.0.0",
				"yaml": "^1.10.0"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/@wordpress/eslint-plugin/node_modules/globals": {
			"version": "13.24.0",
			"resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
			"integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
			"dev": true,
			"dependencies": {
				"type-fest": "^0.20.2"
			},
			"engines": {
				"node": ">=8"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/@wordpress/eslint-plugin/node_modules/type-fest": {
			"version": "0.20.2",
			"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
			"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
			"dev": true,
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/@wordpress/hooks": {
			"version": "3.56.0",
			"resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.56.0.tgz",
			"integrity": "sha512-sxoNbXdqfhlRNduDqR5y5Cq7Rwm5ATZGIr5U9nrM5RHWd+8v7g8wpB/rpTSqi+HeCW3suiFuN6qJJZ4eFwRB2w==",
			"dev": true,
			"dependencies": {
				"@babel/runtime": "^7.16.0"
			},
			"engines": {
				"node": ">=12"
			}
		},
		"node_modules/@wordpress/i18n": {
			"version": "4.56.0",
			"resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.56.0.tgz",
			"integrity": "sha512-W+WL8vxwqUeicgXvIHZ3Htq6pYrJe2Dn/9SBsQ7gFPUrGWe2ww5IzPocLv4rAha3lca2ZVIX2q47rGaSs9t8Kw==",
			"dev": true,
			"dependencies": {
				"@babel/runtime": "^7.16.0",
				"@wordpress/hooks": "^3.56.0",
				"gettext-parser": "^1.3.1",
				"memize": "^2.1.0",
				"sprintf-js": "^1.1.1",
				"tannin": "^1.2.0"
			},
			"bin": {
				"pot-to-php": "tools/pot-to-php.js"
			},
			"engines": {
				"node": ">=12"
			}
		},
		"node_modules/@wordpress/jest-console": {
			"version": "7.27.0",
			"resolved": "https://registry.npmjs.org/@wordpress/jest-console/-/jest-console-7.27.0.tgz",
			"integrity": "sha512-mzKShc0zUHyWsHt/fK2L3cJDWWAp9AttzENDTo7RuynqJWTDOGsqsnDr6zITyVcaL0my8ApVTiWu5OxzBXXvfg==",
			"dev": true,
			"dependencies": {
				"@babel/runtime": "^7.16.0",
				"jest-matcher-utils": "^29.6.2"
			},
			"engines": {
				"node": ">=14"
			},
			"peerDependencies": {
				"jest": ">=29"
			}
		},
		"node_modules/@wordpress/jest-preset-default": {
			"version": "11.27.0",
			"resolved": "https://registry.npmjs.org/@wordpress/jest-preset-default/-/jest-preset-default-11.27.0.tgz",
			"integrity": "sha512-5fyyKthW+BNpv+Ndtgl2+1uHsmEWqTtf3PN+FL3qRfYCTPbvasxZBkGx2bpnt0D9ajcrpGmbllwOoM0dhY8Q6w==",
			"dev": true,
			"dependencies": {
				"@wordpress/jest-console": "^7.27.0",
				"babel-jest": "^29.6.2"
			},
			"engines": {
				"node": ">=14"
			},
			"peerDependencies": {
				"@babel/core": ">=7",
				"jest": ">=29"
			}
		},
		"node_modules/@wordpress/keycodes": {
			"version": "3.56.0",
			"resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-3.56.0.tgz",
			"integrity": "sha512-YIvqB0AEsu3fjkuQHNT7XladaTDE1Thntv+oqzkRejdNodH5tbPb3CAePAK3F7iQurZ0GCaqlmJTy9qcHwDU0Q==",
			"dev": true,
			"dependencies": {
				"@babel/runtime": "^7.16.0",
				"@wordpress/i18n": "^4.56.0"
			},
			"engines": {
				"node": ">=12"
			}
		},
		"node_modules/@wordpress/npm-package-json-lint-config": {
			"version": "4.41.0",
			"resolved": "https://registry.npmjs.org/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-4.41.0.tgz",
			"integrity": "sha512-HStjqoxdB4zTU9i3BCzvbI0OyVZ3L6phSeoRwk2uU1cT41O883ouoBGE9DcEIzufKeuFCeqCBJf8NRk8S2h/sg==",
			"dev": true,
			"engines": {
				"node": ">=14"
			},
			"peerDependencies": {
				"npm-package-json-lint": ">=6.0.0"
			}
		},
		"node_modules/@wordpress/postcss-plugins-preset": {
			"version": "4.40.0",
			"resolved": "https://registry.npmjs.org/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-4.40.0.tgz",
			"integrity": "sha512-xnd+XZI5s9hyGtt314WgH3prxQVBMLEjmTTz0g1+9x1avrYxIwhv1ZxMNittrAq2IP1qBzT5IwsPzJ+wCgcEyw==",
			"dev": true,
			"dependencies": {
				"@wordpress/base-styles": "^4.47.0",
				"autoprefixer": "^10.2.5"
			},
			"engines": {
				"node": ">=14"
			},
			"peerDependencies": {
				"postcss": "^8.0.0"
			}
		},
		"node_modules/@wordpress/prettier-config": {
			"version": "3.13.0",
			"resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-3.13.0.tgz",
			"integrity": "sha512-oNayHsdAhP3ER4T7KjNrmdtEIZjYJAdIDdScjNOKmK3Qvp02VP9TPfDGhLSjiYmOiQcyrIz/uuf9MJ9JCcdGng==",
			"dev": true,
			"engines": {
				"node": ">=14"
			},
			"peerDependencies": {
				"prettier": ">=3"
			}
		},
		"node_modules/@wordpress/scripts": {
			"version": "27.7.0",
			"resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-27.7.0.tgz",
			"integrity": "sha512-dFkye4tO3xbFbqi1RMgiicykT074C2VuenT9Kc1L9oUwFmHa4BVDskcNIMKWl3CzDb2gtNEjsZx77CMQTzgLAQ==",
			"dev": true,
			"dependencies": {
				"@babel/core": "^7.16.0",
				"@pmmmwh/react-refresh-webpack-plugin": "^0.5.11",
				"@svgr/webpack": "^8.0.1",
				"@wordpress/babel-preset-default": "^7.40.0",
				"@wordpress/browserslist-config": "^5.39.0",
				"@wordpress/dependency-extraction-webpack-plugin": "^5.7.0",
				"@wordpress/e2e-test-utils-playwright": "^0.24.0",
				"@wordpress/eslint-plugin": "^17.13.0",
				"@wordpress/jest-preset-default": "^11.27.0",
				"@wordpress/npm-package-json-lint-config": "^4.41.0",
				"@wordpress/postcss-plugins-preset": "^4.40.0",
				"@wordpress/prettier-config": "^3.13.0",
				"@wordpress/stylelint-config": "^21.39.0",
				"adm-zip": "^0.5.9",
				"babel-jest": "^29.6.2",
				"babel-loader": "^8.2.3",
				"browserslist": "^4.21.10",
				"chalk": "^4.0.0",
				"check-node-version": "^4.1.0",
				"clean-webpack-plugin": "^3.0.0",
				"copy-webpack-plugin": "^10.2.0",
				"cross-spawn": "^5.1.0",
				"css-loader": "^6.2.0",
				"cssnano": "^6.0.1",
				"cwd": "^0.10.0",
				"dir-glob": "^3.0.1",
				"eslint": "^8.3.0",
				"expect-puppeteer": "^4.4.0",
				"fast-glob": "^3.2.7",
				"filenamify": "^4.2.0",
				"jest": "^29.6.2",
				"jest-dev-server": "^9.0.1",
				"jest-environment-jsdom": "^29.6.2",
				"jest-environment-node": "^29.6.2",
				"markdownlint-cli": "^0.31.1",
				"merge-deep": "^3.0.3",
				"mini-css-extract-plugin": "^2.5.1",
				"minimist": "^1.2.0",
				"npm-package-json-lint": "^6.4.0",
				"npm-packlist": "^3.0.0",
				"postcss": "^8.4.5",
				"postcss-loader": "^6.2.1",
				"prettier": "npm:wp-prettier@3.0.3",
				"puppeteer-core": "^13.2.0",
				"react-refresh": "^0.14.0",
				"read-pkg-up": "^7.0.1",
				"resolve-bin": "^0.4.0",
				"sass": "^1.35.2",
				"sass-loader": "^12.1.0",
				"source-map-loader": "^3.0.0",
				"stylelint": "^14.2.0",
				"terser-webpack-plugin": "^5.3.9",
				"url-loader": "^4.1.1",
				"webpack": "^5.88.2",
				"webpack-bundle-analyzer": "^4.9.1",
				"webpack-cli": "^5.1.4",
				"webpack-dev-server": "^4.15.1"
			},
			"bin": {
				"wp-scripts": "bin/wp-scripts.js"
			},
			"engines": {
				"node": ">=18",
				"npm": ">=6.14.4"
			},
			"peerDependencies": {
				"@playwright/test": "^1.43.0",
				"react": "^18.0.0",
				"react-dom": "^18.0.0"
			}
		},
		"node_modules/@wordpress/stylelint-config": {
			"version": "21.39.0",
			"resolved": "https://registry.npmjs.org/@wordpress/stylelint-config/-/stylelint-config-21.39.0.tgz",
			"integrity": "sha512-MNFsOpriCtNXs1TfPQwPkU7/4Jo0e0IfGJdvRYHp8mSv0VqY1vn9CW8QJ8xqrWYqxCOG6Z+Zn9IPToEM5mqz5A==",
			"dev": true,
			"dependencies": {
				"stylelint-config-recommended": "^6.0.0",
				"stylelint-config-recommended-scss": "^5.0.2"
			},
			"engines": {
				"node": ">=14"
			},
			"peerDependencies": {
				"stylelint": "^14.2"
			}
		},
		"node_modules/@wordpress/url": {
			"version": "3.57.0",
			"resolved": "https://registry.npmjs.org/@wordpress/url/-/url-3.57.0.tgz",
			"integrity": "sha512-W3F0KVEaMoRENya7GGUPXrZGYnhAg3fuLSLpNcf1skSrM5rUVMNdeRlZj+jln1O/+qjboJnC+y+IzOlQRwlS6A==",
			"dev": true,
			"dependencies": {
				"@babel/runtime": "^7.16.0",
				"remove-accents": "^0.5.0"
			},
			"engines": {
				"node": ">=12"
			}
		},
		"node_modules/@wordpress/warning": {
			"version": "2.56.0",
			"resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-2.56.0.tgz",
			"integrity": "sha512-Bd1Zy5eWQPKoQsfQwD9T1KZWPpq+ZFyozirx+Z5MnX59J0i80p8KiEMcmXhPH+Os9An2PtlVV9j0gY9z5z0oAw==",
			"dev": true,
			"engines": {
				"node": ">=12"
			}
		},
		"node_modules/@xtuc/ieee754": {
			"version": "1.2.0",
			"resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
			"integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
			"dev": true
		},
		"node_modules/@xtuc/long": {
			"version": "4.2.2",
			"resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
			"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
			"dev": true
		},
		"node_modules/abab": {
			"version": "2.0.6",
			"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
			"integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==",
			"deprecated": "Use your platform's native atob() and btoa() methods instead",
			"dev": true
		},
		"node_modules/accepts": {
			"version": "1.3.8",
			"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
			"integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
			"dev": true,
			"dependencies": {
				"mime-types": "~2.1.34",
				"negotiator": "0.6.3"
			},
			"engines": {
				"node": ">= 0.6"
			}
		},
		"node_modules/acorn": {
			"version": "8.11.3",
			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
			"integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
			"dev": true,
			"bin": {
				"acorn": "bin/acorn"
			},
			"engines": {
				"node": ">=0.4.0"
			}
		},
		"node_modules/acorn-globals": {
			"version": "7.0.1",
			"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz",
			"integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==",
			"dev": true,
			"dependencies": {
				"acorn": "^8.1.0",
				"acorn-walk": "^8.0.2"
			}
		},
		"node_modules/acorn-import-assertions": {
			"version": "1.9.0",
			"resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
			"integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
			"dev": true,
			"peerDependencies": {
				"acorn": "^8"
			}
		},
		"node_modules/acorn-jsx": {
			"version": "5.3.2",
			"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
			"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
			"dev": true,
			"peerDependencies": {
				"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
			}
		},
		"node_modules/acorn-walk": {
			"version": "8.3.2",
			"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz",
			"integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==",
			"dev": true,
			"engines": {
				"node": ">=0.4.0"
			}
		},
		"node_modules/adm-zip": {
			"version": "0.5.12",
			"resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.12.tgz",
			"integrity": "sha512-6TVU49mK6KZb4qG6xWaaM4C7sA/sgUMLy/JYMOzkcp3BvVLpW0fXDFQiIzAuxFCt/2+xD7fNIiPFAoLZPhVNLQ==",
			"dev": true,
			"engines": {
				"node": ">=6.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/ajv": {
			"version": "6.12.6",
			"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
			"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
			"dev": true,
			"dependencies": {
				"fast-deep-equal": "^3.1.1",
				"fast-json-stable-stringify": "^2.0.0",
				"json-schema-traverse": "^0.4.1",
				"uri-js": "^4.2.2"
			},
			"funding": {
				"type": "github",
				"url": "https://github.com/sponsors/epoberezkin"
			}
		},
		"node_modules/ajv-errors": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
			"integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
			"dev": true,
			"peerDependencies": {
				"ajv": ">=5.0.0"
			}
		},
		"node_modules/ajv-formats": {
			"version": "2.1.1",
			"resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
			"integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
			"dev": true,
			"dependencies": {
				"ajv": "^8.0.0"
			},
			"peerDependencies": {
				"ajv": "^8.0.0"
			},
			"peerDependenciesMeta": {
				"ajv": {
					"optional": true
				}
			}
		},
		"node_modules/ajv-formats/node_modules/ajv": {
			"version": "8.12.0",
			"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
			"integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
			"dev": true,
			"dependencies": {
				"fast-deep-equal": "^3.1.1",
				"json-schema-traverse": "^1.0.0",
				"require-from-string": "^2.0.2",
				"uri-js": "^4.2.2"
			},
			"funding": {
				"type": "github",
				"url": "https://github.com/sponsors/epoberezkin"
			}
		},
		"node_modules/ajv-formats/node_modules/json-schema-traverse": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
			"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
			"dev": true
		},
		"node_modules/ajv-keywords": {
			"version": "3.5.2",
			"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
			"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
			"dev": true,
			"peerDependencies": {
				"ajv": "^6.9.1"
			}
		},
		"node_modules/ansi-colors": {
			"version": "4.1.3",
			"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
			"integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
			"dev": true,
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/ansi-escapes": {
			"version": "4.3.2",
			"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
			"integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
			"dev": true,
			"dependencies": {
				"type-fest": "^0.21.3"
			},
			"engines": {
				"node": ">=8"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/ansi-html-community": {
			"version": "0.0.8",
			"resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
			"integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==",
			"dev": true,
			"engines": [
				"node >= 0.8.0"
			],
			"bin": {
				"ansi-html": "bin/ansi-html"
			}
		},
		"node_modules/ansi-regex": {
			"version": "5.0.1",
			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
			"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/ansi-styles": {
			"version": "4.3.0",
			"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
			"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
			"dev": true,
			"dependencies": {
				"color-convert": "^2.0.1"
			},
			"engines": {
				"node": ">=8"
			},
			"funding": {
				"url": "https://github.com/chalk/ansi-styles?sponsor=1"
			}
		},
		"node_modules/anymatch": {
			"version": "3.1.3",
			"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
			"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
			"dev": true,
			"dependencies": {
				"normalize-path": "^3.0.0",
				"picomatch": "^2.0.4"
			},
			"engines": {
				"node": ">= 8"
			}
		},
		"node_modules/are-docs-informative": {
			"version": "0.0.2",
			"resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz",
			"integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==",
			"dev": true,
			"engines": {
				"node": ">=14"
			}
		},
		"node_modules/argparse": {
			"version": "1.0.10",
			"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
			"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
			"dev": true,
			"dependencies": {
				"sprintf-js": "~1.0.2"
			}
		},
		"node_modules/argparse/node_modules/sprintf-js": {
			"version": "1.0.3",
			"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
			"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
			"dev": true
		},
		"node_modules/aria-query": {
			"version": "5.3.0",
			"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
			"integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
			"dev": true,
			"dependencies": {
				"dequal": "^2.0.3"
			}
		},
		"node_modules/arr-union": {
			"version": "3.1.0",
			"resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
			"integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/array-buffer-byte-length": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
			"integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.5",
				"is-array-buffer": "^3.0.4"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/array-flatten": {
			"version": "1.1.1",
			"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
			"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
			"dev": true
		},
		"node_modules/array-includes": {
			"version": "3.1.8",
			"resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
			"integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.7",
				"define-properties": "^1.2.1",
				"es-abstract": "^1.23.2",
				"es-object-atoms": "^1.0.0",
				"get-intrinsic": "^1.2.4",
				"is-string": "^1.0.7"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/array-union": {
			"version": "2.1.0",
			"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
			"integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/array-uniq": {
			"version": "1.0.3",
			"resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
			"integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/array.prototype.findlast": {
			"version": "1.2.5",
			"resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
			"integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.7",
				"define-properties": "^1.2.1",
				"es-abstract": "^1.23.2",
				"es-errors": "^1.3.0",
				"es-object-atoms": "^1.0.0",
				"es-shim-unscopables": "^1.0.2"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/array.prototype.findlastindex": {
			"version": "1.2.5",
			"resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
			"integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.7",
				"define-properties": "^1.2.1",
				"es-abstract": "^1.23.2",
				"es-errors": "^1.3.0",
				"es-object-atoms": "^1.0.0",
				"es-shim-unscopables": "^1.0.2"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/array.prototype.flat": {
			"version": "1.3.2",
			"resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
			"integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.2",
				"define-properties": "^1.2.0",
				"es-abstract": "^1.22.1",
				"es-shim-unscopables": "^1.0.0"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/array.prototype.flatmap": {
			"version": "1.3.2",
			"resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
			"integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.2",
				"define-properties": "^1.2.0",
				"es-abstract": "^1.22.1",
				"es-shim-unscopables": "^1.0.0"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/array.prototype.toreversed": {
			"version": "1.1.2",
			"resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz",
			"integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.2",
				"define-properties": "^1.2.0",
				"es-abstract": "^1.22.1",
				"es-shim-unscopables": "^1.0.0"
			}
		},
		"node_modules/array.prototype.tosorted": {
			"version": "1.1.3",
			"resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz",
			"integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.5",
				"define-properties": "^1.2.1",
				"es-abstract": "^1.22.3",
				"es-errors": "^1.1.0",
				"es-shim-unscopables": "^1.0.2"
			}
		},
		"node_modules/arraybuffer.prototype.slice": {
			"version": "1.0.3",
			"resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
			"integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
			"dev": true,
			"dependencies": {
				"array-buffer-byte-length": "^1.0.1",
				"call-bind": "^1.0.5",
				"define-properties": "^1.2.1",
				"es-abstract": "^1.22.3",
				"es-errors": "^1.2.1",
				"get-intrinsic": "^1.2.3",
				"is-array-buffer": "^3.0.4",
				"is-shared-array-buffer": "^1.0.2"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/arrify": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
			"integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"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/ast-types-flow": {
			"version": "0.0.8",
			"resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
			"integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
			"dev": true
		},
		"node_modules/astral-regex": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
			"integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/asynckit": {
			"version": "0.4.0",
			"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
			"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
			"dev": true
		},
		"node_modules/autoprefixer": {
			"version": "10.4.19",
			"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz",
			"integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==",
			"dev": true,
			"funding": [
				{
					"type": "opencollective",
					"url": "https://opencollective.com/postcss/"
				},
				{
					"type": "tidelift",
					"url": "https://tidelift.com/funding/github/npm/autoprefixer"
				},
				{
					"type": "github",
					"url": "https://github.com/sponsors/ai"
				}
			],
			"dependencies": {
				"browserslist": "^4.23.0",
				"caniuse-lite": "^1.0.30001599",
				"fraction.js": "^4.3.7",
				"normalize-range": "^0.1.2",
				"picocolors": "^1.0.0",
				"postcss-value-parser": "^4.2.0"
			},
			"bin": {
				"autoprefixer": "bin/autoprefixer"
			},
			"engines": {
				"node": "^10 || ^12 || >=14"
			},
			"peerDependencies": {
				"postcss": "^8.1.0"
			}
		},
		"node_modules/available-typed-arrays": {
			"version": "1.0.7",
			"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
			"integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
			"dev": true,
			"dependencies": {
				"possible-typed-array-names": "^1.0.0"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/axe-core": {
			"version": "4.7.0",
			"resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz",
			"integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==",
			"dev": true,
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/axios": {
			"version": "1.6.8",
			"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz",
			"integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==",
			"dev": true,
			"dependencies": {
				"follow-redirects": "^1.15.6",
				"form-data": "^4.0.0",
				"proxy-from-env": "^1.1.0"
			}
		},
		"node_modules/axobject-query": {
			"version": "3.2.1",
			"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz",
			"integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==",
			"dev": true,
			"dependencies": {
				"dequal": "^2.0.3"
			}
		},
		"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/babel-jest": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
			"integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==",
			"dev": true,
			"dependencies": {
				"@jest/transform": "^29.7.0",
				"@types/babel__core": "^7.1.14",
				"babel-plugin-istanbul": "^6.1.1",
				"babel-preset-jest": "^29.6.3",
				"chalk": "^4.0.0",
				"graceful-fs": "^4.2.9",
				"slash": "^3.0.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.8.0"
			}
		},
		"node_modules/babel-loader": {
			"version": "8.3.0",
			"resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz",
			"integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==",
			"dev": true,
			"dependencies": {
				"find-cache-dir": "^3.3.1",
				"loader-utils": "^2.0.0",
				"make-dir": "^3.1.0",
				"schema-utils": "^2.6.5"
			},
			"engines": {
				"node": ">= 8.9"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0",
				"webpack": ">=2"
			}
		},
		"node_modules/babel-loader/node_modules/schema-utils": {
			"version": "2.7.1",
			"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
			"integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
			"dev": true,
			"dependencies": {
				"@types/json-schema": "^7.0.5",
				"ajv": "^6.12.4",
				"ajv-keywords": "^3.5.2"
			},
			"engines": {
				"node": ">= 8.9.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/webpack"
			}
		},
		"node_modules/babel-plugin-istanbul": {
			"version": "6.1.1",
			"resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
			"integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
			"dev": true,
			"dependencies": {
				"@babel/helper-plugin-utils": "^7.0.0",
				"@istanbuljs/load-nyc-config": "^1.0.0",
				"@istanbuljs/schema": "^0.1.2",
				"istanbul-lib-instrument": "^5.0.4",
				"test-exclude": "^6.0.0"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/babel-plugin-jest-hoist": {
			"version": "29.6.3",
			"resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
			"integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
			"dev": true,
			"dependencies": {
				"@babel/template": "^7.3.3",
				"@babel/types": "^7.3.3",
				"@types/babel__core": "^7.1.14",
				"@types/babel__traverse": "^7.0.6"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/babel-plugin-polyfill-corejs2": {
			"version": "0.4.11",
			"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz",
			"integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==",
			"dev": true,
			"dependencies": {
				"@babel/compat-data": "^7.22.6",
				"@babel/helper-define-polyfill-provider": "^0.6.2",
				"semver": "^6.3.1"
			},
			"peerDependencies": {
				"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
			}
		},
		"node_modules/babel-plugin-polyfill-corejs3": {
			"version": "0.10.4",
			"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz",
			"integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==",
			"dev": true,
			"dependencies": {
				"@babel/helper-define-polyfill-provider": "^0.6.1",
				"core-js-compat": "^3.36.1"
			},
			"peerDependencies": {
				"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
			}
		},
		"node_modules/babel-plugin-polyfill-regenerator": {
			"version": "0.6.2",
			"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz",
			"integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==",
			"dev": true,
			"dependencies": {
				"@babel/helper-define-polyfill-provider": "^0.6.2"
			},
			"peerDependencies": {
				"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
			}
		},
		"node_modules/babel-preset-current-node-syntax": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
			"integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
			"dev": true,
			"dependencies": {
				"@babel/plugin-syntax-async-generators": "^7.8.4",
				"@babel/plugin-syntax-bigint": "^7.8.3",
				"@babel/plugin-syntax-class-properties": "^7.8.3",
				"@babel/plugin-syntax-import-meta": "^7.8.3",
				"@babel/plugin-syntax-json-strings": "^7.8.3",
				"@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
				"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
				"@babel/plugin-syntax-numeric-separator": "^7.8.3",
				"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
				"@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
				"@babel/plugin-syntax-optional-chaining": "^7.8.3",
				"@babel/plugin-syntax-top-level-await": "^7.8.3"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0"
			}
		},
		"node_modules/babel-preset-jest": {
			"version": "29.6.3",
			"resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
			"integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
			"dev": true,
			"dependencies": {
				"babel-plugin-jest-hoist": "^29.6.3",
				"babel-preset-current-node-syntax": "^1.0.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			},
			"peerDependencies": {
				"@babel/core": "^7.0.0"
			}
		},
		"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",
			"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
			"dev": true,
			"funding": [
				{
					"type": "github",
					"url": "https://github.com/sponsors/feross"
				},
				{
					"type": "patreon",
					"url": "https://www.patreon.com/feross"
				},
				{
					"type": "consulting",
					"url": "https://feross.org/support"
				}
			]
		},
		"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/batch": {
			"version": "0.6.1",
			"resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
			"integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",
			"dev": true
		},
		"node_modules/big.js": {
			"version": "5.2.2",
			"resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
			"integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
			"dev": true,
			"engines": {
				"node": "*"
			}
		},
		"node_modules/binary-extensions": {
			"version": "2.3.0",
			"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
			"integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
			"dev": true,
			"engines": {
				"node": ">=8"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/bl": {
			"version": "4.1.0",
			"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
			"integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
			"dev": true,
			"dependencies": {
				"buffer": "^5.5.0",
				"inherits": "^2.0.4",
				"readable-stream": "^3.4.0"
			}
		},
		"node_modules/body-parser": {
			"version": "1.20.2",
			"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
			"integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
			"dev": true,
			"dependencies": {
				"bytes": "3.1.2",
				"content-type": "~1.0.5",
				"debug": "2.6.9",
				"depd": "2.0.0",
				"destroy": "1.2.0",
				"http-errors": "2.0.0",
				"iconv-lite": "0.4.24",
				"on-finished": "2.4.1",
				"qs": "6.11.0",
				"raw-body": "2.5.2",
				"type-is": "~1.6.18",
				"unpipe": "1.0.0"
			},
			"engines": {
				"node": ">= 0.8",
				"npm": "1.2.8000 || >= 1.4.16"
			}
		},
		"node_modules/body-parser/node_modules/bytes": {
			"version": "3.1.2",
			"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
			"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
			"dev": true,
			"engines": {
				"node": ">= 0.8"
			}
		},
		"node_modules/body-parser/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/body-parser/node_modules/iconv-lite": {
			"version": "0.4.24",
			"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
			"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
			"dev": true,
			"dependencies": {
				"safer-buffer": ">= 2.1.2 < 3"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/body-parser/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/bonjour-service": {
			"version": "1.2.1",
			"resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz",
			"integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==",
			"dev": true,
			"dependencies": {
				"fast-deep-equal": "^3.1.3",
				"multicast-dns": "^7.2.5"
			}
		},
		"node_modules/boolbase": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
			"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
			"dev": true
		},
		"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/braces": {
			"version": "3.0.2",
			"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
			"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
			"dev": true,
			"dependencies": {
				"fill-range": "^7.0.1"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/browserslist": {
			"version": "4.23.0",
			"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz",
			"integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
			"dev": true,
			"funding": [
				{
					"type": "opencollective",
					"url": "https://opencollective.com/browserslist"
				},
				{
					"type": "tidelift",
					"url": "https://tidelift.com/funding/github/npm/browserslist"
				},
				{
					"type": "github",
					"url": "https://github.com/sponsors/ai"
				}
			],
			"dependencies": {
				"caniuse-lite": "^1.0.30001587",
				"electron-to-chromium": "^1.4.668",
				"node-releases": "^2.0.14",
				"update-browserslist-db": "^1.0.13"
			},
			"bin": {
				"browserslist": "cli.js"
			},
			"engines": {
				"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
			}
		},
		"node_modules/bser": {
			"version": "2.1.1",
			"resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
			"integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
			"dev": true,
			"dependencies": {
				"node-int64": "^0.4.0"
			}
		},
		"node_modules/buffer": {
			"version": "5.7.1",
			"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
			"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
			"dev": true,
			"funding": [
				{
					"type": "github",
					"url": "https://github.com/sponsors/feross"
				},
				{
					"type": "patreon",
					"url": "https://www.patreon.com/feross"
				},
				{
					"type": "consulting",
					"url": "https://feross.org/support"
				}
			],
			"dependencies": {
				"base64-js": "^1.3.1",
				"ieee754": "^1.1.13"
			}
		},
		"node_modules/buffer-crc32": {
			"version": "0.2.13",
			"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
			"integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
			"dev": true,
			"engines": {
				"node": "*"
			}
		},
		"node_modules/buffer-from": {
			"version": "1.1.2",
			"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
			"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
			"dev": true
		},
		"node_modules/builtin-modules": {
			"version": "3.3.0",
			"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
			"integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
			"dev": true,
			"engines": {
				"node": ">=6"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/builtins": {
			"version": "5.1.0",
			"resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz",
			"integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==",
			"dev": true,
			"dependencies": {
				"semver": "^7.0.0"
			}
		},
		"node_modules/builtins/node_modules/lru-cache": {
			"version": "6.0.0",
			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
			"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
			"dev": true,
			"dependencies": {
				"yallist": "^4.0.0"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/builtins/node_modules/semver": {
			"version": "7.6.0",
			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
			"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
			"dev": true,
			"dependencies": {
				"lru-cache": "^6.0.0"
			},
			"bin": {
				"semver": "bin/semver.js"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/builtins/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/bytes": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
			"integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==",
			"dev": true,
			"engines": {
				"node": ">= 0.8"
			}
		},
		"node_modules/call-bind": {
			"version": "1.0.7",
			"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
			"integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
			"dev": true,
			"dependencies": {
				"es-define-property": "^1.0.0",
				"es-errors": "^1.3.0",
				"function-bind": "^1.1.2",
				"get-intrinsic": "^1.2.4",
				"set-function-length": "^1.2.1"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/callsites": {
			"version": "3.1.0",
			"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
			"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
			"dev": true,
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/camel-case": {
			"version": "4.1.2",
			"resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz",
			"integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",
			"dev": true,
			"dependencies": {
				"pascal-case": "^3.1.2",
				"tslib": "^2.0.3"
			}
		},
		"node_modules/camelcase": {
			"version": "6.3.0",
			"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
			"integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
			"dev": true,
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/camelcase-keys": {
			"version": "6.2.2",
			"resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
			"integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
			"dev": true,
			"dependencies": {
				"camelcase": "^5.3.1",
				"map-obj": "^4.0.0",
				"quick-lru": "^4.0.1"
			},
			"engines": {
				"node": ">=8"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/camelcase-keys/node_modules/camelcase": {
			"version": "5.3.1",
			"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
			"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
			"dev": true,
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/caniuse-api": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
			"integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
			"dev": true,
			"dependencies": {
				"browserslist": "^4.0.0",
				"caniuse-lite": "^1.0.0",
				"lodash.memoize": "^4.1.2",
				"lodash.uniq": "^4.5.0"
			}
		},
		"node_modules/caniuse-lite": {
			"version": "1.0.30001614",
			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001614.tgz",
			"integrity": "sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==",
			"dev": true,
			"funding": [
				{
					"type": "opencollective",
					"url": "https://opencollective.com/browserslist"
				},
				{
					"type": "tidelift",
					"url": "https://tidelift.com/funding/github/npm/caniuse-lite"
				},
				{
					"type": "github",
					"url": "https://github.com/sponsors/ai"
				}
			]
		},
		"node_modules/capital-case": {
			"version": "1.0.4",
			"resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz",
			"integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==",
			"dev": true,
			"dependencies": {
				"no-case": "^3.0.4",
				"tslib": "^2.0.3",
				"upper-case-first": "^2.0.2"
			}
		},
		"node_modules/chalk": {
			"version": "4.1.2",
			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
			"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
			"dev": true,
			"dependencies": {
				"ansi-styles": "^4.1.0",
				"supports-color": "^7.1.0"
			},
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/chalk/chalk?sponsor=1"
			}
		},
		"node_modules/change-case": {
			"version": "4.1.2",
			"resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz",
			"integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==",
			"dev": true,
			"dependencies": {
				"camel-case": "^4.1.2",
				"capital-case": "^1.0.4",
				"constant-case": "^3.0.4",
				"dot-case": "^3.0.4",
				"header-case": "^2.0.4",
				"no-case": "^3.0.4",
				"param-case": "^3.0.4",
				"pascal-case": "^3.1.2",
				"path-case": "^3.0.4",
				"sentence-case": "^3.0.4",
				"snake-case": "^3.0.4",
				"tslib": "^2.0.3"
			}
		},
		"node_modules/char-regex": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
			"integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
			"dev": true,
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/check-node-version": {
			"version": "4.2.1",
			"resolved": "https://registry.npmjs.org/check-node-version/-/check-node-version-4.2.1.tgz",
			"integrity": "sha512-YYmFYHV/X7kSJhuN/QYHUu998n/TRuDe8UenM3+m5NrkiH670lb9ILqHIvBencvJc4SDh+XcbXMR4b+TtubJiw==",
			"dev": true,
			"dependencies": {
				"chalk": "^3.0.0",
				"map-values": "^1.0.1",
				"minimist": "^1.2.0",
				"object-filter": "^1.0.2",
				"run-parallel": "^1.1.4",
				"semver": "^6.3.0"
			},
			"bin": {
				"check-node-version": "bin.js"
			},
			"engines": {
				"node": ">=8.3.0"
			}
		},
		"node_modules/check-node-version/node_modules/chalk": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
			"integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
			"dev": true,
			"dependencies": {
				"ansi-styles": "^4.1.0",
				"supports-color": "^7.1.0"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/chokidar": {
			"version": "3.6.0",
			"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
			"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
			"dev": true,
			"dependencies": {
				"anymatch": "~3.1.2",
				"braces": "~3.0.2",
				"glob-parent": "~5.1.2",
				"is-binary-path": "~2.1.0",
				"is-glob": "~4.0.1",
				"normalize-path": "~3.0.0",
				"readdirp": "~3.6.0"
			},
			"engines": {
				"node": ">= 8.10.0"
			},
			"funding": {
				"url": "https://paulmillr.com/funding/"
			},
			"optionalDependencies": {
				"fsevents": "~2.3.2"
			}
		},
		"node_modules/chokidar/node_modules/glob-parent": {
			"version": "5.1.2",
			"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
			"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
			"dev": true,
			"dependencies": {
				"is-glob": "^4.0.1"
			},
			"engines": {
				"node": ">= 6"
			}
		},
		"node_modules/chownr": {
			"version": "1.1.4",
			"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
			"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
			"dev": true
		},
		"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-trace-event": {
			"version": "1.0.3",
			"resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
			"integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
			"dev": true,
			"engines": {
				"node": ">=6.0"
			}
		},
		"node_modules/ci-info": {
			"version": "3.9.0",
			"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
			"integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
			"dev": true,
			"funding": [
				{
					"type": "github",
					"url": "https://github.com/sponsors/sibiraj-s"
				}
			],
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/cjs-module-lexer": {
			"version": "1.3.1",
			"resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz",
			"integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==",
			"dev": true
		},
		"node_modules/clean-webpack-plugin": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz",
			"integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==",
			"dev": true,
			"dependencies": {
				"@types/webpack": "^4.4.31",
				"del": "^4.1.1"
			},
			"engines": {
				"node": ">=8.9.0"
			},
			"peerDependencies": {
				"webpack": "*"
			}
		},
		"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/clone-deep": {
			"version": "0.2.4",
			"resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz",
			"integrity": "sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==",
			"dev": true,
			"dependencies": {
				"for-own": "^0.1.3",
				"is-plain-object": "^2.0.1",
				"kind-of": "^3.0.2",
				"lazy-cache": "^1.0.3",
				"shallow-clone": "^0.1.2"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/co": {
			"version": "4.6.0",
			"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
			"integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
			"dev": true,
			"engines": {
				"iojs": ">= 1.0.0",
				"node": ">= 0.12.0"
			}
		},
		"node_modules/collect-v8-coverage": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
			"integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==",
			"dev": true
		},
		"node_modules/color-convert": {
			"version": "2.0.1",
			"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
			"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
			"dev": true,
			"dependencies": {
				"color-name": "~1.1.4"
			},
			"engines": {
				"node": ">=7.0.0"
			}
		},
		"node_modules/color-name": {
			"version": "1.1.4",
			"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
			"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
			"dev": true
		},
		"node_modules/colord": {
			"version": "2.9.3",
			"resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
			"integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
			"dev": true
		},
		"node_modules/colorette": {
			"version": "2.0.20",
			"resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
			"integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
			"dev": true
		},
		"node_modules/combined-stream": {
			"version": "1.0.8",
			"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
			"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
			"dev": true,
			"dependencies": {
				"delayed-stream": "~1.0.0"
			},
			"engines": {
				"node": ">= 0.8"
			}
		},
		"node_modules/commander": {
			"version": "5.1.0",
			"resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
			"integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
			"dev": true,
			"engines": {
				"node": ">= 6"
			}
		},
		"node_modules/comment-parser": {
			"version": "1.4.1",
			"resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz",
			"integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==",
			"dev": true,
			"engines": {
				"node": ">= 12.0.0"
			}
		},
		"node_modules/commondir": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
			"integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
			"dev": true
		},
		"node_modules/compressible": {
			"version": "2.0.18",
			"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
			"integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
			"dev": true,
			"dependencies": {
				"mime-db": ">= 1.43.0 < 2"
			},
			"engines": {
				"node": ">= 0.6"
			}
		},
		"node_modules/compression": {
			"version": "1.7.4",
			"resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
			"integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
			"dev": true,
			"dependencies": {
				"accepts": "~1.3.5",
				"bytes": "3.0.0",
				"compressible": "~2.0.16",
				"debug": "2.6.9",
				"on-headers": "~1.0.2",
				"safe-buffer": "5.1.2",
				"vary": "~1.1.2"
			},
			"engines": {
				"node": ">= 0.8.0"
			}
		},
		"node_modules/compression/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/compression/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/compression/node_modules/safe-buffer": {
			"version": "5.1.2",
			"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
			"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
			"dev": true
		},
		"node_modules/concat-map": {
			"version": "0.0.1",
			"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
			"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
			"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/configstore/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/connect-history-api-fallback": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz",
			"integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==",
			"dev": true,
			"engines": {
				"node": ">=0.8"
			}
		},
		"node_modules/constant-case": {
			"version": "3.0.4",
			"resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz",
			"integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==",
			"dev": true,
			"dependencies": {
				"no-case": "^3.0.4",
				"tslib": "^2.0.3",
				"upper-case": "^2.0.2"
			}
		},
		"node_modules/content-disposition": {
			"version": "0.5.4",
			"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
			"integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
			"dev": true,
			"dependencies": {
				"safe-buffer": "5.2.1"
			},
			"engines": {
				"node": ">= 0.6"
			}
		},
		"node_modules/content-type": {
			"version": "1.0.5",
			"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
			"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
			"dev": true,
			"engines": {
				"node": ">= 0.6"
			}
		},
		"node_modules/convert-source-map": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
			"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
			"dev": true
		},
		"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/cookie-signature": {
			"version": "1.0.6",
			"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
			"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
			"dev": true
		},
		"node_modules/copy-webpack-plugin": {
			"version": "10.2.4",
			"resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz",
			"integrity": "sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==",
			"dev": true,
			"dependencies": {
				"fast-glob": "^3.2.7",
				"glob-parent": "^6.0.1",
				"globby": "^12.0.2",
				"normalize-path": "^3.0.0",
				"schema-utils": "^4.0.0",
				"serialize-javascript": "^6.0.0"
			},
			"engines": {
				"node": ">= 12.20.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/webpack"
			},
			"peerDependencies": {
				"webpack": "^5.1.0"
			}
		},
		"node_modules/copy-webpack-plugin/node_modules/ajv": {
			"version": "8.12.0",
			"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
			"integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
			"dev": true,
			"dependencies": {
				"fast-deep-equal": "^3.1.1",
				"json-schema-traverse": "^1.0.0",
				"require-from-string": "^2.0.2",
				"uri-js": "^4.2.2"
			},
			"funding": {
				"type": "github",
				"url": "https://github.com/sponsors/epoberezkin"
			}
		},
		"node_modules/copy-webpack-plugin/node_modules/ajv-keywords": {
			"version": "5.1.0",
			"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
			"integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
			"dev": true,
			"dependencies": {
				"fast-deep-equal": "^3.1.3"
			},
			"peerDependencies": {
				"ajv": "^8.8.2"
			}
		},
		"node_modules/copy-webpack-plugin/node_modules/array-union": {
			"version": "3.0.1",
			"resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz",
			"integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==",
			"dev": true,
			"engines": {
				"node": ">=12"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/copy-webpack-plugin/node_modules/globby": {
			"version": "12.2.0",
			"resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz",
			"integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==",
			"dev": true,
			"dependencies": {
				"array-union": "^3.0.1",
				"dir-glob": "^3.0.1",
				"fast-glob": "^3.2.7",
				"ignore": "^5.1.9",
				"merge2": "^1.4.1",
				"slash": "^4.0.0"
			},
			"engines": {
				"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
			"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
			"dev": true
		},
		"node_modules/copy-webpack-plugin/node_modules/schema-utils": {
			"version": "4.2.0",
			"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
			"integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
			"dev": true,
			"dependencies": {
				"@types/json-schema": "^7.0.9",
				"ajv": "^8.9.0",
				"ajv-formats": "^2.1.1",
				"ajv-keywords": "^5.1.0"
			},
			"engines": {
				"node": ">= 12.13.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/webpack"
			}
		},
		"node_modules/copy-webpack-plugin/node_modules/slash": {
			"version": "4.0.0",
			"resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
			"integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
			"dev": true,
			"engines": {
				"node": ">=12"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/core-js": {
			"version": "3.37.0",
			"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.0.tgz",
			"integrity": "sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==",
			"dev": true,
			"hasInstallScript": true,
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/core-js"
			}
		},
		"node_modules/core-js-compat": {
			"version": "3.37.0",
			"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.0.tgz",
			"integrity": "sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==",
			"dev": true,
			"dependencies": {
				"browserslist": "^4.23.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/core-js"
			}
		},
		"node_modules/core-js-pure": {
			"version": "3.37.0",
			"resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.37.0.tgz",
			"integrity": "sha512-d3BrpyFr5eD4KcbRvQ3FTUx/KWmaDesr7+a3+1+P46IUnNoEt+oiLijPINZMEon7w9oGkIINWxrBAU9DEciwFQ==",
			"dev": true,
			"hasInstallScript": true,
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/core-js"
			}
		},
		"node_modules/core-util-is": {
			"version": "1.0.3",
			"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
			"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
			"dev": true
		},
		"node_modules/cosmiconfig": {
			"version": "8.3.6",
			"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
			"integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
			"dev": true,
			"dependencies": {
				"import-fresh": "^3.3.0",
				"js-yaml": "^4.1.0",
				"parse-json": "^5.2.0",
				"path-type": "^4.0.0"
			},
			"engines": {
				"node": ">=14"
			},
			"funding": {
				"url": "https://github.com/sponsors/d-fischer"
			},
			"peerDependencies": {
				"typescript": ">=4.9.5"
			},
			"peerDependenciesMeta": {
				"typescript": {
					"optional": true
				}
			}
		},
		"node_modules/cosmiconfig/node_modules/argparse": {
			"version": "2.0.1",
			"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
			"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
			"dev": true
		},
		"node_modules/cosmiconfig/node_modules/js-yaml": {
			"version": "4.1.0",
			"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
			"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
			"dev": true,
			"dependencies": {
				"argparse": "^2.0.1"
			},
			"bin": {
				"js-yaml": "bin/js-yaml.js"
			}
		},
		"node_modules/create-jest": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
			"integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
			"dev": true,
			"dependencies": {
				"@jest/types": "^29.6.3",
				"chalk": "^4.0.0",
				"exit": "^0.1.2",
				"graceful-fs": "^4.2.9",
				"jest-config": "^29.7.0",
				"jest-util": "^29.7.0",
				"prompts": "^2.0.1"
			},
			"bin": {
				"create-jest": "bin/create-jest.js"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/cross-fetch": {
			"version": "3.1.5",
			"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz",
			"integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==",
			"dev": true,
			"dependencies": {
				"node-fetch": "2.6.7"
			}
		},
		"node_modules/cross-spawn": {
			"version": "5.1.0",
			"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
			"integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==",
			"dev": true,
			"dependencies": {
				"lru-cache": "^4.0.1",
				"shebang-command": "^1.2.0",
				"which": "^1.2.9"
			}
		},
		"node_modules/cross-spawn/node_modules/lru-cache": {
			"version": "4.1.5",
			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
			"integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
			"dev": true,
			"dependencies": {
				"pseudomap": "^1.0.2",
				"yallist": "^2.1.2"
			}
		},
		"node_modules/cross-spawn/node_modules/yallist": {
			"version": "2.1.2",
			"resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
			"integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",
			"dev": true
		},
		"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/css-declaration-sorter": {
			"version": "7.2.0",
			"resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz",
			"integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==",
			"dev": true,
			"engines": {
				"node": "^14 || ^16 || >=18"
			},
			"peerDependencies": {
				"postcss": "^8.0.9"
			}
		},
		"node_modules/css-functions-list": {
			"version": "3.2.2",
			"resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz",
			"integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==",
			"dev": true,
			"engines": {
				"node": ">=12 || >=16"
			}
		},
		"node_modules/css-loader": {
			"version": "6.11.0",
			"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz",
			"integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==",
			"dev": true,
			"dependencies": {
				"icss-utils": "^5.1.0",
				"postcss": "^8.4.33",
				"postcss-modules-extract-imports": "^3.1.0",
				"postcss-modules-local-by-default": "^4.0.5",
				"postcss-modules-scope": "^3.2.0",
				"postcss-modules-values": "^4.0.0",
				"postcss-value-parser": "^4.2.0",
				"semver": "^7.5.4"
			},
			"engines": {
				"node": ">= 12.13.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/webpack"
			},
			"peerDependencies": {
				"@rspack/core": "0.x || 1.x",
				"webpack": "^5.0.0"
			},
			"peerDependenciesMeta": {
				"@rspack/core": {
					"optional": true
				},
				"webpack": {
					"optional": true
				}
			}
		},
		"node_modules/css-loader/node_modules/lru-cache": {
			"version": "6.0.0",
			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
			"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
			"dev": true,
			"dependencies": {
				"yallist": "^4.0.0"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/css-loader/node_modules/semver": {
			"version": "7.6.0",
			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
			"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
			"dev": true,
			"dependencies": {
				"lru-cache": "^6.0.0"
			},
			"bin": {
				"semver": "bin/semver.js"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/css-loader/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/css-select": {
			"version": "5.1.0",
			"resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
			"integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
			"dev": true,
			"dependencies": {
				"boolbase": "^1.0.0",
				"css-what": "^6.1.0",
				"domhandler": "^5.0.2",
				"domutils": "^3.0.1",
				"nth-check": "^2.0.1"
			},
			"funding": {
				"url": "https://github.com/sponsors/fb55"
			}
		},
		"node_modules/css-tree": {
			"version": "2.3.1",
			"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
			"integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
			"dev": true,
			"dependencies": {
				"mdn-data": "2.0.30",
				"source-map-js": "^1.0.1"
			},
			"engines": {
				"node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
			}
		},
		"node_modules/css-what": {
			"version": "6.1.0",
			"resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
			"integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
			"dev": true,
			"engines": {
				"node": ">= 6"
			},
			"funding": {
				"url": "https://github.com/sponsors/fb55"
			}
		},
		"node_modules/cssesc": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
			"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
			"dev": true,
			"bin": {
				"cssesc": "bin/cssesc"
			},
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/cssnano": {
			"version": "6.1.2",
			"resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz",
			"integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==",
			"dev": true,
			"dependencies": {
				"cssnano-preset-default": "^6.1.2",
				"lilconfig": "^3.1.1"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/cssnano"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/cssnano-preset-default": {
			"version": "6.1.2",
			"resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz",
			"integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==",
			"dev": true,
			"dependencies": {
				"browserslist": "^4.23.0",
				"css-declaration-sorter": "^7.2.0",
				"cssnano-utils": "^4.0.2",
				"postcss-calc": "^9.0.1",
				"postcss-colormin": "^6.1.0",
				"postcss-convert-values": "^6.1.0",
				"postcss-discard-comments": "^6.0.2",
				"postcss-discard-duplicates": "^6.0.3",
				"postcss-discard-empty": "^6.0.3",
				"postcss-discard-overridden": "^6.0.2",
				"postcss-merge-longhand": "^6.0.5",
				"postcss-merge-rules": "^6.1.1",
				"postcss-minify-font-values": "^6.1.0",
				"postcss-minify-gradients": "^6.0.3",
				"postcss-minify-params": "^6.1.0",
				"postcss-minify-selectors": "^6.0.4",
				"postcss-normalize-charset": "^6.0.2",
				"postcss-normalize-display-values": "^6.0.2",
				"postcss-normalize-positions": "^6.0.2",
				"postcss-normalize-repeat-style": "^6.0.2",
				"postcss-normalize-string": "^6.0.2",
				"postcss-normalize-timing-functions": "^6.0.2",
				"postcss-normalize-unicode": "^6.1.0",
				"postcss-normalize-url": "^6.0.2",
				"postcss-normalize-whitespace": "^6.0.2",
				"postcss-ordered-values": "^6.0.2",
				"postcss-reduce-initial": "^6.1.0",
				"postcss-reduce-transforms": "^6.0.2",
				"postcss-svgo": "^6.0.3",
				"postcss-unique-selectors": "^6.0.4"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/cssnano-utils": {
			"version": "4.0.2",
			"resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz",
			"integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==",
			"dev": true,
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/csso": {
			"version": "5.0.5",
			"resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
			"integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
			"dev": true,
			"dependencies": {
				"css-tree": "~2.2.0"
			},
			"engines": {
				"node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
				"npm": ">=7.0.0"
			}
		},
		"node_modules/csso/node_modules/css-tree": {
			"version": "2.2.1",
			"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
			"integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
			"dev": true,
			"dependencies": {
				"mdn-data": "2.0.28",
				"source-map-js": "^1.0.1"
			},
			"engines": {
				"node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
				"npm": ">=7.0.0"
			}
		},
		"node_modules/csso/node_modules/mdn-data": {
			"version": "2.0.28",
			"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
			"integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
			"dev": true
		},
		"node_modules/cssom": {
			"version": "0.5.0",
			"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz",
			"integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==",
			"dev": true
		},
		"node_modules/cssstyle": {
			"version": "2.3.0",
			"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
			"integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
			"dev": true,
			"dependencies": {
				"cssom": "~0.3.6"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/cssstyle/node_modules/cssom": {
			"version": "0.3.8",
			"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
			"integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
			"dev": true
		},
		"node_modules/cwd": {
			"version": "0.10.0",
			"resolved": "https://registry.npmjs.org/cwd/-/cwd-0.10.0.tgz",
			"integrity": "sha512-YGZxdTTL9lmLkCUTpg4j0zQ7IhRB5ZmqNBbGCl3Tg6MP/d5/6sY7L5mmTjzbc6JKgVZYiqTQTNhPFsbXNGlRaA==",
			"dev": true,
			"dependencies": {
				"find-pkg": "^0.1.2",
				"fs-exists-sync": "^0.1.0"
			},
			"engines": {
				"node": ">=0.8"
			}
		},
		"node_modules/damerau-levenshtein": {
			"version": "1.0.8",
			"resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
			"integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
			"dev": true
		},
		"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/data-urls": {
			"version": "3.0.2",
			"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz",
			"integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==",
			"dev": true,
			"dependencies": {
				"abab": "^2.0.6",
				"whatwg-mimetype": "^3.0.0",
				"whatwg-url": "^11.0.0"
			},
			"engines": {
				"node": ">=12"
			}
		},
		"node_modules/data-view-buffer": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
			"integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.6",
				"es-errors": "^1.3.0",
				"is-data-view": "^1.0.1"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/data-view-byte-length": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
			"integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.7",
				"es-errors": "^1.3.0",
				"is-data-view": "^1.0.1"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/data-view-byte-offset": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
			"integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.6",
				"es-errors": "^1.3.0",
				"is-data-view": "^1.0.1"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/debounce": {
			"version": "1.2.1",
			"resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz",
			"integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==",
			"dev": true
		},
		"node_modules/debug": {
			"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"
			},
			"engines": {
				"node": ">=6.0"
			},
			"peerDependenciesMeta": {
				"supports-color": {
					"optional": true
				}
			}
		},
		"node_modules/decamelize": {
			"version": "1.2.0",
			"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
			"integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/decamelize-keys": {
			"version": "1.1.1",
			"resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
			"integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
			"dev": true,
			"dependencies": {
				"decamelize": "^1.1.0",
				"map-obj": "^1.0.0"
			},
			"engines": {
				"node": ">=0.10.0"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/decamelize-keys/node_modules/map-obj": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
			"integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/decimal.js": {
			"version": "10.4.3",
			"resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
			"integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
			"dev": true
		},
		"node_modules/dedent": {
			"version": "1.5.3",
			"resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz",
			"integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==",
			"dev": true,
			"peerDependencies": {
				"babel-plugin-macros": "^3.1.0"
			},
			"peerDependenciesMeta": {
				"babel-plugin-macros": {
					"optional": true
				}
			}
		},
		"node_modules/deep-extend": {
			"version": "0.6.0",
			"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
			"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
			"dev": true,
			"engines": {
				"node": ">=4.0.0"
			}
		},
		"node_modules/deep-is": {
			"version": "0.1.4",
			"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
			"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
			"dev": true
		},
		"node_modules/deepmerge": {
			"version": "4.3.1",
			"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
			"integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/default-gateway": {
			"version": "6.0.3",
			"resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz",
			"integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==",
			"dev": true,
			"dependencies": {
				"execa": "^5.0.0"
			},
			"engines": {
				"node": ">= 10"
			}
		},
		"node_modules/define-data-property": {
			"version": "1.1.4",
			"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
			"integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
			"dev": true,
			"dependencies": {
				"es-define-property": "^1.0.0",
				"es-errors": "^1.3.0",
				"gopd": "^1.0.1"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"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/define-properties": {
			"version": "1.2.1",
			"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
			"integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
			"dev": true,
			"dependencies": {
				"define-data-property": "^1.0.1",
				"has-property-descriptors": "^1.0.0",
				"object-keys": "^1.1.1"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"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/del": {
			"version": "4.1.1",
			"resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
			"integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
			"dev": true,
			"dependencies": {
				"@types/glob": "^7.1.1",
				"globby": "^6.1.0",
				"is-path-cwd": "^2.0.0",
				"is-path-in-cwd": "^2.0.0",
				"p-map": "^2.0.0",
				"pify": "^4.0.1",
				"rimraf": "^2.6.3"
			},
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/del/node_modules/array-union": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
			"integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==",
			"dev": true,
			"dependencies": {
				"array-uniq": "^1.0.1"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/del/node_modules/globby": {
			"version": "6.1.0",
			"resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
			"integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==",
			"dev": true,
			"dependencies": {
				"array-union": "^1.0.1",
				"glob": "^7.0.3",
				"object-assign": "^4.0.1",
				"pify": "^2.0.0",
				"pinkie-promise": "^2.0.0"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/del/node_modules/globby/node_modules/pify": {
			"version": "2.3.0",
			"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
			"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/delayed-stream": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
			"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
			"dev": true,
			"engines": {
				"node": ">=0.4.0"
			}
		},
		"node_modules/depd": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
			"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
			"dev": true,
			"engines": {
				"node": ">= 0.8"
			}
		},
		"node_modules/dequal": {
			"version": "2.0.3",
			"resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
			"integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
			"dev": true,
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/destroy": {
			"version": "1.2.0",
			"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
			"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
			"dev": true,
			"engines": {
				"node": ">= 0.8",
				"npm": "1.2.8000 || >= 1.4.16"
			}
		},
		"node_modules/detect-newline": {
			"version": "3.1.0",
			"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
			"integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/detect-node": {
			"version": "2.1.0",
			"resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
			"integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
			"dev": true
		},
		"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/diff-sequences": {
			"version": "29.6.3",
			"resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
			"integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
			"dev": true,
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/dir-glob": {
			"version": "3.0.1",
			"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
			"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
			"dev": true,
			"dependencies": {
				"path-type": "^4.0.0"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/dns-packet": {
			"version": "5.6.1",
			"resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz",
			"integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==",
			"dev": true,
			"dependencies": {
				"@leichtgewicht/ip-codec": "^2.0.1"
			},
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/doctrine": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
			"integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
			"dev": true,
			"dependencies": {
				"esutils": "^2.0.2"
			},
			"engines": {
				"node": ">=6.0.0"
			}
		},
		"node_modules/dom-serializer": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
			"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
			"dev": true,
			"dependencies": {
				"domelementtype": "^2.3.0",
				"domhandler": "^5.0.2",
				"entities": "^4.2.0"
			},
			"funding": {
				"url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
			}
		},
		"node_modules/domelementtype": {
			"version": "2.3.0",
			"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
			"integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
			"dev": true,
			"funding": [
				{
					"type": "github",
					"url": "https://github.com/sponsors/fb55"
				}
			]
		},
		"node_modules/domexception": {
			"version": "4.0.0",
			"resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
			"integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==",
			"deprecated": "Use your platform's native DOMException instead",
			"dev": true,
			"dependencies": {
				"webidl-conversions": "^7.0.0"
			},
			"engines": {
				"node": ">=12"
			}
		},
		"node_modules/domhandler": {
			"version": "5.0.3",
			"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
			"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
			"dev": true,
			"dependencies": {
				"domelementtype": "^2.3.0"
			},
			"engines": {
				"node": ">= 4"
			},
			"funding": {
				"url": "https://github.com/fb55/domhandler?sponsor=1"
			}
		},
		"node_modules/domutils": {
			"version": "3.1.0",
			"resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
			"integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
			"dev": true,
			"dependencies": {
				"dom-serializer": "^2.0.0",
				"domelementtype": "^2.3.0",
				"domhandler": "^5.0.3"
			},
			"funding": {
				"url": "https://github.com/fb55/domutils?sponsor=1"
			}
		},
		"node_modules/dot-case": {
			"version": "3.0.4",
			"resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
			"integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
			"dev": true,
			"dependencies": {
				"no-case": "^3.0.4",
				"tslib": "^2.0.3"
			}
		},
		"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/duplexer": {
			"version": "0.1.2",
			"resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
			"integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
			"dev": true
		},
		"node_modules/ee-first": {
			"version": "1.1.1",
			"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
			"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
			"dev": true
		},
		"node_modules/electron-to-chromium": {
			"version": "1.4.750",
			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.750.tgz",
			"integrity": "sha512-9ItEpeu15hW5m8jKdriL+BQrgwDTXEL9pn4SkillWFu73ZNNNQ2BKKLS+ZHv2vC9UkNhosAeyfxOf/5OSeTCPA==",
			"dev": true
		},
		"node_modules/emittery": {
			"version": "0.13.1",
			"resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
			"integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
			"dev": true,
			"engines": {
				"node": ">=12"
			},
			"funding": {
				"url": "https://github.com/sindresorhus/emittery?sponsor=1"
			}
		},
		"node_modules/emoji-regex": {
			"version": "9.2.2",
			"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
			"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
			"dev": true
		},
		"node_modules/emojis-list": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
			"integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
			"dev": true,
			"engines": {
				"node": ">= 4"
			}
		},
		"node_modules/encodeurl": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
			"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
			"dev": true,
			"engines": {
				"node": ">= 0.8"
			}
		},
		"node_modules/encoding": {
			"version": "0.1.13",
			"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
			"integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
			"dev": true,
			"dependencies": {
				"iconv-lite": "^0.6.2"
			}
		},
		"node_modules/end-of-stream": {
			"version": "1.4.4",
			"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
			"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
			"dev": true,
			"dependencies": {
				"once": "^1.4.0"
			}
		},
		"node_modules/enhanced-resolve": {
			"version": "5.16.0",
			"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz",
			"integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==",
			"dev": true,
			"dependencies": {
				"graceful-fs": "^4.2.4",
				"tapable": "^2.2.0"
			},
			"engines": {
				"node": ">=10.13.0"
			}
		},
		"node_modules/enquirer": {
			"version": "2.4.1",
			"resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz",
			"integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==",
			"dev": true,
			"dependencies": {
				"ansi-colors": "^4.1.1",
				"strip-ansi": "^6.0.1"
			},
			"engines": {
				"node": ">=8.6"
			}
		},
		"node_modules/entities": {
			"version": "4.5.0",
			"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
			"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
			"dev": true,
			"engines": {
				"node": ">=0.12"
			},
			"funding": {
				"url": "https://github.com/fb55/entities?sponsor=1"
			}
		},
		"node_modules/envinfo": {
			"version": "7.13.0",
			"resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz",
			"integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==",
			"dev": true,
			"bin": {
				"envinfo": "dist/cli.js"
			},
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/error-ex": {
			"version": "1.3.2",
			"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
			"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
			"dev": true,
			"dependencies": {
				"is-arrayish": "^0.2.1"
			}
		},
		"node_modules/error-stack-parser": {
			"version": "2.1.4",
			"resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz",
			"integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==",
			"dev": true,
			"dependencies": {
				"stackframe": "^1.3.4"
			}
		},
		"node_modules/es-abstract": {
			"version": "1.23.3",
			"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
			"integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==",
			"dev": true,
			"dependencies": {
				"array-buffer-byte-length": "^1.0.1",
				"arraybuffer.prototype.slice": "^1.0.3",
				"available-typed-arrays": "^1.0.7",
				"call-bind": "^1.0.7",
				"data-view-buffer": "^1.0.1",
				"data-view-byte-length": "^1.0.1",
				"data-view-byte-offset": "^1.0.0",
				"es-define-property": "^1.0.0",
				"es-errors": "^1.3.0",
				"es-object-atoms": "^1.0.0",
				"es-set-tostringtag": "^2.0.3",
				"es-to-primitive": "^1.2.1",
				"function.prototype.name": "^1.1.6",
				"get-intrinsic": "^1.2.4",
				"get-symbol-description": "^1.0.2",
				"globalthis": "^1.0.3",
				"gopd": "^1.0.1",
				"has-property-descriptors": "^1.0.2",
				"has-proto": "^1.0.3",
				"has-symbols": "^1.0.3",
				"hasown": "^2.0.2",
				"internal-slot": "^1.0.7",
				"is-array-buffer": "^3.0.4",
				"is-callable": "^1.2.7",
				"is-data-view": "^1.0.1",
				"is-negative-zero": "^2.0.3",
				"is-regex": "^1.1.4",
				"is-shared-array-buffer": "^1.0.3",
				"is-string": "^1.0.7",
				"is-typed-array": "^1.1.13",
				"is-weakref": "^1.0.2",
				"object-inspect": "^1.13.1",
				"object-keys": "^1.1.1",
				"object.assign": "^4.1.5",
				"regexp.prototype.flags": "^1.5.2",
				"safe-array-concat": "^1.1.2",
				"safe-regex-test": "^1.0.3",
				"string.prototype.trim": "^1.2.9",
				"string.prototype.trimend": "^1.0.8",
				"string.prototype.trimstart": "^1.0.8",
				"typed-array-buffer": "^1.0.2",
				"typed-array-byte-length": "^1.0.1",
				"typed-array-byte-offset": "^1.0.2",
				"typed-array-length": "^1.0.6",
				"unbox-primitive": "^1.0.2",
				"which-typed-array": "^1.1.15"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/es-define-property": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
			"integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
			"dev": true,
			"dependencies": {
				"get-intrinsic": "^1.2.4"
			},
			"engines": {
				"node": ">= 0.4"
			}
		},
		"node_modules/es-errors": {
			"version": "1.3.0",
			"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
			"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
			"dev": true,
			"engines": {
				"node": ">= 0.4"
			}
		},
		"node_modules/es-iterator-helpers": {
			"version": "1.0.19",
			"resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz",
			"integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.7",
				"define-properties": "^1.2.1",
				"es-abstract": "^1.23.3",
				"es-errors": "^1.3.0",
				"es-set-tostringtag": "^2.0.3",
				"function-bind": "^1.1.2",
				"get-intrinsic": "^1.2.4",
				"globalthis": "^1.0.3",
				"has-property-descriptors": "^1.0.2",
				"has-proto": "^1.0.3",
				"has-symbols": "^1.0.3",
				"internal-slot": "^1.0.7",
				"iterator.prototype": "^1.1.2",
				"safe-array-concat": "^1.1.2"
			},
			"engines": {
				"node": ">= 0.4"
			}
		},
		"node_modules/es-module-lexer": {
			"version": "1.5.2",
			"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.2.tgz",
			"integrity": "sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA==",
			"dev": true
		},
		"node_modules/es-object-atoms": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
			"integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
			"dev": true,
			"dependencies": {
				"es-errors": "^1.3.0"
			},
			"engines": {
				"node": ">= 0.4"
			}
		},
		"node_modules/es-set-tostringtag": {
			"version": "2.0.3",
			"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
			"integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
			"dev": true,
			"dependencies": {
				"get-intrinsic": "^1.2.4",
				"has-tostringtag": "^1.0.2",
				"hasown": "^2.0.1"
			},
			"engines": {
				"node": ">= 0.4"
			}
		},
		"node_modules/es-shim-unscopables": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
			"integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
			"dev": true,
			"dependencies": {
				"hasown": "^2.0.0"
			}
		},
		"node_modules/es-to-primitive": {
			"version": "1.2.1",
			"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
			"integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
			"dev": true,
			"dependencies": {
				"is-callable": "^1.1.4",
				"is-date-object": "^1.0.1",
				"is-symbol": "^1.0.2"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"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-html": {
			"version": "1.0.3",
			"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
			"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
			"dev": true
		},
		"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/escodegen": {
			"version": "2.1.0",
			"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
			"integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
			"dev": true,
			"dependencies": {
				"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/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/eslint": {
			"version": "8.57.0",
			"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
			"integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
			"dev": true,
			"dependencies": {
				"@eslint-community/eslint-utils": "^4.2.0",
				"@eslint-community/regexpp": "^4.6.1",
				"@eslint/eslintrc": "^2.1.4",
				"@eslint/js": "8.57.0",
				"@humanwhocodes/config-array": "^0.11.14",
				"@humanwhocodes/module-importer": "^1.0.1",
				"@nodelib/fs.walk": "^1.2.8",
				"@ungap/structured-clone": "^1.2.0",
				"ajv": "^6.12.4",
				"chalk": "^4.0.0",
				"cross-spawn": "^7.0.2",
				"debug": "^4.3.2",
				"doctrine": "^3.0.0",
				"escape-string-regexp": "^4.0.0",
				"eslint-scope": "^7.2.2",
				"eslint-visitor-keys": "^3.4.3",
				"espree": "^9.6.1",
				"esquery": "^1.4.2",
				"esutils": "^2.0.2",
				"fast-deep-equal": "^3.1.3",
				"file-entry-cache": "^6.0.1",
				"find-up": "^5.0.0",
				"glob-parent": "^6.0.2",
				"globals": "^13.19.0",
				"graphemer": "^1.4.0",
				"ignore": "^5.2.0",
				"imurmurhash": "^0.1.4",
				"is-glob": "^4.0.0",
				"is-path-inside": "^3.0.3",
				"js-yaml": "^4.1.0",
				"json-stable-stringify-without-jsonify": "^1.0.1",
				"levn": "^0.4.1",
				"lodash.merge": "^4.6.2",
				"minimatch": "^3.1.2",
				"natural-compare": "^1.4.0",
				"optionator": "^0.9.3",
				"strip-ansi": "^6.0.1",
				"text-table": "^0.2.0"
			},
			"bin": {
				"eslint": "bin/eslint.js"
			},
			"engines": {
				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
			},
			"funding": {
				"url": "https://opencollective.com/eslint"
			}
		},
		"node_modules/eslint-config-prettier": {
			"version": "8.10.0",
			"resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz",
			"integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==",
			"dev": true,
			"bin": {
				"eslint-config-prettier": "bin/cli.js"
			},
			"peerDependencies": {
				"eslint": ">=7.0.0"
			}
		},
		"node_modules/eslint-import-resolver-node": {
			"version": "0.3.9",
			"resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
			"integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
			"dev": true,
			"dependencies": {
				"debug": "^3.2.7",
				"is-core-module": "^2.13.0",
				"resolve": "^1.22.4"
			}
		},
		"node_modules/eslint-import-resolver-node/node_modules/debug": {
			"version": "3.2.7",
			"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
			"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
			"dev": true,
			"dependencies": {
				"ms": "^2.1.1"
			}
		},
		"node_modules/eslint-module-utils": {
			"version": "2.8.1",
			"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz",
			"integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==",
			"dev": true,
			"dependencies": {
				"debug": "^3.2.7"
			},
			"engines": {
				"node": ">=4"
			},
			"peerDependenciesMeta": {
				"eslint": {
					"optional": true
				}
			}
		},
		"node_modules/eslint-module-utils/node_modules/debug": {
			"version": "3.2.7",
			"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
			"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
			"dev": true,
			"dependencies": {
				"ms": "^2.1.1"
			}
		},
		"node_modules/eslint-plugin-import": {
			"version": "2.29.1",
			"resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz",
			"integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==",
			"dev": true,
			"dependencies": {
				"array-includes": "^3.1.7",
				"array.prototype.findlastindex": "^1.2.3",
				"array.prototype.flat": "^1.3.2",
				"array.prototype.flatmap": "^1.3.2",
				"debug": "^3.2.7",
				"doctrine": "^2.1.0",
				"eslint-import-resolver-node": "^0.3.9",
				"eslint-module-utils": "^2.8.0",
				"hasown": "^2.0.0",
				"is-core-module": "^2.13.1",
				"is-glob": "^4.0.3",
				"minimatch": "^3.1.2",
				"object.fromentries": "^2.0.7",
				"object.groupby": "^1.0.1",
				"object.values": "^1.1.7",
				"semver": "^6.3.1",
				"tsconfig-paths": "^3.15.0"
			},
			"engines": {
				"node": ">=4"
			},
			"peerDependencies": {
				"eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
			}
		},
		"node_modules/eslint-plugin-import/node_modules/brace-expansion": {
			"version": "1.1.11",
			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
			"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
			"dev": true,
			"dependencies": {
				"balanced-match": "^1.0.0",
				"concat-map": "0.0.1"
			}
		},
		"node_modules/eslint-plugin-import/node_modules/debug": {
			"version": "3.2.7",
			"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
			"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
			"dev": true,
			"dependencies": {
				"ms": "^2.1.1"
			}
		},
		"node_modules/eslint-plugin-import/node_modules/doctrine": {
			"version": "2.1.0",
			"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
			"integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
			"dev": true,
			"dependencies": {
				"esutils": "^2.0.2"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/eslint-plugin-import/node_modules/minimatch": {
			"version": "3.1.2",
			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
			"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
			"dev": true,
			"dependencies": {
				"brace-expansion": "^1.1.7"
			},
			"engines": {
				"node": "*"
			}
		},
		"node_modules/eslint-plugin-jest": {
			"version": "27.9.0",
			"resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz",
			"integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==",
			"dev": true,
			"dependencies": {
				"@typescript-eslint/utils": "^5.10.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			},
			"peerDependencies": {
				"@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0",
				"eslint": "^7.0.0 || ^8.0.0",
				"jest": "*"
			},
			"peerDependenciesMeta": {
				"@typescript-eslint/eslint-plugin": {
					"optional": true
				},
				"jest": {
					"optional": true
				}
			}
		},
		"node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/scope-manager": {
			"version": "5.62.0",
			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
			"integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
			"dev": true,
			"dependencies": {
				"@typescript-eslint/types": "5.62.0",
				"@typescript-eslint/visitor-keys": "5.62.0"
			},
			"engines": {
				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/typescript-eslint"
			}
		},
		"node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/types": {
			"version": "5.62.0",
			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
			"integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
			"dev": true,
			"engines": {
				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/typescript-eslint"
			}
		},
		"node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/typescript-estree": {
			"version": "5.62.0",
			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
			"integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
			"dev": true,
			"dependencies": {
				"@typescript-eslint/types": "5.62.0",
				"@typescript-eslint/visitor-keys": "5.62.0",
				"debug": "^4.3.4",
				"globby": "^11.1.0",
				"is-glob": "^4.0.3",
				"semver": "^7.3.7",
				"tsutils": "^3.21.0"
			},
			"engines": {
				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/typescript-eslint"
			},
			"peerDependenciesMeta": {
				"typescript": {
					"optional": true
				}
			}
		},
		"node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/utils": {
			"version": "5.62.0",
			"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz",
			"integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==",
			"dev": true,
			"dependencies": {
				"@eslint-community/eslint-utils": "^4.2.0",
				"@types/json-schema": "^7.0.9",
				"@types/semver": "^7.3.12",
				"@typescript-eslint/scope-manager": "5.62.0",
				"@typescript-eslint/types": "5.62.0",
				"@typescript-eslint/typescript-estree": "5.62.0",
				"eslint-scope": "^5.1.1",
				"semver": "^7.3.7"
			},
			"engines": {
				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/typescript-eslint"
			},
			"peerDependencies": {
				"eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
			}
		},
		"node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/visitor-keys": {
			"version": "5.62.0",
			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
			"integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
			"dev": true,
			"dependencies": {
				"@typescript-eslint/types": "5.62.0",
				"eslint-visitor-keys": "^3.3.0"
			},
			"engines": {
				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/typescript-eslint"
			}
		},
		"node_modules/eslint-plugin-jest/node_modules/eslint-visitor-keys": {
			"version": "3.4.3",
			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
			"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
			"dev": true,
			"engines": {
				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
			},
			"funding": {
				"url": "https://opencollective.com/eslint"
			}
		},
		"node_modules/eslint-plugin-jest/node_modules/lru-cache": {
			"version": "6.0.0",
			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
			"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
			"dev": true,
			"dependencies": {
				"yallist": "^4.0.0"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/eslint-plugin-jest/node_modules/semver": {
			"version": "7.6.0",
			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
			"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
			"dev": true,
			"dependencies": {
				"lru-cache": "^6.0.0"
			},
			"bin": {
				"semver": "bin/semver.js"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/eslint-plugin-jest/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/eslint-plugin-jsdoc": {
			"version": "46.10.1",
			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.10.1.tgz",
			"integrity": "sha512-x8wxIpv00Y50NyweDUpa+58ffgSAI5sqe+zcZh33xphD0AVh+1kqr1ombaTRb7Fhpove1zfUuujlX9DWWBP5ag==",
			"dev": true,
			"dependencies": {
				"@es-joy/jsdoccomment": "~0.41.0",
				"are-docs-informative": "^0.0.2",
				"comment-parser": "1.4.1",
				"debug": "^4.3.4",
				"escape-string-regexp": "^4.0.0",
				"esquery": "^1.5.0",
				"is-builtin-module": "^3.2.1",
				"semver": "^7.5.4",
				"spdx-expression-parse": "^4.0.0"
			},
			"engines": {
				"node": ">=16"
			},
			"peerDependencies": {
				"eslint": "^7.0.0 || ^8.0.0 || ^9.0.0"
			}
		},
		"node_modules/eslint-plugin-jsdoc/node_modules/lru-cache": {
			"version": "6.0.0",
			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
			"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
			"dev": true,
			"dependencies": {
				"yallist": "^4.0.0"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/eslint-plugin-jsdoc/node_modules/semver": {
			"version": "7.6.0",
			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
			"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
			"dev": true,
			"dependencies": {
				"lru-cache": "^6.0.0"
			},
			"bin": {
				"semver": "bin/semver.js"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/eslint-plugin-jsdoc/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/eslint-plugin-jsx-a11y": {
			"version": "6.8.0",
			"resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz",
			"integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==",
			"dev": true,
			"dependencies": {
				"@babel/runtime": "^7.23.2",
				"aria-query": "^5.3.0",
				"array-includes": "^3.1.7",
				"array.prototype.flatmap": "^1.3.2",
				"ast-types-flow": "^0.0.8",
				"axe-core": "=4.7.0",
				"axobject-query": "^3.2.1",
				"damerau-levenshtein": "^1.0.8",
				"emoji-regex": "^9.2.2",
				"es-iterator-helpers": "^1.0.15",
				"hasown": "^2.0.0",
				"jsx-ast-utils": "^3.3.5",
				"language-tags": "^1.0.9",
				"minimatch": "^3.1.2",
				"object.entries": "^1.1.7",
				"object.fromentries": "^2.0.7"
			},
			"engines": {
				"node": ">=4.0"
			},
			"peerDependencies": {
				"eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
			}
		},
		"node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": {
			"version": "1.1.11",
			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
			"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
			"dev": true,
			"dependencies": {
				"balanced-match": "^1.0.0",
				"concat-map": "0.0.1"
			}
		},
		"node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": {
			"version": "3.1.2",
			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
			"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
			"dev": true,
			"dependencies": {
				"brace-expansion": "^1.1.7"
			},
			"engines": {
				"node": "*"
			}
		},
		"node_modules/eslint-plugin-playwright": {
			"version": "0.15.3",
			"resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-0.15.3.tgz",
			"integrity": "sha512-LQMW5y0DLK5Fnpya7JR1oAYL2/7Y9wDiYw6VZqlKqcRGSgjbVKNqxraphk7ra1U3Bb5EK444xMgUlQPbMg2M1g==",
			"dev": true,
			"peerDependencies": {
				"eslint": ">=7",
				"eslint-plugin-jest": ">=25"
			},
			"peerDependenciesMeta": {
				"eslint-plugin-jest": {
					"optional": true
				}
			}
		},
		"node_modules/eslint-plugin-prettier": {
			"version": "5.1.3",
			"resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz",
			"integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==",
			"dev": true,
			"dependencies": {
				"prettier-linter-helpers": "^1.0.0",
				"synckit": "^0.8.6"
			},
			"engines": {
				"node": "^14.18.0 || >=16.0.0"
			},
			"funding": {
				"url": "https://opencollective.com/eslint-plugin-prettier"
			},
			"peerDependencies": {
				"@types/eslint": ">=8.0.0",
				"eslint": ">=8.0.0",
				"eslint-config-prettier": "*",
				"prettier": ">=3.0.0"
			},
			"peerDependenciesMeta": {
				"@types/eslint": {
					"optional": true
				},
				"eslint-config-prettier": {
					"optional": true
				}
			}
		},
		"node_modules/eslint-plugin-react": {
			"version": "7.34.1",
			"resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz",
			"integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==",
			"dev": true,
			"dependencies": {
				"array-includes": "^3.1.7",
				"array.prototype.findlast": "^1.2.4",
				"array.prototype.flatmap": "^1.3.2",
				"array.prototype.toreversed": "^1.1.2",
				"array.prototype.tosorted": "^1.1.3",
				"doctrine": "^2.1.0",
				"es-iterator-helpers": "^1.0.17",
				"estraverse": "^5.3.0",
				"jsx-ast-utils": "^2.4.1 || ^3.0.0",
				"minimatch": "^3.1.2",
				"object.entries": "^1.1.7",
				"object.fromentries": "^2.0.7",
				"object.hasown": "^1.1.3",
				"object.values": "^1.1.7",
				"prop-types": "^15.8.1",
				"resolve": "^2.0.0-next.5",
				"semver": "^6.3.1",
				"string.prototype.matchall": "^4.0.10"
			},
			"engines": {
				"node": ">=4"
			},
			"peerDependencies": {
				"eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
			}
		},
		"node_modules/eslint-plugin-react-hooks": {
			"version": "4.6.2",
			"resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz",
			"integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==",
			"dev": true,
			"engines": {
				"node": ">=10"
			},
			"peerDependencies": {
				"eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
			}
		},
		"node_modules/eslint-plugin-react/node_modules/brace-expansion": {
			"version": "1.1.11",
			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
			"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
			"dev": true,
			"dependencies": {
				"balanced-match": "^1.0.0",
				"concat-map": "0.0.1"
			}
		},
		"node_modules/eslint-plugin-react/node_modules/doctrine": {
			"version": "2.1.0",
			"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
			"integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
			"dev": true,
			"dependencies": {
				"esutils": "^2.0.2"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/eslint-plugin-react/node_modules/minimatch": {
			"version": "3.1.2",
			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
			"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
			"dev": true,
			"dependencies": {
				"brace-expansion": "^1.1.7"
			},
			"engines": {
				"node": "*"
			}
		},
		"node_modules/eslint-plugin-react/node_modules/resolve": {
			"version": "2.0.0-next.5",
			"resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
			"integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
			"dev": true,
			"dependencies": {
				"is-core-module": "^2.13.0",
				"path-parse": "^1.0.7",
				"supports-preserve-symlinks-flag": "^1.0.0"
			},
			"bin": {
				"resolve": "bin/resolve"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/eslint-scope": {
			"version": "5.1.1",
			"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
			"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
			"dev": true,
			"dependencies": {
				"esrecurse": "^4.3.0",
				"estraverse": "^4.1.1"
			},
			"engines": {
				"node": ">=8.0.0"
			}
		},
		"node_modules/eslint-scope/node_modules/estraverse": {
			"version": "4.3.0",
			"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
			"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
			"dev": true,
			"engines": {
				"node": ">=4.0"
			}
		},
		"node_modules/eslint-visitor-keys": {
			"version": "2.1.0",
			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
			"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
			"dev": true,
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/eslint/node_modules/argparse": {
			"version": "2.0.1",
			"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
			"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
			"dev": true
		},
		"node_modules/eslint/node_modules/brace-expansion": {
			"version": "1.1.11",
			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
			"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
			"dev": true,
			"dependencies": {
				"balanced-match": "^1.0.0",
				"concat-map": "0.0.1"
			}
		},
		"node_modules/eslint/node_modules/cross-spawn": {
			"version": "7.0.3",
			"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
			"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
			"dev": true,
			"dependencies": {
				"path-key": "^3.1.0",
				"shebang-command": "^2.0.0",
				"which": "^2.0.1"
			},
			"engines": {
				"node": ">= 8"
			}
		},
		"node_modules/eslint/node_modules/eslint-scope": {
			"version": "7.2.2",
			"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
			"integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
			"dev": true,
			"dependencies": {
				"esrecurse": "^4.3.0",
				"estraverse": "^5.2.0"
			},
			"engines": {
				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
			},
			"funding": {
				"url": "https://opencollective.com/eslint"
			}
		},
		"node_modules/eslint/node_modules/eslint-visitor-keys": {
			"version": "3.4.3",
			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
			"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
			"dev": true,
			"engines": {
				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
			},
			"funding": {
				"url": "https://opencollective.com/eslint"
			}
		},
		"node_modules/eslint/node_modules/find-up": {
			"version": "5.0.0",
			"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
			"integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
			"dev": true,
			"dependencies": {
				"locate-path": "^6.0.0",
				"path-exists": "^4.0.0"
			},
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/eslint/node_modules/globals": {
			"version": "13.24.0",
			"resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
			"integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
			"dev": true,
			"dependencies": {
				"type-fest": "^0.20.2"
			},
			"engines": {
				"node": ">=8"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/eslint/node_modules/js-yaml": {
			"version": "4.1.0",
			"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
			"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
			"dev": true,
			"dependencies": {
				"argparse": "^2.0.1"
			},
			"bin": {
				"js-yaml": "bin/js-yaml.js"
			}
		},
		"node_modules/eslint/node_modules/locate-path": {
			"version": "6.0.0",
			"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
			"integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
			"dev": true,
			"dependencies": {
				"p-locate": "^5.0.0"
			},
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/eslint/node_modules/minimatch": {
			"version": "3.1.2",
			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
			"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
			"dev": true,
			"dependencies": {
				"brace-expansion": "^1.1.7"
			},
			"engines": {
				"node": "*"
			}
		},
		"node_modules/eslint/node_modules/p-locate": {
			"version": "5.0.0",
			"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
			"integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
			"dev": true,
			"dependencies": {
				"p-limit": "^3.0.2"
			},
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/eslint/node_modules/shebang-command": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
			"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
			"dev": true,
			"dependencies": {
				"shebang-regex": "^3.0.0"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/eslint/node_modules/shebang-regex": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
			"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/eslint/node_modules/type-fest": {
			"version": "0.20.2",
			"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
			"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
			"dev": true,
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/eslint/node_modules/which": {
			"version": "2.0.2",
			"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
			"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
			"dev": true,
			"dependencies": {
				"isexe": "^2.0.0"
			},
			"bin": {
				"node-which": "bin/node-which"
			},
			"engines": {
				"node": ">= 8"
			}
		},
		"node_modules/espree": {
			"version": "9.6.1",
			"resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
			"integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
			"dev": true,
			"dependencies": {
				"acorn": "^8.9.0",
				"acorn-jsx": "^5.3.2",
				"eslint-visitor-keys": "^3.4.1"
			},
			"engines": {
				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
			},
			"funding": {
				"url": "https://opencollective.com/eslint"
			}
		},
		"node_modules/espree/node_modules/eslint-visitor-keys": {
			"version": "3.4.3",
			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
			"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
			"dev": true,
			"engines": {
				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
			},
			"funding": {
				"url": "https://opencollective.com/eslint"
			}
		},
		"node_modules/esprima": {
			"version": "4.0.1",
			"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
			"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
			"dev": true,
			"bin": {
				"esparse": "bin/esparse.js",
				"esvalidate": "bin/esvalidate.js"
			},
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/esquery": {
			"version": "1.5.0",
			"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
			"integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
			"dev": true,
			"dependencies": {
				"estraverse": "^5.1.0"
			},
			"engines": {
				"node": ">=0.10"
			}
		},
		"node_modules/esrecurse": {
			"version": "4.3.0",
			"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
			"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
			"dev": true,
			"dependencies": {
				"estraverse": "^5.2.0"
			},
			"engines": {
				"node": ">=4.0"
			}
		},
		"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/esutils": {
			"version": "2.0.3",
			"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
			"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/etag": {
			"version": "1.8.1",
			"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
			"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
			"dev": true,
			"engines": {
				"node": ">= 0.6"
			}
		},
		"node_modules/eventemitter3": {
			"version": "4.0.7",
			"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
			"integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
			"dev": true
		},
		"node_modules/events": {
			"version": "3.3.0",
			"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
			"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
			"dev": true,
			"engines": {
				"node": ">=0.8.x"
			}
		},
		"node_modules/execa": {
			"version": "5.1.1",
			"resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
			"integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
			"dev": true,
			"dependencies": {
				"cross-spawn": "^7.0.3",
				"get-stream": "^6.0.0",
				"human-signals": "^2.1.0",
				"is-stream": "^2.0.0",
				"merge-stream": "^2.0.0",
				"npm-run-path": "^4.0.1",
				"onetime": "^5.1.2",
				"signal-exit": "^3.0.3",
				"strip-final-newline": "^2.0.0"
			},
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/sindresorhus/execa?sponsor=1"
			}
		},
		"node_modules/execa/node_modules/cross-spawn": {
			"version": "7.0.3",
			"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
			"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
			"dev": true,
			"dependencies": {
				"path-key": "^3.1.0",
				"shebang-command": "^2.0.0",
				"which": "^2.0.1"
			},
			"engines": {
				"node": ">= 8"
			}
		},
		"node_modules/execa/node_modules/shebang-command": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
			"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
			"dev": true,
			"dependencies": {
				"shebang-regex": "^3.0.0"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/execa/node_modules/shebang-regex": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
			"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/execa/node_modules/which": {
			"version": "2.0.2",
			"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
			"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
			"dev": true,
			"dependencies": {
				"isexe": "^2.0.0"
			},
			"bin": {
				"node-which": "bin/node-which"
			},
			"engines": {
				"node": ">= 8"
			}
		},
		"node_modules/exit": {
			"version": "0.1.2",
			"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
			"integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
			"dev": true,
			"engines": {
				"node": ">= 0.8.0"
			}
		},
		"node_modules/expand-tilde": {
			"version": "1.2.2",
			"resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz",
			"integrity": "sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q==",
			"dev": true,
			"dependencies": {
				"os-homedir": "^1.0.1"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/expect": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
			"integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
			"dev": true,
			"dependencies": {
				"@jest/expect-utils": "^29.7.0",
				"jest-get-type": "^29.6.3",
				"jest-matcher-utils": "^29.7.0",
				"jest-message-util": "^29.7.0",
				"jest-util": "^29.7.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/expect-puppeteer": {
			"version": "4.4.0",
			"resolved": "https://registry.npmjs.org/expect-puppeteer/-/expect-puppeteer-4.4.0.tgz",
			"integrity": "sha512-6Ey4Xy2xvmuQu7z7YQtMsaMV0EHJRpVxIDOd5GRrm04/I3nkTKIutELfECsLp6le+b3SSa3cXhPiw6PgqzxYWA==",
			"dev": true
		},
		"node_modules/express": {
			"version": "4.19.2",
			"resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
			"integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
			"dev": true,
			"dependencies": {
				"accepts": "~1.3.8",
				"array-flatten": "1.1.1",
				"body-parser": "1.20.2",
				"content-disposition": "0.5.4",
				"content-type": "~1.0.4",
				"cookie": "0.6.0",
				"cookie-signature": "1.0.6",
				"debug": "2.6.9",
				"depd": "2.0.0",
				"encodeurl": "~1.0.2",
				"escape-html": "~1.0.3",
				"etag": "~1.8.1",
				"finalhandler": "1.2.0",
				"fresh": "0.5.2",
				"http-errors": "2.0.0",
				"merge-descriptors": "1.0.1",
				"methods": "~1.1.2",
				"on-finished": "2.4.1",
				"parseurl": "~1.3.3",
				"path-to-regexp": "0.1.7",
				"proxy-addr": "~2.0.7",
				"qs": "6.11.0",
				"range-parser": "~1.2.1",
				"safe-buffer": "5.2.1",
				"send": "0.18.0",
				"serve-static": "1.15.0",
				"setprototypeof": "1.2.0",
				"statuses": "2.0.1",
				"type-is": "~1.6.18",
				"utils-merge": "1.0.1",
				"vary": "~1.1.2"
			},
			"engines": {
				"node": ">= 0.10.0"
			}
		},
		"node_modules/express/node_modules/cookie": {
			"version": "0.6.0",
			"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
			"integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
			"dev": true,
			"engines": {
				"node": ">= 0.6"
			}
		},
		"node_modules/express/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/express/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/extract-zip": {
			"version": "2.0.1",
			"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
			"integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
			"dev": true,
			"dependencies": {
				"debug": "^4.1.1",
				"get-stream": "^5.1.0",
				"yauzl": "^2.10.0"
			},
			"bin": {
				"extract-zip": "cli.js"
			},
			"engines": {
				"node": ">= 10.17.0"
			},
			"optionalDependencies": {
				"@types/yauzl": "^2.9.1"
			}
		},
		"node_modules/extract-zip/node_modules/get-stream": {
			"version": "5.2.0",
			"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
			"integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
			"dev": true,
			"dependencies": {
				"pump": "^3.0.0"
			},
			"engines": {
				"node": ">=8"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/fast-deep-equal": {
			"version": "3.1.3",
			"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
			"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
			"dev": true
		},
		"node_modules/fast-diff": {
			"version": "1.3.0",
			"resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
			"integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
			"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-glob": {
			"version": "3.3.2",
			"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
			"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
			"dev": true,
			"dependencies": {
				"@nodelib/fs.stat": "^2.0.2",
				"@nodelib/fs.walk": "^1.2.3",
				"glob-parent": "^5.1.2",
				"merge2": "^1.3.0",
				"micromatch": "^4.0.4"
			},
			"engines": {
				"node": ">=8.6.0"
			}
		},
		"node_modules/fast-glob/node_modules/glob-parent": {
			"version": "5.1.2",
			"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
			"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
			"dev": true,
			"dependencies": {
				"is-glob": "^4.0.1"
			},
			"engines": {
				"node": ">= 6"
			}
		},
		"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",
			"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
			"dev": true
		},
		"node_modules/fast-levenshtein": {
			"version": "2.0.6",
			"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
			"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
			"dev": true
		},
		"node_modules/fastest-levenshtein": {
			"version": "1.0.16",
			"resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
			"integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
			"dev": true,
			"engines": {
				"node": ">= 4.9.1"
			}
		},
		"node_modules/fastq": {
			"version": "1.17.1",
			"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
			"integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
			"dev": true,
			"dependencies": {
				"reusify": "^1.0.4"
			}
		},
		"node_modules/faye-websocket": {
			"version": "0.11.4",
			"resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz",
			"integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==",
			"dev": true,
			"dependencies": {
				"websocket-driver": ">=0.5.1"
			},
			"engines": {
				"node": ">=0.8.0"
			}
		},
		"node_modules/fb-watchman": {
			"version": "2.0.2",
			"resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
			"integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
			"dev": true,
			"dependencies": {
				"bser": "2.1.1"
			}
		},
		"node_modules/fd-slicer": {
			"version": "1.1.0",
			"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
			"integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
			"dev": true,
			"dependencies": {
				"pend": "~1.2.0"
			}
		},
		"node_modules/file-entry-cache": {
			"version": "6.0.1",
			"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
			"integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
			"dev": true,
			"dependencies": {
				"flat-cache": "^3.0.4"
			},
			"engines": {
				"node": "^10.12.0 || >=12.0.0"
			}
		},
		"node_modules/filename-reserved-regex": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
			"integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==",
			"dev": true,
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/filenamify": {
			"version": "4.3.0",
			"resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz",
			"integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==",
			"dev": true,
			"dependencies": {
				"filename-reserved-regex": "^2.0.0",
				"strip-outer": "^1.0.1",
				"trim-repeated": "^1.0.0"
			},
			"engines": {
				"node": ">=8"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/fill-range": {
			"version": "7.0.1",
			"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
			"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
			"dev": true,
			"dependencies": {
				"to-regex-range": "^5.0.1"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/finalhandler": {
			"version": "1.2.0",
			"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
			"integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
			"dev": true,
			"dependencies": {
				"debug": "2.6.9",
				"encodeurl": "~1.0.2",
				"escape-html": "~1.0.3",
				"on-finished": "2.4.1",
				"parseurl": "~1.3.3",
				"statuses": "2.0.1",
				"unpipe": "~1.0.0"
			},
			"engines": {
				"node": ">= 0.8"
			}
		},
		"node_modules/finalhandler/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/finalhandler/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/find-cache-dir": {
			"version": "3.3.2",
			"resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
			"integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
			"dev": true,
			"dependencies": {
				"commondir": "^1.0.1",
				"make-dir": "^3.0.2",
				"pkg-dir": "^4.1.0"
			},
			"engines": {
				"node": ">=8"
			},
			"funding": {
				"url": "https://github.com/avajs/find-cache-dir?sponsor=1"
			}
		},
		"node_modules/find-file-up": {
			"version": "0.1.3",
			"resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-0.1.3.tgz",
			"integrity": "sha512-mBxmNbVyjg1LQIIpgO8hN+ybWBgDQK8qjht+EbrTCGmmPV/sc7RF1i9stPTD6bpvXZywBdrwRYxhSdJv867L6A==",
			"dev": true,
			"dependencies": {
				"fs-exists-sync": "^0.1.0",
				"resolve-dir": "^0.1.0"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/find-parent-dir": {
			"version": "0.3.1",
			"resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.1.tgz",
			"integrity": "sha512-o4UcykWV/XN9wm+jMEtWLPlV8RXCZnMhQI6F6OdHeSez7iiJWePw8ijOlskJZMsaQoGR/b7dH6lO02HhaTN7+A==",
			"dev": true
		},
		"node_modules/find-pkg": {
			"version": "0.1.2",
			"resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-0.1.2.tgz",
			"integrity": "sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw==",
			"dev": true,
			"dependencies": {
				"find-file-up": "^0.1.2"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/find-process": {
			"version": "1.4.7",
			"resolved": "https://registry.npmjs.org/find-process/-/find-process-1.4.7.tgz",
			"integrity": "sha512-/U4CYp1214Xrp3u3Fqr9yNynUrr5Le4y0SsJh2lMDDSbpwYSz3M2SMWQC+wqcx79cN8PQtHQIL8KnuY9M66fdg==",
			"dev": true,
			"dependencies": {
				"chalk": "^4.0.0",
				"commander": "^5.1.0",
				"debug": "^4.1.1"
			},
			"bin": {
				"find-process": "bin/find-process.js"
			}
		},
		"node_modules/find-up": {
			"version": "4.1.0",
			"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
			"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
			"dev": true,
			"dependencies": {
				"locate-path": "^5.0.0",
				"path-exists": "^4.0.0"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/flat": {
			"version": "5.0.2",
			"resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
			"integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
			"dev": true,
			"bin": {
				"flat": "cli.js"
			}
		},
		"node_modules/flat-cache": {
			"version": "3.2.0",
			"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
			"integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
			"dev": true,
			"dependencies": {
				"flatted": "^3.2.9",
				"keyv": "^4.5.3",
				"rimraf": "^3.0.2"
			},
			"engines": {
				"node": "^10.12.0 || >=12.0.0"
			}
		},
		"node_modules/flat-cache/node_modules/rimraf": {
			"version": "3.0.2",
			"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
			"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
			"dev": true,
			"dependencies": {
				"glob": "^7.1.3"
			},
			"bin": {
				"rimraf": "bin.js"
			},
			"funding": {
				"url": "https://github.com/sponsors/isaacs"
			}
		},
		"node_modules/flatted": {
			"version": "3.3.1",
			"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
			"integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
			"dev": true
		},
		"node_modules/follow-redirects": {
			"version": "1.15.6",
			"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
			"integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
			"dev": true,
			"funding": [
				{
					"type": "individual",
					"url": "https://github.com/sponsors/RubenVerborgh"
				}
			],
			"engines": {
				"node": ">=4.0"
			},
			"peerDependenciesMeta": {
				"debug": {
					"optional": true
				}
			}
		},
		"node_modules/for-each": {
			"version": "0.3.3",
			"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
			"integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
			"dev": true,
			"dependencies": {
				"is-callable": "^1.1.3"
			}
		},
		"node_modules/for-in": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
			"integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/for-own": {
			"version": "0.1.5",
			"resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
			"integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==",
			"dev": true,
			"dependencies": {
				"for-in": "^1.0.1"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/form-data": {
			"version": "4.0.0",
			"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
			"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
			"dev": true,
			"dependencies": {
				"asynckit": "^0.4.0",
				"combined-stream": "^1.0.8",
				"mime-types": "^2.1.12"
			},
			"engines": {
				"node": ">= 6"
			}
		},
		"node_modules/forwarded": {
			"version": "0.2.0",
			"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
			"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
			"dev": true,
			"engines": {
				"node": ">= 0.6"
			}
		},
		"node_modules/fraction.js": {
			"version": "4.3.7",
			"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
			"integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
			"dev": true,
			"engines": {
				"node": "*"
			},
			"funding": {
				"type": "patreon",
				"url": "https://github.com/sponsors/rawify"
			}
		},
		"node_modules/fresh": {
			"version": "0.5.2",
			"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
			"integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
			"dev": true,
			"engines": {
				"node": ">= 0.6"
			}
		},
		"node_modules/fs-constants": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
			"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
			"dev": true
		},
		"node_modules/fs-exists-sync": {
			"version": "0.1.0",
			"resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz",
			"integrity": "sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"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/fs-extra/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/fs-monkey": {
			"version": "1.0.5",
			"resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz",
			"integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==",
			"dev": true
		},
		"node_modules/fs.realpath": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
			"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
			"dev": true
		},
		"node_modules/fsevents": {
			"version": "2.3.3",
			"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
			"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
			"dev": true,
			"hasInstallScript": true,
			"optional": true,
			"os": [
				"darwin"
			],
			"engines": {
				"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
			}
		},
		"node_modules/function-bind": {
			"version": "1.1.2",
			"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
			"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
			"dev": true,
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/function.prototype.name": {
			"version": "1.1.6",
			"resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
			"integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.2",
				"define-properties": "^1.2.0",
				"es-abstract": "^1.22.1",
				"functions-have-names": "^1.2.3"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/functions-have-names": {
			"version": "1.2.3",
			"resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
			"integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
			"dev": true,
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/gensync": {
			"version": "1.0.0-beta.2",
			"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
			"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
			"dev": true,
			"engines": {
				"node": ">=6.9.0"
			}
		},
		"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.2.4",
			"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
			"integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
			"dev": true,
			"dependencies": {
				"es-errors": "^1.3.0",
				"function-bind": "^1.1.2",
				"has-proto": "^1.0.1",
				"has-symbols": "^1.0.3",
				"hasown": "^2.0.0"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/get-package-type": {
			"version": "0.1.0",
			"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
			"integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
			"dev": true,
			"engines": {
				"node": ">=8.0.0"
			}
		},
		"node_modules/get-port": {
			"version": "5.1.1",
			"resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz",
			"integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==",
			"dev": true,
			"engines": {
				"node": ">=8"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/get-stdin": {
			"version": "9.0.0",
			"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz",
			"integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==",
			"dev": true,
			"engines": {
				"node": ">=12"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/get-stream": {
			"version": "6.0.1",
			"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
			"integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
			"dev": true,
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/get-symbol-description": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
			"integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.5",
				"es-errors": "^1.3.0",
				"get-intrinsic": "^1.2.4"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"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/gettext-parser": {
			"version": "1.4.0",
			"resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.4.0.tgz",
			"integrity": "sha512-sedZYLHlHeBop/gZ1jdg59hlUEcpcZJofLq2JFwJT1zTqAU3l2wFv6IsuwFHGqbiT9DWzMUW4/em2+hspnmMMA==",
			"dev": true,
			"dependencies": {
				"encoding": "^0.1.12",
				"safe-buffer": "^5.1.1"
			}
		},
		"node_modules/glob": {
			"version": "7.2.3",
			"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
			"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
			"dev": true,
			"dependencies": {
				"fs.realpath": "^1.0.0",
				"inflight": "^1.0.4",
				"inherits": "2",
				"minimatch": "^3.1.1",
				"once": "^1.3.0",
				"path-is-absolute": "^1.0.0"
			},
			"engines": {
				"node": "*"
			},
			"funding": {
				"url": "https://github.com/sponsors/isaacs"
			}
		},
		"node_modules/glob-parent": {
			"version": "6.0.2",
			"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
			"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
			"dev": true,
			"dependencies": {
				"is-glob": "^4.0.3"
			},
			"engines": {
				"node": ">=10.13.0"
			}
		},
		"node_modules/glob-to-regexp": {
			"version": "0.4.1",
			"resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
			"integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
			"dev": true
		},
		"node_modules/glob/node_modules/brace-expansion": {
			"version": "1.1.11",
			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
			"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
			"dev": true,
			"dependencies": {
				"balanced-match": "^1.0.0",
				"concat-map": "0.0.1"
			}
		},
		"node_modules/glob/node_modules/minimatch": {
			"version": "3.1.2",
			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
			"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
			"dev": true,
			"dependencies": {
				"brace-expansion": "^1.1.7"
			},
			"engines": {
				"node": "*"
			}
		},
		"node_modules/global-modules": {
			"version": "0.2.3",
			"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz",
			"integrity": "sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==",
			"dev": true,
			"dependencies": {
				"global-prefix": "^0.1.4",
				"is-windows": "^0.2.0"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/global-prefix": {
			"version": "0.1.5",
			"resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz",
			"integrity": "sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==",
			"dev": true,
			"dependencies": {
				"homedir-polyfill": "^1.0.0",
				"ini": "^1.3.4",
				"is-windows": "^0.2.0",
				"which": "^1.2.12"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/globals": {
			"version": "11.12.0",
			"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
			"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
			"dev": true,
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/globalthis": {
			"version": "1.0.3",
			"resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
			"integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
			"dev": true,
			"dependencies": {
				"define-properties": "^1.1.3"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/globby": {
			"version": "11.1.0",
			"resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
			"integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
			"dev": true,
			"dependencies": {
				"array-union": "^2.1.0",
				"dir-glob": "^3.0.1",
				"fast-glob": "^3.2.9",
				"ignore": "^5.2.0",
				"merge2": "^1.4.1",
				"slash": "^3.0.0"
			},
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/globjoin": {
			"version": "0.1.4",
			"resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz",
			"integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==",
			"dev": true
		},
		"node_modules/gopd": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
			"integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
			"dev": true,
			"dependencies": {
				"get-intrinsic": "^1.1.3"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/graceful-fs": {
			"version": "4.2.11",
			"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
			"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
			"dev": true
		},
		"node_modules/graphemer": {
			"version": "1.4.0",
			"resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
			"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
			"dev": true
		},
		"node_modules/gzip-size": {
			"version": "6.0.0",
			"resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz",
			"integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==",
			"dev": true,
			"dependencies": {
				"duplexer": "^0.1.2"
			},
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/handle-thing": {
			"version": "2.0.1",
			"resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
			"integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==",
			"dev": true
		},
		"node_modules/hard-rejection": {
			"version": "2.1.0",
			"resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
			"integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
			"dev": true,
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/has-bigints": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
			"integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
			"dev": true,
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/has-flag": {
			"version": "4.0.0",
			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/has-property-descriptors": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
			"integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
			"dev": true,
			"dependencies": {
				"es-define-property": "^1.0.0"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/has-proto": {
			"version": "1.0.3",
			"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
			"integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
			"dev": true,
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/has-symbols": {
			"version": "1.0.3",
			"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
			"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
			"dev": true,
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/has-tostringtag": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
			"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
			"dev": true,
			"dependencies": {
				"has-symbols": "^1.0.3"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/hasown": {
			"version": "2.0.2",
			"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
			"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
			"dev": true,
			"dependencies": {
				"function-bind": "^1.1.2"
			},
			"engines": {
				"node": ">= 0.4"
			}
		},
		"node_modules/header-case": {
			"version": "2.0.4",
			"resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz",
			"integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==",
			"dev": true,
			"dependencies": {
				"capital-case": "^1.0.4",
				"tslib": "^2.0.3"
			}
		},
		"node_modules/homedir-polyfill": {
			"version": "1.0.3",
			"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
			"integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
			"dev": true,
			"dependencies": {
				"parse-passwd": "^1.0.0"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/hosted-git-info": {
			"version": "4.1.0",
			"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
			"integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
			"dev": true,
			"dependencies": {
				"lru-cache": "^6.0.0"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/hosted-git-info/node_modules/lru-cache": {
			"version": "6.0.0",
			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
			"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
			"dev": true,
			"dependencies": {
				"yallist": "^4.0.0"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/hosted-git-info/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/hpack.js": {
			"version": "2.1.6",
			"resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
			"integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==",
			"dev": true,
			"dependencies": {
				"inherits": "^2.0.1",
				"obuf": "^1.0.0",
				"readable-stream": "^2.0.1",
				"wbuf": "^1.1.0"
			}
		},
		"node_modules/hpack.js/node_modules/isarray": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
			"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
			"dev": true
		},
		"node_modules/hpack.js/node_modules/readable-stream": {
			"version": "2.3.8",
			"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
			"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
			"dev": true,
			"dependencies": {
				"core-util-is": "~1.0.0",
				"inherits": "~2.0.3",
				"isarray": "~1.0.0",
				"process-nextick-args": "~2.0.0",
				"safe-buffer": "~5.1.1",
				"string_decoder": "~1.1.1",
				"util-deprecate": "~1.0.1"
			}
		},
		"node_modules/hpack.js/node_modules/safe-buffer": {
			"version": "5.1.2",
			"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
			"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
			"dev": true
		},
		"node_modules/hpack.js/node_modules/string_decoder": {
			"version": "1.1.1",
			"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
			"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
			"dev": true,
			"dependencies": {
				"safe-buffer": "~5.1.0"
			}
		},
		"node_modules/html-encoding-sniffer": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
			"integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
			"dev": true,
			"dependencies": {
				"whatwg-encoding": "^2.0.0"
			},
			"engines": {
				"node": ">=12"
			}
		},
		"node_modules/html-entities": {
			"version": "2.5.2",
			"resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz",
			"integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==",
			"dev": true,
			"funding": [
				{
					"type": "github",
					"url": "https://github.com/sponsors/mdevils"
				},
				{
					"type": "patreon",
					"url": "https://patreon.com/mdevils"
				}
			]
		},
		"node_modules/html-escaper": {
			"version": "2.0.2",
			"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
			"integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
			"dev": true
		},
		"node_modules/html-tags": {
			"version": "3.3.1",
			"resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz",
			"integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==",
			"dev": true,
			"engines": {
				"node": ">=8"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/http-deceiver": {
			"version": "1.2.7",
			"resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
			"integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==",
			"dev": true
		},
		"node_modules/http-errors": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
			"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
			"dev": true,
			"dependencies": {
				"depd": "2.0.0",
				"inherits": "2.0.4",
				"setprototypeof": "1.2.0",
				"statuses": "2.0.1",
				"toidentifier": "1.0.1"
			},
			"engines": {
				"node": ">= 0.8"
			}
		},
		"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-parser-js": {
			"version": "0.5.8",
			"resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz",
			"integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==",
			"dev": true
		},
		"node_modules/http-proxy": {
			"version": "1.18.1",
			"resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
			"integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
			"dev": true,
			"dependencies": {
				"eventemitter3": "^4.0.0",
				"follow-redirects": "^1.0.0",
				"requires-port": "^1.0.0"
			},
			"engines": {
				"node": ">=8.0.0"
			}
		},
		"node_modules/http-proxy-agent": {
			"version": "5.0.0",
			"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
			"integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
			"dev": true,
			"dependencies": {
				"@tootallnate/once": "2",
				"agent-base": "6",
				"debug": "4"
			},
			"engines": {
				"node": ">= 6"
			}
		},
		"node_modules/http-proxy-middleware": {
			"version": "2.0.6",
			"resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
			"integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
			"dev": true,
			"dependencies": {
				"@types/http-proxy": "^1.17.8",
				"http-proxy": "^1.18.1",
				"is-glob": "^4.0.1",
				"is-plain-obj": "^3.0.0",
				"micromatch": "^4.0.2"
			},
			"engines": {
				"node": ">=12.0.0"
			},
			"peerDependencies": {
				"@types/express": "^4.17.13"
			},
			"peerDependenciesMeta": {
				"@types/express": {
					"optional": true
				}
			}
		},
		"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": "2.1.0",
			"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
			"integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
			"dev": true,
			"engines": {
				"node": ">=10.17.0"
			}
		},
		"node_modules/iconv-lite": {
			"version": "0.6.3",
			"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
			"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
			"dev": true,
			"dependencies": {
				"safer-buffer": ">= 2.1.2 < 3.0.0"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/icss-utils": {
			"version": "5.1.0",
			"resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
			"integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
			"dev": true,
			"engines": {
				"node": "^10 || ^12 || >= 14"
			},
			"peerDependencies": {
				"postcss": "^8.1.0"
			}
		},
		"node_modules/ieee754": {
			"version": "1.2.1",
			"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
			"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
			"dev": true,
			"funding": [
				{
					"type": "github",
					"url": "https://github.com/sponsors/feross"
				},
				{
					"type": "patreon",
					"url": "https://www.patreon.com/feross"
				},
				{
					"type": "consulting",
					"url": "https://feross.org/support"
				}
			]
		},
		"node_modules/ignore": {
			"version": "5.3.1",
			"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
			"integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
			"dev": true,
			"engines": {
				"node": ">= 4"
			}
		},
		"node_modules/ignore-walk": {
			"version": "4.0.1",
			"resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz",
			"integrity": "sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==",
			"dev": true,
			"dependencies": {
				"minimatch": "^3.0.4"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/ignore-walk/node_modules/brace-expansion": {
			"version": "1.1.11",
			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
			"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
			"dev": true,
			"dependencies": {
				"balanced-match": "^1.0.0",
				"concat-map": "0.0.1"
			}
		},
		"node_modules/ignore-walk/node_modules/minimatch": {
			"version": "3.1.2",
			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
			"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
			"dev": true,
			"dependencies": {
				"brace-expansion": "^1.1.7"
			},
			"engines": {
				"node": "*"
			}
		},
		"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/immutable": {
			"version": "4.3.5",
			"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz",
			"integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==",
			"dev": true
		},
		"node_modules/import-fresh": {
			"version": "3.3.0",
			"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
			"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
			"dev": true,
			"dependencies": {
				"parent-module": "^1.0.0",
				"resolve-from": "^4.0.0"
			},
			"engines": {
				"node": ">=6"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/import-fresh/node_modules/resolve-from": {
			"version": "4.0.0",
			"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
			"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
			"dev": true,
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/import-lazy": {
			"version": "4.0.0",
			"resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz",
			"integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/import-local": {
			"version": "3.1.0",
			"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
			"integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
			"dev": true,
			"dependencies": {
				"pkg-dir": "^4.2.0",
				"resolve-cwd": "^3.0.0"
			},
			"bin": {
				"import-local-fixture": "fixtures/cli.js"
			},
			"engines": {
				"node": ">=8"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/imurmurhash": {
			"version": "0.1.4",
			"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
			"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
			"dev": true,
			"engines": {
				"node": ">=0.8.19"
			}
		},
		"node_modules/indent-string": {
			"version": "4.0.0",
			"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
			"integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/inflight": {
			"version": "1.0.6",
			"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
			"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
			"dev": true,
			"dependencies": {
				"once": "^1.3.0",
				"wrappy": "1"
			}
		},
		"node_modules/inherits": {
			"version": "2.0.4",
			"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
			"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
			"dev": true
		},
		"node_modules/ini": {
			"version": "1.3.8",
			"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
			"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
			"dev": true
		},
		"node_modules/internal-slot": {
			"version": "1.0.7",
			"resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
			"integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
			"dev": true,
			"dependencies": {
				"es-errors": "^1.3.0",
				"hasown": "^2.0.0",
				"side-channel": "^1.0.4"
			},
			"engines": {
				"node": ">= 0.4"
			}
		},
		"node_modules/interpret": {
			"version": "3.1.1",
			"resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
			"integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==",
			"dev": true,
			"engines": {
				"node": ">=10.13.0"
			}
		},
		"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/ipaddr.js": {
			"version": "2.2.0",
			"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz",
			"integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==",
			"dev": true,
			"engines": {
				"node": ">= 10"
			}
		},
		"node_modules/irregular-plurals": {
			"version": "3.5.0",
			"resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.5.0.tgz",
			"integrity": "sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/is-array-buffer": {
			"version": "3.0.4",
			"resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
			"integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.2",
				"get-intrinsic": "^1.2.1"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/is-arrayish": {
			"version": "0.2.1",
			"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
			"integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
			"dev": true
		},
		"node_modules/is-async-function": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz",
			"integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==",
			"dev": true,
			"dependencies": {
				"has-tostringtag": "^1.0.0"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/is-bigint": {
			"version": "1.0.4",
			"resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
			"integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
			"dev": true,
			"dependencies": {
				"has-bigints": "^1.0.1"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/is-binary-path": {
			"version": "2.1.0",
			"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
			"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
			"dev": true,
			"dependencies": {
				"binary-extensions": "^2.0.0"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/is-boolean-object": {
			"version": "1.1.2",
			"resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
			"integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.2",
				"has-tostringtag": "^1.0.0"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/is-buffer": {
			"version": "1.1.6",
			"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
			"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
			"dev": true
		},
		"node_modules/is-builtin-module": {
			"version": "3.2.1",
			"resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
			"integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
			"dev": true,
			"dependencies": {
				"builtin-modules": "^3.3.0"
			},
			"engines": {
				"node": ">=6"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/is-callable": {
			"version": "1.2.7",
			"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
			"integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
			"dev": true,
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/is-core-module": {
			"version": "2.13.1",
			"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
			"integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
			"dev": true,
			"dependencies": {
				"hasown": "^2.0.0"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/is-data-view": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
			"integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
			"dev": true,
			"dependencies": {
				"is-typed-array": "^1.1.13"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/is-date-object": {
			"version": "1.0.5",
			"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
			"integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
			"dev": true,
			"dependencies": {
				"has-tostringtag": "^1.0.0"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"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-extendable": {
			"version": "0.1.1",
			"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
			"integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/is-extglob": {
			"version": "2.1.1",
			"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
			"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/is-finalizationregistry": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz",
			"integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.2"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/is-fullwidth-code-point": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
			"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/is-generator-fn": {
			"version": "2.1.0",
			"resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
			"integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
			"dev": true,
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/is-generator-function": {
			"version": "1.0.10",
			"resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
			"integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
			"dev": true,
			"dependencies": {
				"has-tostringtag": "^1.0.0"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/is-glob": {
			"version": "4.0.3",
			"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
			"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
			"dev": true,
			"dependencies": {
				"is-extglob": "^2.1.1"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/is-map": {
			"version": "2.0.3",
			"resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
			"integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
			"dev": true,
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/is-negative-zero": {
			"version": "2.0.3",
			"resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
			"integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
			"dev": true,
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/is-number": {
			"version": "7.0.0",
			"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
			"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
			"dev": true,
			"engines": {
				"node": ">=0.12.0"
			}
		},
		"node_modules/is-number-object": {
			"version": "1.0.7",
			"resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
			"integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
			"dev": true,
			"dependencies": {
				"has-tostringtag": "^1.0.0"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"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-cwd": {
			"version": "2.2.0",
			"resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
			"integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
			"dev": true,
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/is-path-in-cwd": {
			"version": "2.1.0",
			"resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz",
			"integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
			"dev": true,
			"dependencies": {
				"is-path-inside": "^2.1.0"
			},
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/is-path-in-cwd/node_modules/is-path-inside": {
			"version": "2.1.0",
			"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
			"integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
			"dev": true,
			"dependencies": {
				"path-is-inside": "^1.0.2"
			},
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/is-path-inside": {
			"version": "3.0.3",
			"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
			"integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/is-plain-obj": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
			"integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
			"dev": true,
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/is-plain-object": {
			"version": "2.0.4",
			"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
			"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
			"dev": true,
			"dependencies": {
				"isobject": "^3.0.1"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/is-potential-custom-element-name": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
			"integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
			"dev": true
		},
		"node_modules/is-regex": {
			"version": "1.1.4",
			"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
			"integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.2",
				"has-tostringtag": "^1.0.0"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/is-set": {
			"version": "2.0.3",
			"resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
			"integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
			"dev": true,
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/is-shared-array-buffer": {
			"version": "1.0.3",
			"resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
			"integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.7"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/is-stream": {
			"version": "2.0.1",
			"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
			"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
			"dev": true,
			"engines": {
				"node": ">=8"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/is-string": {
			"version": "1.0.7",
			"resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
			"integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
			"dev": true,
			"dependencies": {
				"has-tostringtag": "^1.0.0"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/is-symbol": {
			"version": "1.0.4",
			"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
			"integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
			"dev": true,
			"dependencies": {
				"has-symbols": "^1.0.2"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/is-typed-array": {
			"version": "1.1.13",
			"resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
			"integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
			"dev": true,
			"dependencies": {
				"which-typed-array": "^1.1.14"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/is-typedarray": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
			"integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
			"dev": true
		},
		"node_modules/is-unicode-supported": {
			"version": "0.1.0",
			"resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
			"integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
			"dev": true,
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/is-weakmap": {
			"version": "2.0.2",
			"resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
			"integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
			"dev": true,
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/is-weakref": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
			"integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.2"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/is-weakset": {
			"version": "2.0.3",
			"resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz",
			"integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.7",
				"get-intrinsic": "^1.2.4"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/is-windows": {
			"version": "0.2.0",
			"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz",
			"integrity": "sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"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/isarray": {
			"version": "2.0.5",
			"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
			"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
			"dev": true
		},
		"node_modules/isexe": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
			"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
			"dev": true
		},
		"node_modules/isobject": {
			"version": "3.0.1",
			"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
			"integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/istanbul-lib-coverage": {
			"version": "3.2.2",
			"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
			"integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/istanbul-lib-instrument": {
			"version": "5.2.1",
			"resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
			"integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
			"dev": true,
			"dependencies": {
				"@babel/core": "^7.12.3",
				"@babel/parser": "^7.14.7",
				"@istanbuljs/schema": "^0.1.2",
				"istanbul-lib-coverage": "^3.2.0",
				"semver": "^6.3.0"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/istanbul-lib-report": {
			"version": "3.0.1",
			"resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
			"integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
			"dev": true,
			"dependencies": {
				"istanbul-lib-coverage": "^3.0.0",
				"make-dir": "^4.0.0",
				"supports-color": "^7.1.0"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/istanbul-lib-report/node_modules/lru-cache": {
			"version": "6.0.0",
			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
			"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
			"dev": true,
			"dependencies": {
				"yallist": "^4.0.0"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/istanbul-lib-report/node_modules/make-dir": {
			"version": "4.0.0",
			"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
			"integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
			"dev": true,
			"dependencies": {
				"semver": "^7.5.3"
			},
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/istanbul-lib-report/node_modules/semver": {
			"version": "7.6.0",
			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
			"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
			"dev": true,
			"dependencies": {
				"lru-cache": "^6.0.0"
			},
			"bin": {
				"semver": "bin/semver.js"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/istanbul-lib-report/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/istanbul-lib-source-maps": {
			"version": "4.0.1",
			"resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
			"integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
			"dev": true,
			"dependencies": {
				"debug": "^4.1.1",
				"istanbul-lib-coverage": "^3.0.0",
				"source-map": "^0.6.1"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/istanbul-lib-source-maps/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,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/istanbul-reports": {
			"version": "3.1.7",
			"resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz",
			"integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==",
			"dev": true,
			"dependencies": {
				"html-escaper": "^2.0.0",
				"istanbul-lib-report": "^3.0.0"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/iterator.prototype": {
			"version": "1.1.2",
			"resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz",
			"integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==",
			"dev": true,
			"dependencies": {
				"define-properties": "^1.2.1",
				"get-intrinsic": "^1.2.1",
				"has-symbols": "^1.0.3",
				"reflect.getprototypeof": "^1.0.4",
				"set-function-name": "^2.0.1"
			}
		},
		"node_modules/jest": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
			"integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
			"dev": true,
			"dependencies": {
				"@jest/core": "^29.7.0",
				"@jest/types": "^29.6.3",
				"import-local": "^3.0.2",
				"jest-cli": "^29.7.0"
			},
			"bin": {
				"jest": "bin/jest.js"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			},
			"peerDependencies": {
				"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
			},
			"peerDependenciesMeta": {
				"node-notifier": {
					"optional": true
				}
			}
		},
		"node_modules/jest-changed-files": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
			"integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
			"dev": true,
			"dependencies": {
				"execa": "^5.0.0",
				"jest-util": "^29.7.0",
				"p-limit": "^3.1.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/jest-circus": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
			"integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
			"dev": true,
			"dependencies": {
				"@jest/environment": "^29.7.0",
				"@jest/expect": "^29.7.0",
				"@jest/test-result": "^29.7.0",
				"@jest/types": "^29.6.3",
				"@types/node": "*",
				"chalk": "^4.0.0",
				"co": "^4.6.0",
				"dedent": "^1.0.0",
				"is-generator-fn": "^2.0.0",
				"jest-each": "^29.7.0",
				"jest-matcher-utils": "^29.7.0",
				"jest-message-util": "^29.7.0",
				"jest-runtime": "^29.7.0",
				"jest-snapshot": "^29.7.0",
				"jest-util": "^29.7.0",
				"p-limit": "^3.1.0",
				"pretty-format": "^29.7.0",
				"pure-rand": "^6.0.0",
				"slash": "^3.0.0",
				"stack-utils": "^2.0.3"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/jest-cli": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
			"integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
			"dev": true,
			"dependencies": {
				"@jest/core": "^29.7.0",
				"@jest/test-result": "^29.7.0",
				"@jest/types": "^29.6.3",
				"chalk": "^4.0.0",
				"create-jest": "^29.7.0",
				"exit": "^0.1.2",
				"import-local": "^3.0.2",
				"jest-config": "^29.7.0",
				"jest-util": "^29.7.0",
				"jest-validate": "^29.7.0",
				"yargs": "^17.3.1"
			},
			"bin": {
				"jest": "bin/jest.js"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			},
			"peerDependencies": {
				"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
			},
			"peerDependenciesMeta": {
				"node-notifier": {
					"optional": true
				}
			}
		},
		"node_modules/jest-config": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
			"integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
			"dev": true,
			"dependencies": {
				"@babel/core": "^7.11.6",
				"@jest/test-sequencer": "^29.7.0",
				"@jest/types": "^29.6.3",
				"babel-jest": "^29.7.0",
				"chalk": "^4.0.0",
				"ci-info": "^3.2.0",
				"deepmerge": "^4.2.2",
				"glob": "^7.1.3",
				"graceful-fs": "^4.2.9",
				"jest-circus": "^29.7.0",
				"jest-environment-node": "^29.7.0",
				"jest-get-type": "^29.6.3",
				"jest-regex-util": "^29.6.3",
				"jest-resolve": "^29.7.0",
				"jest-runner": "^29.7.0",
				"jest-util": "^29.7.0",
				"jest-validate": "^29.7.0",
				"micromatch": "^4.0.4",
				"parse-json": "^5.2.0",
				"pretty-format": "^29.7.0",
				"slash": "^3.0.0",
				"strip-json-comments": "^3.1.1"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			},
			"peerDependencies": {
				"@types/node": "*",
				"ts-node": ">=9.0.0"
			},
			"peerDependenciesMeta": {
				"@types/node": {
					"optional": true
				},
				"ts-node": {
					"optional": true
				}
			}
		},
		"node_modules/jest-dev-server": {
			"version": "9.0.2",
			"resolved": "https://registry.npmjs.org/jest-dev-server/-/jest-dev-server-9.0.2.tgz",
			"integrity": "sha512-Zc/JB0IlNNrpXkhBw+h86cGrde/Mey52KvF+FER2eyrtYJTHObOwW7Iarxm3rPyTKby5+3Y2QZtl8pRz/5GCxg==",
			"dev": true,
			"dependencies": {
				"chalk": "^4.1.2",
				"cwd": "^0.10.0",
				"find-process": "^1.4.7",
				"prompts": "^2.4.2",
				"spawnd": "^9.0.2",
				"tree-kill": "^1.2.2",
				"wait-on": "^7.2.0"
			},
			"engines": {
				"node": ">=16"
			}
		},
		"node_modules/jest-diff": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
			"integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
			"dev": true,
			"dependencies": {
				"chalk": "^4.0.0",
				"diff-sequences": "^29.6.3",
				"jest-get-type": "^29.6.3",
				"pretty-format": "^29.7.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/jest-docblock": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
			"integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
			"dev": true,
			"dependencies": {
				"detect-newline": "^3.0.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/jest-each": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
			"integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
			"dev": true,
			"dependencies": {
				"@jest/types": "^29.6.3",
				"chalk": "^4.0.0",
				"jest-get-type": "^29.6.3",
				"jest-util": "^29.7.0",
				"pretty-format": "^29.7.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/jest-environment-jsdom": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz",
			"integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==",
			"dev": true,
			"dependencies": {
				"@jest/environment": "^29.7.0",
				"@jest/fake-timers": "^29.7.0",
				"@jest/types": "^29.6.3",
				"@types/jsdom": "^20.0.0",
				"@types/node": "*",
				"jest-mock": "^29.7.0",
				"jest-util": "^29.7.0",
				"jsdom": "^20.0.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			},
			"peerDependencies": {
				"canvas": "^2.5.0"
			},
			"peerDependenciesMeta": {
				"canvas": {
					"optional": true
				}
			}
		},
		"node_modules/jest-environment-node": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
			"integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
			"dev": true,
			"dependencies": {
				"@jest/environment": "^29.7.0",
				"@jest/fake-timers": "^29.7.0",
				"@jest/types": "^29.6.3",
				"@types/node": "*",
				"jest-mock": "^29.7.0",
				"jest-util": "^29.7.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/jest-get-type": {
			"version": "29.6.3",
			"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
			"integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
			"dev": true,
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/jest-haste-map": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
			"integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
			"dev": true,
			"dependencies": {
				"@jest/types": "^29.6.3",
				"@types/graceful-fs": "^4.1.3",
				"@types/node": "*",
				"anymatch": "^3.0.3",
				"fb-watchman": "^2.0.0",
				"graceful-fs": "^4.2.9",
				"jest-regex-util": "^29.6.3",
				"jest-util": "^29.7.0",
				"jest-worker": "^29.7.0",
				"micromatch": "^4.0.4",
				"walker": "^1.0.8"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			},
			"optionalDependencies": {
				"fsevents": "^2.3.2"
			}
		},
		"node_modules/jest-leak-detector": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
			"integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
			"dev": true,
			"dependencies": {
				"jest-get-type": "^29.6.3",
				"pretty-format": "^29.7.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/jest-matcher-utils": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
			"integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
			"dev": true,
			"dependencies": {
				"chalk": "^4.0.0",
				"jest-diff": "^29.7.0",
				"jest-get-type": "^29.6.3",
				"pretty-format": "^29.7.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/jest-message-util": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
			"integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
			"dev": true,
			"dependencies": {
				"@babel/code-frame": "^7.12.13",
				"@jest/types": "^29.6.3",
				"@types/stack-utils": "^2.0.0",
				"chalk": "^4.0.0",
				"graceful-fs": "^4.2.9",
				"micromatch": "^4.0.4",
				"pretty-format": "^29.7.0",
				"slash": "^3.0.0",
				"stack-utils": "^2.0.3"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/jest-mock": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
			"integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
			"dev": true,
			"dependencies": {
				"@jest/types": "^29.6.3",
				"@types/node": "*",
				"jest-util": "^29.7.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/jest-pnp-resolver": {
			"version": "1.2.3",
			"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
			"integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
			"dev": true,
			"engines": {
				"node": ">=6"
			},
			"peerDependencies": {
				"jest-resolve": "*"
			},
			"peerDependenciesMeta": {
				"jest-resolve": {
					"optional": true
				}
			}
		},
		"node_modules/jest-regex-util": {
			"version": "29.6.3",
			"resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
			"integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
			"dev": true,
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/jest-resolve": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
			"integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
			"dev": true,
			"dependencies": {
				"chalk": "^4.0.0",
				"graceful-fs": "^4.2.9",
				"jest-haste-map": "^29.7.0",
				"jest-pnp-resolver": "^1.2.2",
				"jest-util": "^29.7.0",
				"jest-validate": "^29.7.0",
				"resolve": "^1.20.0",
				"resolve.exports": "^2.0.0",
				"slash": "^3.0.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/jest-resolve-dependencies": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
			"integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
			"dev": true,
			"dependencies": {
				"jest-regex-util": "^29.6.3",
				"jest-snapshot": "^29.7.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/jest-runner": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
			"integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
			"dev": true,
			"dependencies": {
				"@jest/console": "^29.7.0",
				"@jest/environment": "^29.7.0",
				"@jest/test-result": "^29.7.0",
				"@jest/transform": "^29.7.0",
				"@jest/types": "^29.6.3",
				"@types/node": "*",
				"chalk": "^4.0.0",
				"emittery": "^0.13.1",
				"graceful-fs": "^4.2.9",
				"jest-docblock": "^29.7.0",
				"jest-environment-node": "^29.7.0",
				"jest-haste-map": "^29.7.0",
				"jest-leak-detector": "^29.7.0",
				"jest-message-util": "^29.7.0",
				"jest-resolve": "^29.7.0",
				"jest-runtime": "^29.7.0",
				"jest-util": "^29.7.0",
				"jest-watcher": "^29.7.0",
				"jest-worker": "^29.7.0",
				"p-limit": "^3.1.0",
				"source-map-support": "0.5.13"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/jest-runtime": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
			"integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
			"dev": true,
			"dependencies": {
				"@jest/environment": "^29.7.0",
				"@jest/fake-timers": "^29.7.0",
				"@jest/globals": "^29.7.0",
				"@jest/source-map": "^29.6.3",
				"@jest/test-result": "^29.7.0",
				"@jest/transform": "^29.7.0",
				"@jest/types": "^29.6.3",
				"@types/node": "*",
				"chalk": "^4.0.0",
				"cjs-module-lexer": "^1.0.0",
				"collect-v8-coverage": "^1.0.0",
				"glob": "^7.1.3",
				"graceful-fs": "^4.2.9",
				"jest-haste-map": "^29.7.0",
				"jest-message-util": "^29.7.0",
				"jest-mock": "^29.7.0",
				"jest-regex-util": "^29.6.3",
				"jest-resolve": "^29.7.0",
				"jest-snapshot": "^29.7.0",
				"jest-util": "^29.7.0",
				"slash": "^3.0.0",
				"strip-bom": "^4.0.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/jest-snapshot": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
			"integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
			"dev": true,
			"dependencies": {
				"@babel/core": "^7.11.6",
				"@babel/generator": "^7.7.2",
				"@babel/plugin-syntax-jsx": "^7.7.2",
				"@babel/plugin-syntax-typescript": "^7.7.2",
				"@babel/types": "^7.3.3",
				"@jest/expect-utils": "^29.7.0",
				"@jest/transform": "^29.7.0",
				"@jest/types": "^29.6.3",
				"babel-preset-current-node-syntax": "^1.0.0",
				"chalk": "^4.0.0",
				"expect": "^29.7.0",
				"graceful-fs": "^4.2.9",
				"jest-diff": "^29.7.0",
				"jest-get-type": "^29.6.3",
				"jest-matcher-utils": "^29.7.0",
				"jest-message-util": "^29.7.0",
				"jest-util": "^29.7.0",
				"natural-compare": "^1.4.0",
				"pretty-format": "^29.7.0",
				"semver": "^7.5.3"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/jest-snapshot/node_modules/lru-cache": {
			"version": "6.0.0",
			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
			"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
			"dev": true,
			"dependencies": {
				"yallist": "^4.0.0"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/jest-snapshot/node_modules/semver": {
			"version": "7.6.0",
			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
			"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
			"dev": true,
			"dependencies": {
				"lru-cache": "^6.0.0"
			},
			"bin": {
				"semver": "bin/semver.js"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/jest-snapshot/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/jest-util": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
			"integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
			"dev": true,
			"dependencies": {
				"@jest/types": "^29.6.3",
				"@types/node": "*",
				"chalk": "^4.0.0",
				"ci-info": "^3.2.0",
				"graceful-fs": "^4.2.9",
				"picomatch": "^2.2.3"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/jest-validate": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
			"integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
			"dev": true,
			"dependencies": {
				"@jest/types": "^29.6.3",
				"camelcase": "^6.2.0",
				"chalk": "^4.0.0",
				"jest-get-type": "^29.6.3",
				"leven": "^3.1.0",
				"pretty-format": "^29.7.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/jest-watcher": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
			"integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
			"dev": true,
			"dependencies": {
				"@jest/test-result": "^29.7.0",
				"@jest/types": "^29.6.3",
				"@types/node": "*",
				"ansi-escapes": "^4.2.1",
				"chalk": "^4.0.0",
				"emittery": "^0.13.1",
				"jest-util": "^29.7.0",
				"string-length": "^4.0.1"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/jest-worker": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
			"integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
			"dev": true,
			"dependencies": {
				"@types/node": "*",
				"jest-util": "^29.7.0",
				"merge-stream": "^2.0.0",
				"supports-color": "^8.0.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/jest-worker/node_modules/supports-color": {
			"version": "8.1.1",
			"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
			"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
			"dev": true,
			"dependencies": {
				"has-flag": "^4.0.0"
			},
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/chalk/supports-color?sponsor=1"
			}
		},
		"node_modules/joi": {
			"version": "17.13.0",
			"resolved": "https://registry.npmjs.org/joi/-/joi-17.13.0.tgz",
			"integrity": "sha512-9qcrTyoBmFZRNHeVP4edKqIUEgFzq7MHvTNSDuHSqkpOPtiBkgNgcmTSqmiw1kw9tdKaiddvIDv/eCJDxmqWCA==",
			"dev": true,
			"dependencies": {
				"@hapi/hoek": "^9.3.0",
				"@hapi/topo": "^5.1.0",
				"@sideway/address": "^4.1.5",
				"@sideway/formula": "^3.0.1",
				"@sideway/pinpoint": "^2.0.0"
			}
		},
		"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",
			"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
			"dev": true
		},
		"node_modules/js-yaml": {
			"version": "3.14.1",
			"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
			"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
			"dev": true,
			"dependencies": {
				"argparse": "^1.0.7",
				"esprima": "^4.0.0"
			},
			"bin": {
				"js-yaml": "bin/js-yaml.js"
			}
		},
		"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/jsdoc-type-pratt-parser": {
			"version": "4.0.0",
			"resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz",
			"integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==",
			"dev": true,
			"engines": {
				"node": ">=12.0.0"
			}
		},
		"node_modules/jsdom": {
			"version": "20.0.3",
			"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz",
			"integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==",
			"dev": true,
			"dependencies": {
				"abab": "^2.0.6",
				"acorn": "^8.8.1",
				"acorn-globals": "^7.0.0",
				"cssom": "^0.5.0",
				"cssstyle": "^2.3.0",
				"data-urls": "^3.0.2",
				"decimal.js": "^10.4.2",
				"domexception": "^4.0.0",
				"escodegen": "^2.0.0",
				"form-data": "^4.0.0",
				"html-encoding-sniffer": "^3.0.0",
				"http-proxy-agent": "^5.0.0",
				"https-proxy-agent": "^5.0.1",
				"is-potential-custom-element-name": "^1.0.1",
				"nwsapi": "^2.2.2",
				"parse5": "^7.1.1",
				"saxes": "^6.0.0",
				"symbol-tree": "^3.2.4",
				"tough-cookie": "^4.1.2",
				"w3c-xmlserializer": "^4.0.0",
				"webidl-conversions": "^7.0.0",
				"whatwg-encoding": "^2.0.0",
				"whatwg-mimetype": "^3.0.0",
				"whatwg-url": "^11.0.0",
				"ws": "^8.11.0",
				"xml-name-validator": "^4.0.0"
			},
			"engines": {
				"node": ">=14"
			},
			"peerDependencies": {
				"canvas": "^2.5.0"
			},
			"peerDependenciesMeta": {
				"canvas": {
					"optional": true
				}
			}
		},
		"node_modules/jsesc": {
			"version": "2.5.2",
			"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
			"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
			"dev": true,
			"bin": {
				"jsesc": "bin/jsesc"
			},
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/json-buffer": {
			"version": "3.0.1",
			"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
			"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
			"dev": true
		},
		"node_modules/json-parse-even-better-errors": {
			"version": "2.3.1",
			"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
			"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
			"dev": true
		},
		"node_modules/json-schema-traverse": {
			"version": "0.4.1",
			"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
			"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
			"dev": true
		},
		"node_modules/json-stable-stringify-without-jsonify": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
			"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
			"dev": true
		},
		"node_modules/json2php": {
			"version": "0.0.7",
			"resolved": "https://registry.npmjs.org/json2php/-/json2php-0.0.7.tgz",
			"integrity": "sha512-dnSoUiLAoVaMXxFsVi4CrPVYMKOuDBXTghXSmMINX44RZ8WM9cXlY7UqrQnlAcODCVO7FV3+8t/5nDKAjimLfg==",
			"dev": true
		},
		"node_modules/json5": {
			"version": "2.2.3",
			"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
			"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
			"dev": true,
			"bin": {
				"json5": "lib/cli.js"
			},
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/jsonc-parser": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz",
			"integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==",
			"dev": true
		},
		"node_modules/jsonfile": {
			"version": "6.1.0",
			"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
			"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
			"dev": true,
			"dependencies": {
				"universalify": "^2.0.0"
			},
			"optionalDependencies": {
				"graceful-fs": "^4.1.6"
			}
		},
		"node_modules/jsonfile/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/jsx-ast-utils": {
			"version": "3.3.5",
			"resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
			"integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
			"dev": true,
			"dependencies": {
				"array-includes": "^3.1.6",
				"array.prototype.flat": "^1.3.1",
				"object.assign": "^4.1.4",
				"object.values": "^1.1.6"
			},
			"engines": {
				"node": ">=4.0"
			}
		},
		"node_modules/keyv": {
			"version": "4.5.4",
			"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
			"integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
			"dev": true,
			"dependencies": {
				"json-buffer": "3.0.1"
			}
		},
		"node_modules/kind-of": {
			"version": "3.2.2",
			"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
			"integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
			"dev": true,
			"dependencies": {
				"is-buffer": "^1.1.5"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/kleur": {
			"version": "3.0.3",
			"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
			"integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
			"dev": true,
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/klona": {
			"version": "2.0.6",
			"resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz",
			"integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==",
			"dev": true,
			"engines": {
				"node": ">= 8"
			}
		},
		"node_modules/known-css-properties": {
			"version": "0.26.0",
			"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz",
			"integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==",
			"dev": true
		},
		"node_modules/language-subtag-registry": {
			"version": "0.3.22",
			"resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
			"integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==",
			"dev": true
		},
		"node_modules/language-tags": {
			"version": "1.0.9",
			"resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
			"integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
			"dev": true,
			"dependencies": {
				"language-subtag-registry": "^0.3.20"
			},
			"engines": {
				"node": ">=0.10"
			}
		},
		"node_modules/launch-editor": {
			"version": "2.6.1",
			"resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz",
			"integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==",
			"dev": true,
			"dependencies": {
				"picocolors": "^1.0.0",
				"shell-quote": "^1.8.1"
			}
		},
		"node_modules/lazy-cache": {
			"version": "1.0.4",
			"resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
			"integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/leven": {
			"version": "3.1.0",
			"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
			"integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
			"dev": true,
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/levn": {
			"version": "0.4.1",
			"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
			"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
			"dev": true,
			"dependencies": {
				"prelude-ls": "^1.2.1",
				"type-check": "~0.4.0"
			},
			"engines": {
				"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/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/lighthouse/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/lighthouse/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/lighthouse/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/lighthouse/node_modules/puppeteer-core/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/lighthouse/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/lighthouse/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/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/lighthouse/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/lighthouse/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/lighthouse/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/lighthouse/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/lilconfig": {
			"version": "3.1.1",
			"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz",
			"integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==",
			"dev": true,
			"engines": {
				"node": ">=14"
			},
			"funding": {
				"url": "https://github.com/sponsors/antonk52"
			}
		},
		"node_modules/lines-and-columns": {
			"version": "1.2.4",
			"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
			"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
			"dev": true
		},
		"node_modules/linkify-it": {
			"version": "3.0.3",
			"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
			"integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
			"dev": true,
			"dependencies": {
				"uc.micro": "^1.0.1"
			}
		},
		"node_modules/loader-runner": {
			"version": "4.3.0",
			"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
			"integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
			"dev": true,
			"engines": {
				"node": ">=6.11.5"
			}
		},
		"node_modules/loader-utils": {
			"version": "2.0.4",
			"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
			"integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
			"dev": true,
			"dependencies": {
				"big.js": "^5.2.2",
				"emojis-list": "^3.0.0",
				"json5": "^2.1.2"
			},
			"engines": {
				"node": ">=8.9.0"
			}
		},
		"node_modules/locate-path": {
			"version": "5.0.0",
			"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
			"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
			"dev": true,
			"dependencies": {
				"p-locate": "^4.1.0"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/lodash": {
			"version": "4.17.21",
			"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
			"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
			"dev": true
		},
		"node_modules/lodash.debounce": {
			"version": "4.0.8",
			"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
			"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
			"dev": true
		},
		"node_modules/lodash.memoize": {
			"version": "4.1.2",
			"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
			"integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
			"dev": true
		},
		"node_modules/lodash.merge": {
			"version": "4.6.2",
			"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
			"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
			"dev": true
		},
		"node_modules/lodash.truncate": {
			"version": "4.4.2",
			"resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
			"integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
			"dev": true
		},
		"node_modules/lodash.uniq": {
			"version": "4.5.0",
			"resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
			"integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
			"dev": true
		},
		"node_modules/log-symbols": {
			"version": "4.1.0",
			"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
			"integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
			"dev": true,
			"dependencies": {
				"chalk": "^4.1.0",
				"is-unicode-supported": "^0.1.0"
			},
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"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/loose-envify": {
			"version": "1.4.0",
			"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
			"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
			"dev": true,
			"dependencies": {
				"js-tokens": "^3.0.0 || ^4.0.0"
			},
			"bin": {
				"loose-envify": "cli.js"
			}
		},
		"node_modules/lower-case": {
			"version": "2.0.2",
			"resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
			"integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
			"dev": true,
			"dependencies": {
				"tslib": "^2.0.3"
			}
		},
		"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": "5.1.1",
			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
			"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
			"dev": true,
			"dependencies": {
				"yallist": "^3.0.2"
			}
		},
		"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/makeerror": {
			"version": "1.0.12",
			"resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
			"integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
			"dev": true,
			"dependencies": {
				"tmpl": "1.0.5"
			}
		},
		"node_modules/map-obj": {
			"version": "4.3.0",
			"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
			"integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
			"dev": true,
			"engines": {
				"node": ">=8"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/map-values": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/map-values/-/map-values-1.0.1.tgz",
			"integrity": "sha512-BbShUnr5OartXJe1GeccAWtfro11hhgNJg6G9/UtWKjVGvV5U4C09cg5nk8JUevhXODaXY+hQ3xxMUKSs62ONQ==",
			"dev": true
		},
		"node_modules/markdown-it": {
			"version": "12.3.2",
			"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
			"integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
			"dev": true,
			"dependencies": {
				"argparse": "^2.0.1",
				"entities": "~2.1.0",
				"linkify-it": "^3.0.1",
				"mdurl": "^1.0.1",
				"uc.micro": "^1.0.5"
			},
			"bin": {
				"markdown-it": "bin/markdown-it.js"
			}
		},
		"node_modules/markdown-it/node_modules/argparse": {
			"version": "2.0.1",
			"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
			"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
			"dev": true
		},
		"node_modules/markdown-it/node_modules/entities": {
			"version": "2.1.0",
			"resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
			"integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
			"dev": true,
			"funding": {
				"url": "https://github.com/fb55/entities?sponsor=1"
			}
		},
		"node_modules/markdownlint": {
			"version": "0.25.1",
			"resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.25.1.tgz",
			"integrity": "sha512-AG7UkLzNa1fxiOv5B+owPsPhtM4D6DoODhsJgiaNg1xowXovrYgOnLqAgOOFQpWOlHFVQUzjMY5ypNNTeov92g==",
			"dev": true,
			"dependencies": {
				"markdown-it": "12.3.2"
			},
			"engines": {
				"node": ">=12"
			}
		},
		"node_modules/markdownlint-cli": {
			"version": "0.31.1",
			"resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.31.1.tgz",
			"integrity": "sha512-keIOMwQn+Ch7MoBwA+TdkyVMuxAeZFEGmIIlvwgV0Z1TGS5MxPnRr29XCLhkNzCHU+uNKGjU+VEjLX+Z9kli6g==",
			"dev": true,
			"dependencies": {
				"commander": "~9.0.0",
				"get-stdin": "~9.0.0",
				"glob": "~7.2.0",
				"ignore": "~5.2.0",
				"js-yaml": "^4.1.0",
				"jsonc-parser": "~3.0.0",
				"markdownlint": "~0.25.1",
				"markdownlint-rule-helpers": "~0.16.0",
				"minimatch": "~3.0.5",
				"run-con": "~1.2.10"
			},
			"bin": {
				"markdownlint": "markdownlint.js"
			},
			"engines": {
				"node": ">=12"
			}
		},
		"node_modules/markdownlint-cli/node_modules/argparse": {
			"version": "2.0.1",
			"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
			"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
			"dev": true
		},
		"node_modules/markdownlint-cli/node_modules/brace-expansion": {
			"version": "1.1.11",
			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
			"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
			"dev": true,
			"dependencies": {
				"balanced-match": "^1.0.0",
				"concat-map": "0.0.1"
			}
		},
		"node_modules/markdownlint-cli/node_modules/commander": {
			"version": "9.0.0",
			"resolved": "https://registry.npmjs.org/commander/-/commander-9.0.0.tgz",
			"integrity": "sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw==",
			"dev": true,
			"engines": {
				"node": "^12.20.0 || >=14"
			}
		},
		"node_modules/markdownlint-cli/node_modules/ignore": {
			"version": "5.2.4",
			"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
			"integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
			"dev": true,
			"engines": {
				"node": ">= 4"
			}
		},
		"node_modules/markdownlint-cli/node_modules/js-yaml": {
			"version": "4.1.0",
			"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
			"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
			"dev": true,
			"dependencies": {
				"argparse": "^2.0.1"
			},
			"bin": {
				"js-yaml": "bin/js-yaml.js"
			}
		},
		"node_modules/markdownlint-cli/node_modules/minimatch": {
			"version": "3.0.8",
			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz",
			"integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==",
			"dev": true,
			"dependencies": {
				"brace-expansion": "^1.1.7"
			},
			"engines": {
				"node": "*"
			}
		},
		"node_modules/markdownlint-rule-helpers": {
			"version": "0.16.0",
			"resolved": "https://registry.npmjs.org/markdownlint-rule-helpers/-/markdownlint-rule-helpers-0.16.0.tgz",
			"integrity": "sha512-oEacRUVeTJ5D5hW1UYd2qExYI0oELdYK72k1TKGvIeYJIbqQWAz476NAc7LNixSySUhcNl++d02DvX0ccDk9/w==",
			"dev": true
		},
		"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/mathml-tag-names": {
			"version": "2.1.3",
			"resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz",
			"integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==",
			"dev": true,
			"funding": {
				"type": "github",
				"url": "https://github.com/sponsors/wooorm"
			}
		},
		"node_modules/mdn-data": {
			"version": "2.0.30",
			"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
			"integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
			"dev": true
		},
		"node_modules/mdurl": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
			"integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==",
			"dev": true
		},
		"node_modules/media-typer": {
			"version": "0.3.0",
			"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
			"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
			"dev": true,
			"engines": {
				"node": ">= 0.6"
			}
		},
		"node_modules/memfs": {
			"version": "3.5.3",
			"resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz",
			"integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==",
			"dev": true,
			"dependencies": {
				"fs-monkey": "^1.0.4"
			},
			"engines": {
				"node": ">= 4.0.0"
			}
		},
		"node_modules/memize": {
			"version": "2.1.0",
			"resolved": "https://registry.npmjs.org/memize/-/memize-2.1.0.tgz",
			"integrity": "sha512-yywVJy8ctVlN5lNPxsep5urnZ6TTclwPEyigM9M3Bi8vseJBOfqNrGWN/r8NzuIt3PovM323W04blJfGQfQSVg==",
			"dev": true
		},
		"node_modules/meow": {
			"version": "9.0.0",
			"resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
			"integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==",
			"dev": true,
			"dependencies": {
				"@types/minimist": "^1.2.0",
				"camelcase-keys": "^6.2.2",
				"decamelize": "^1.2.0",
				"decamelize-keys": "^1.1.0",
				"hard-rejection": "^2.1.0",
				"minimist-options": "4.1.0",
				"normalize-package-data": "^3.0.0",
				"read-pkg-up": "^7.0.1",
				"redent": "^3.0.0",
				"trim-newlines": "^3.0.0",
				"type-fest": "^0.18.0",
				"yargs-parser": "^20.2.3"
			},
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/meow/node_modules/type-fest": {
			"version": "0.18.1",
			"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
			"integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
			"dev": true,
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/meow/node_modules/yargs-parser": {
			"version": "20.2.9",
			"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
			"integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
			"dev": true,
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/merge-deep": {
			"version": "3.0.3",
			"resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz",
			"integrity": "sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==",
			"dev": true,
			"dependencies": {
				"arr-union": "^3.1.0",
				"clone-deep": "^0.2.4",
				"kind-of": "^3.0.2"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/merge-descriptors": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
			"integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==",
			"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/merge2": {
			"version": "1.4.1",
			"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
			"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
			"dev": true,
			"engines": {
				"node": ">= 8"
			}
		},
		"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/methods": {
			"version": "1.1.2",
			"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
			"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
			"dev": true,
			"engines": {
				"node": ">= 0.6"
			}
		},
		"node_modules/micromatch": {
			"version": "4.0.5",
			"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
			"integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
			"dev": true,
			"dependencies": {
				"braces": "^3.0.2",
				"picomatch": "^2.3.1"
			},
			"engines": {
				"node": ">=8.6"
			}
		},
		"node_modules/mime": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz",
			"integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
			"dev": true,
			"bin": {
				"mime": "cli.js"
			},
			"engines": {
				"node": ">=10.0.0"
			}
		},
		"node_modules/mime-db": {
			"version": "1.52.0",
			"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
			"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
			"dev": true,
			"engines": {
				"node": ">= 0.6"
			}
		},
		"node_modules/mime-types": {
			"version": "2.1.35",
			"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
			"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
			"dev": true,
			"dependencies": {
				"mime-db": "1.52.0"
			},
			"engines": {
				"node": ">= 0.6"
			}
		},
		"node_modules/mimic-fn": {
			"version": "2.1.0",
			"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
			"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
			"dev": true,
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/min-indent": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
			"integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
			"dev": true,
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/mini-css-extract-plugin": {
			"version": "2.9.0",
			"resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz",
			"integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==",
			"dev": true,
			"dependencies": {
				"schema-utils": "^4.0.0",
				"tapable": "^2.2.1"
			},
			"engines": {
				"node": ">= 12.13.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/webpack"
			},
			"peerDependencies": {
				"webpack": "^5.0.0"
			}
		},
		"node_modules/mini-css-extract-plugin/node_modules/ajv": {
			"version": "8.12.0",
			"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
			"integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
			"dev": true,
			"dependencies": {
				"fast-deep-equal": "^3.1.1",
				"json-schema-traverse": "^1.0.0",
				"require-from-string": "^2.0.2",
				"uri-js": "^4.2.2"
			},
			"funding": {
				"type": "github",
				"url": "https://github.com/sponsors/epoberezkin"
			}
		},
		"node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": {
			"version": "5.1.0",
			"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
			"integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
			"dev": true,
			"dependencies": {
				"fast-deep-equal": "^3.1.3"
			},
			"peerDependencies": {
				"ajv": "^8.8.2"
			}
		},
		"node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
			"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
			"dev": true
		},
		"node_modules/mini-css-extract-plugin/node_modules/schema-utils": {
			"version": "4.2.0",
			"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
			"integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
			"dev": true,
			"dependencies": {
				"@types/json-schema": "^7.0.9",
				"ajv": "^8.9.0",
				"ajv-formats": "^2.1.1",
				"ajv-keywords": "^5.1.0"
			},
			"engines": {
				"node": ">= 12.13.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/webpack"
			}
		},
		"node_modules/minimalistic-assert": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
			"integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
			"dev": true
		},
		"node_modules/minimatch": {
			"version": "9.0.3",
			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
			"integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
			"dev": true,
			"dependencies": {
				"brace-expansion": "^2.0.1"
			},
			"engines": {
				"node": ">=16 || 14 >=14.17"
			},
			"funding": {
				"url": "https://github.com/sponsors/isaacs"
			}
		},
		"node_modules/minimist": {
			"version": "1.2.8",
			"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
			"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
			"dev": true,
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/minimist-options": {
			"version": "4.1.0",
			"resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
			"integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
			"dev": true,
			"dependencies": {
				"arrify": "^1.0.1",
				"is-plain-obj": "^1.1.0",
				"kind-of": "^6.0.3"
			},
			"engines": {
				"node": ">= 6"
			}
		},
		"node_modules/minimist-options/node_modules/is-plain-obj": {
			"version": "1.1.0",
			"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
			"integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/minimist-options/node_modules/kind-of": {
			"version": "6.0.3",
			"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
			"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"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/mixin-object": {
			"version": "2.0.1",
			"resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz",
			"integrity": "sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==",
			"dev": true,
			"dependencies": {
				"for-in": "^0.1.3",
				"is-extendable": "^0.1.1"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/mixin-object/node_modules/for-in": {
			"version": "0.1.8",
			"resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz",
			"integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"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/mrmime": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz",
			"integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==",
			"dev": true,
			"engines": {
				"node": ">=10"
			}
		},
		"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/multicast-dns": {
			"version": "7.2.5",
			"resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz",
			"integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==",
			"dev": true,
			"dependencies": {
				"dns-packet": "^5.2.2",
				"thunky": "^1.0.2"
			},
			"bin": {
				"multicast-dns": "cli.js"
			}
		},
		"node_modules/nanoid": {
			"version": "3.3.7",
			"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
			"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
			"dev": true,
			"funding": [
				{
					"type": "github",
					"url": "https://github.com/sponsors/ai"
				}
			],
			"bin": {
				"nanoid": "bin/nanoid.cjs"
			},
			"engines": {
				"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
			}
		},
		"node_modules/natural-compare": {
			"version": "1.4.0",
			"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
			"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
			"dev": true
		},
		"node_modules/negotiator": {
			"version": "0.6.3",
			"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
			"integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
			"dev": true,
			"engines": {
				"node": ">= 0.6"
			}
		},
		"node_modules/neo-async": {
			"version": "2.6.2",
			"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
			"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
			"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/no-case": {
			"version": "3.0.4",
			"resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
			"integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
			"dev": true,
			"dependencies": {
				"lower-case": "^2.0.2",
				"tslib": "^2.0.3"
			}
		},
		"node_modules/node-fetch": {
			"version": "2.6.7",
			"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
			"integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
			"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/node-fetch/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/node-fetch/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/node-fetch/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/node-forge": {
			"version": "1.3.1",
			"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
			"integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
			"dev": true,
			"engines": {
				"node": ">= 6.13.0"
			}
		},
		"node_modules/node-int64": {
			"version": "0.4.0",
			"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
			"integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
			"dev": true
		},
		"node_modules/node-releases": {
			"version": "2.0.14",
			"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
			"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
			"dev": true
		},
		"node_modules/normalize-package-data": {
			"version": "3.0.3",
			"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
			"integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
			"dev": true,
			"dependencies": {
				"hosted-git-info": "^4.0.1",
				"is-core-module": "^2.5.0",
				"semver": "^7.3.4",
				"validate-npm-package-license": "^3.0.1"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/normalize-package-data/node_modules/lru-cache": {
			"version": "6.0.0",
			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
			"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
			"dev": true,
			"dependencies": {
				"yallist": "^4.0.0"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/normalize-package-data/node_modules/semver": {
			"version": "7.6.0",
			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
			"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
			"dev": true,
			"dependencies": {
				"lru-cache": "^6.0.0"
			},
			"bin": {
				"semver": "bin/semver.js"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/normalize-package-data/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/normalize-path": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
			"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/normalize-range": {
			"version": "0.1.2",
			"resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
			"integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/npm-bundled": {
			"version": "1.1.2",
			"resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz",
			"integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==",
			"dev": true,
			"dependencies": {
				"npm-normalize-package-bin": "^1.0.1"
			}
		},
		"node_modules/npm-normalize-package-bin": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz",
			"integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==",
			"dev": true
		},
		"node_modules/npm-package-json-lint": {
			"version": "6.4.0",
			"resolved": "https://registry.npmjs.org/npm-package-json-lint/-/npm-package-json-lint-6.4.0.tgz",
			"integrity": "sha512-cuXAJJB1Rdqz0UO6w524matlBqDBjcNt7Ru+RDIu4y6RI1gVqiWBnylrK8sPRk81gGBA0X8hJbDXolVOoTc+sA==",
			"dev": true,
			"dependencies": {
				"ajv": "^6.12.6",
				"ajv-errors": "^1.0.1",
				"chalk": "^4.1.2",
				"cosmiconfig": "^8.0.0",
				"debug": "^4.3.4",
				"globby": "^11.1.0",
				"ignore": "^5.2.0",
				"is-plain-obj": "^3.0.0",
				"jsonc-parser": "^3.2.0",
				"log-symbols": "^4.1.0",
				"meow": "^9.0.0",
				"plur": "^4.0.0",
				"semver": "^7.3.8",
				"slash": "^3.0.0",
				"strip-json-comments": "^3.1.1",
				"type-fest": "^3.2.0",
				"validate-npm-package-name": "^5.0.0"
			},
			"bin": {
				"npmPkgJsonLint": "dist/cli.js"
			},
			"engines": {
				"node": ">=14.0.0",
				"npm": ">=6.0.0"
			}
		},
		"node_modules/npm-package-json-lint/node_modules/jsonc-parser": {
			"version": "3.2.1",
			"resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz",
			"integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==",
			"dev": true
		},
		"node_modules/npm-package-json-lint/node_modules/lru-cache": {
			"version": "6.0.0",
			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
			"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
			"dev": true,
			"dependencies": {
				"yallist": "^4.0.0"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/npm-package-json-lint/node_modules/semver": {
			"version": "7.6.0",
			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
			"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
			"dev": true,
			"dependencies": {
				"lru-cache": "^6.0.0"
			},
			"bin": {
				"semver": "bin/semver.js"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/npm-package-json-lint/node_modules/type-fest": {
			"version": "3.13.1",
			"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz",
			"integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==",
			"dev": true,
			"engines": {
				"node": ">=14.16"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/npm-package-json-lint/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/npm-packlist": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz",
			"integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==",
			"dev": true,
			"dependencies": {
				"glob": "^7.1.6",
				"ignore-walk": "^4.0.1",
				"npm-bundled": "^1.1.1",
				"npm-normalize-package-bin": "^1.0.1"
			},
			"bin": {
				"npm-packlist": "bin/index.js"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/npm-run-path": {
			"version": "4.0.1",
			"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
			"integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
			"dev": true,
			"dependencies": {
				"path-key": "^3.0.0"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/nth-check": {
			"version": "2.1.1",
			"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
			"integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
			"dev": true,
			"dependencies": {
				"boolbase": "^1.0.0"
			},
			"funding": {
				"url": "https://github.com/fb55/nth-check?sponsor=1"
			}
		},
		"node_modules/nwsapi": {
			"version": "2.2.9",
			"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.9.tgz",
			"integrity": "sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==",
			"dev": true
		},
		"node_modules/object-assign": {
			"version": "4.1.1",
			"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
			"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/object-filter": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/object-filter/-/object-filter-1.0.2.tgz",
			"integrity": "sha512-NahvP2vZcy1ZiiYah30CEPw0FpDcSkSePJBMpzl5EQgCmISijiGuJm3SPYp7U+Lf2TljyaIw3E5EgkEx/TNEVA==",
			"dev": true
		},
		"node_modules/object-inspect": {
			"version": "1.13.1",
			"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
			"integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
			"dev": true,
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/object-keys": {
			"version": "1.1.1",
			"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
			"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
			"dev": true,
			"engines": {
				"node": ">= 0.4"
			}
		},
		"node_modules/object.assign": {
			"version": "4.1.5",
			"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
			"integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.5",
				"define-properties": "^1.2.1",
				"has-symbols": "^1.0.3",
				"object-keys": "^1.1.1"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/object.entries": {
			"version": "1.1.8",
			"resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz",
			"integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.7",
				"define-properties": "^1.2.1",
				"es-object-atoms": "^1.0.0"
			},
			"engines": {
				"node": ">= 0.4"
			}
		},
		"node_modules/object.fromentries": {
			"version": "2.0.8",
			"resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
			"integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.7",
				"define-properties": "^1.2.1",
				"es-abstract": "^1.23.2",
				"es-object-atoms": "^1.0.0"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/object.groupby": {
			"version": "1.0.3",
			"resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
			"integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.7",
				"define-properties": "^1.2.1",
				"es-abstract": "^1.23.2"
			},
			"engines": {
				"node": ">= 0.4"
			}
		},
		"node_modules/object.hasown": {
			"version": "1.1.4",
			"resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz",
			"integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==",
			"dev": true,
			"dependencies": {
				"define-properties": "^1.2.1",
				"es-abstract": "^1.23.2",
				"es-object-atoms": "^1.0.0"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/object.values": {
			"version": "1.2.0",
			"resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
			"integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.7",
				"define-properties": "^1.2.1",
				"es-object-atoms": "^1.0.0"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/obuf": {
			"version": "1.1.2",
			"resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
			"integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
			"dev": true
		},
		"node_modules/on-finished": {
			"version": "2.4.1",
			"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
			"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
			"dev": true,
			"dependencies": {
				"ee-first": "1.1.1"
			},
			"engines": {
				"node": ">= 0.8"
			}
		},
		"node_modules/on-headers": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
			"integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
			"dev": true,
			"engines": {
				"node": ">= 0.8"
			}
		},
		"node_modules/once": {
			"version": "1.4.0",
			"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
			"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
			"dev": true,
			"dependencies": {
				"wrappy": "1"
			}
		},
		"node_modules/onetime": {
			"version": "5.1.2",
			"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
			"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
			"dev": true,
			"dependencies": {
				"mimic-fn": "^2.1.0"
			},
			"engines": {
				"node": ">=6"
			},
			"funding": {
				"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/opener": {
			"version": "1.5.2",
			"resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz",
			"integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==",
			"dev": true,
			"bin": {
				"opener": "bin/opener-bin.js"
			}
		},
		"node_modules/optionator": {
			"version": "0.9.4",
			"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
			"integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
			"dev": true,
			"dependencies": {
				"deep-is": "^0.1.3",
				"fast-levenshtein": "^2.0.6",
				"levn": "^0.4.1",
				"prelude-ls": "^1.2.1",
				"type-check": "^0.4.0",
				"word-wrap": "^1.2.5"
			},
			"engines": {
				"node": ">= 0.8.0"
			}
		},
		"node_modules/os-homedir": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
			"integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/p-limit": {
			"version": "3.1.0",
			"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
			"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
			"dev": true,
			"dependencies": {
				"yocto-queue": "^0.1.0"
			},
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/p-locate": {
			"version": "4.1.0",
			"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
			"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
			"dev": true,
			"dependencies": {
				"p-limit": "^2.2.0"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/p-locate/node_modules/p-limit": {
			"version": "2.3.0",
			"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
			"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
			"dev": true,
			"dependencies": {
				"p-try": "^2.0.0"
			},
			"engines": {
				"node": ">=6"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/p-map": {
			"version": "2.1.0",
			"resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
			"integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
			"dev": true,
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/p-retry": {
			"version": "4.6.2",
			"resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz",
			"integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==",
			"dev": true,
			"dependencies": {
				"@types/retry": "0.12.0",
				"retry": "^0.13.1"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/p-try": {
			"version": "2.2.0",
			"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
			"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
			"dev": true,
			"engines": {
				"node": ">=6"
			}
		},
		"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.1",
			"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
			"integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
			"dev": true,
			"dependencies": {
				"debug": "^4.3.4"
			},
			"engines": {
				"node": ">= 14"
			}
		},
		"node_modules/pac-proxy-agent/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/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/param-case": {
			"version": "3.0.4",
			"resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
			"integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==",
			"dev": true,
			"dependencies": {
				"dot-case": "^3.0.4",
				"tslib": "^2.0.3"
			}
		},
		"node_modules/parent-module": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
			"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
			"dev": true,
			"dependencies": {
				"callsites": "^3.0.0"
			},
			"engines": {
				"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/parse-json": {
			"version": "5.2.0",
			"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
			"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
			"dev": true,
			"dependencies": {
				"@babel/code-frame": "^7.0.0",
				"error-ex": "^1.3.1",
				"json-parse-even-better-errors": "^2.3.0",
				"lines-and-columns": "^1.1.6"
			},
			"engines": {
				"node": ">=8"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/parse-passwd": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
			"integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/parse5": {
			"version": "7.1.2",
			"resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
			"integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
			"dev": true,
			"dependencies": {
				"entities": "^4.4.0"
			},
			"funding": {
				"url": "https://github.com/inikulin/parse5?sponsor=1"
			}
		},
		"node_modules/parseurl": {
			"version": "1.3.3",
			"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
			"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
			"dev": true,
			"engines": {
				"node": ">= 0.8"
			}
		},
		"node_modules/pascal-case": {
			"version": "3.1.2",
			"resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz",
			"integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==",
			"dev": true,
			"dependencies": {
				"no-case": "^3.0.4",
				"tslib": "^2.0.3"
			}
		},
		"node_modules/path-case": {
			"version": "3.0.4",
			"resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz",
			"integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==",
			"dev": true,
			"dependencies": {
				"dot-case": "^3.0.4",
				"tslib": "^2.0.3"
			}
		},
		"node_modules/path-exists": {
			"version": "4.0.0",
			"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
			"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/path-is-absolute": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
			"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/path-is-inside": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
			"integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==",
			"dev": true
		},
		"node_modules/path-key": {
			"version": "3.1.1",
			"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
			"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/path-parse": {
			"version": "1.0.7",
			"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
			"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
			"dev": true
		},
		"node_modules/path-to-regexp": {
			"version": "0.1.7",
			"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
			"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
			"dev": true
		},
		"node_modules/path-type": {
			"version": "4.0.0",
			"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
			"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/pend": {
			"version": "1.2.0",
			"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
			"integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
			"dev": true
		},
		"node_modules/picocolors": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
			"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
			"dev": true
		},
		"node_modules/picomatch": {
			"version": "2.3.1",
			"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
			"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
			"dev": true,
			"engines": {
				"node": ">=8.6"
			},
			"funding": {
				"url": "https://github.com/sponsors/jonschlinkert"
			}
		},
		"node_modules/pify": {
			"version": "4.0.1",
			"resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
			"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
			"dev": true,
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/pinkie": {
			"version": "2.0.4",
			"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
			"integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/pinkie-promise": {
			"version": "2.0.1",
			"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
			"integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==",
			"dev": true,
			"dependencies": {
				"pinkie": "^2.0.0"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/pirates": {
			"version": "4.0.6",
			"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
			"integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
			"dev": true,
			"engines": {
				"node": ">= 6"
			}
		},
		"node_modules/pkg-dir": {
			"version": "4.2.0",
			"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
			"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
			"dev": true,
			"dependencies": {
				"find-up": "^4.0.0"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/playwright": {
			"version": "1.43.1",
			"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.43.1.tgz",
			"integrity": "sha512-V7SoH0ai2kNt1Md9E3Gwas5B9m8KR2GVvwZnAI6Pg0m3sh7UvgiYhRrhsziCmqMJNouPckiOhk8T+9bSAK0VIA==",
			"dev": true,
			"peer": true,
			"dependencies": {
				"playwright-core": "1.43.1"
			},
			"bin": {
				"playwright": "cli.js"
			},
			"engines": {
				"node": ">=16"
			},
			"optionalDependencies": {
				"fsevents": "2.3.2"
			}
		},
		"node_modules/playwright-core": {
			"version": "1.43.1",
			"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.43.1.tgz",
			"integrity": "sha512-EI36Mto2Vrx6VF7rm708qSnesVQKbxEWvPrfA1IPY6HgczBplDx7ENtx+K2n4kJ41sLLkuGfmb0ZLSSXlDhqPg==",
			"dev": true,
			"peer": true,
			"bin": {
				"playwright-core": "cli.js"
			},
			"engines": {
				"node": ">=16"
			}
		},
		"node_modules/playwright/node_modules/fsevents": {
			"version": "2.3.2",
			"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
			"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
			"dev": true,
			"hasInstallScript": true,
			"optional": true,
			"os": [
				"darwin"
			],
			"peer": true,
			"engines": {
				"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
			}
		},
		"node_modules/plur": {
			"version": "4.0.0",
			"resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz",
			"integrity": "sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==",
			"dev": true,
			"dependencies": {
				"irregular-plurals": "^3.2.0"
			},
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/possible-typed-array-names": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
			"integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
			"dev": true,
			"engines": {
				"node": ">= 0.4"
			}
		},
		"node_modules/postcss": {
			"version": "8.4.38",
			"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
			"integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
			"dev": true,
			"funding": [
				{
					"type": "opencollective",
					"url": "https://opencollective.com/postcss/"
				},
				{
					"type": "tidelift",
					"url": "https://tidelift.com/funding/github/npm/postcss"
				},
				{
					"type": "github",
					"url": "https://github.com/sponsors/ai"
				}
			],
			"dependencies": {
				"nanoid": "^3.3.7",
				"picocolors": "^1.0.0",
				"source-map-js": "^1.2.0"
			},
			"engines": {
				"node": "^10 || ^12 || >=14"
			}
		},
		"node_modules/postcss-calc": {
			"version": "9.0.1",
			"resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz",
			"integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==",
			"dev": true,
			"dependencies": {
				"postcss-selector-parser": "^6.0.11",
				"postcss-value-parser": "^4.2.0"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.2.2"
			}
		},
		"node_modules/postcss-colormin": {
			"version": "6.1.0",
			"resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz",
			"integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==",
			"dev": true,
			"dependencies": {
				"browserslist": "^4.23.0",
				"caniuse-api": "^3.0.0",
				"colord": "^2.9.3",
				"postcss-value-parser": "^4.2.0"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-convert-values": {
			"version": "6.1.0",
			"resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz",
			"integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==",
			"dev": true,
			"dependencies": {
				"browserslist": "^4.23.0",
				"postcss-value-parser": "^4.2.0"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-discard-comments": {
			"version": "6.0.2",
			"resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz",
			"integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==",
			"dev": true,
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-discard-duplicates": {
			"version": "6.0.3",
			"resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz",
			"integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==",
			"dev": true,
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-discard-empty": {
			"version": "6.0.3",
			"resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz",
			"integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==",
			"dev": true,
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-discard-overridden": {
			"version": "6.0.2",
			"resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz",
			"integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==",
			"dev": true,
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-loader": {
			"version": "6.2.1",
			"resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz",
			"integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==",
			"dev": true,
			"dependencies": {
				"cosmiconfig": "^7.0.0",
				"klona": "^2.0.5",
				"semver": "^7.3.5"
			},
			"engines": {
				"node": ">= 12.13.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/webpack"
			},
			"peerDependencies": {
				"postcss": "^7.0.0 || ^8.0.1",
				"webpack": "^5.0.0"
			}
		},
		"node_modules/postcss-loader/node_modules/cosmiconfig": {
			"version": "7.1.0",
			"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
			"integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
			"dev": true,
			"dependencies": {
				"@types/parse-json": "^4.0.0",
				"import-fresh": "^3.2.1",
				"parse-json": "^5.0.0",
				"path-type": "^4.0.0",
				"yaml": "^1.10.0"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/postcss-loader/node_modules/lru-cache": {
			"version": "6.0.0",
			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
			"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
			"dev": true,
			"dependencies": {
				"yallist": "^4.0.0"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/postcss-loader/node_modules/semver": {
			"version": "7.6.0",
			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
			"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
			"dev": true,
			"dependencies": {
				"lru-cache": "^6.0.0"
			},
			"bin": {
				"semver": "bin/semver.js"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/postcss-loader/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/postcss-media-query-parser": {
			"version": "0.2.3",
			"resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
			"integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==",
			"dev": true
		},
		"node_modules/postcss-merge-longhand": {
			"version": "6.0.5",
			"resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz",
			"integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==",
			"dev": true,
			"dependencies": {
				"postcss-value-parser": "^4.2.0",
				"stylehacks": "^6.1.1"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-merge-rules": {
			"version": "6.1.1",
			"resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz",
			"integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==",
			"dev": true,
			"dependencies": {
				"browserslist": "^4.23.0",
				"caniuse-api": "^3.0.0",
				"cssnano-utils": "^4.0.2",
				"postcss-selector-parser": "^6.0.16"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-minify-font-values": {
			"version": "6.1.0",
			"resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz",
			"integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==",
			"dev": true,
			"dependencies": {
				"postcss-value-parser": "^4.2.0"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-minify-gradients": {
			"version": "6.0.3",
			"resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz",
			"integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==",
			"dev": true,
			"dependencies": {
				"colord": "^2.9.3",
				"cssnano-utils": "^4.0.2",
				"postcss-value-parser": "^4.2.0"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-minify-params": {
			"version": "6.1.0",
			"resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz",
			"integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==",
			"dev": true,
			"dependencies": {
				"browserslist": "^4.23.0",
				"cssnano-utils": "^4.0.2",
				"postcss-value-parser": "^4.2.0"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-minify-selectors": {
			"version": "6.0.4",
			"resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz",
			"integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==",
			"dev": true,
			"dependencies": {
				"postcss-selector-parser": "^6.0.16"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-modules-extract-imports": {
			"version": "3.1.0",
			"resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz",
			"integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==",
			"dev": true,
			"engines": {
				"node": "^10 || ^12 || >= 14"
			},
			"peerDependencies": {
				"postcss": "^8.1.0"
			}
		},
		"node_modules/postcss-modules-local-by-default": {
			"version": "4.0.5",
			"resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz",
			"integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==",
			"dev": true,
			"dependencies": {
				"icss-utils": "^5.0.0",
				"postcss-selector-parser": "^6.0.2",
				"postcss-value-parser": "^4.1.0"
			},
			"engines": {
				"node": "^10 || ^12 || >= 14"
			},
			"peerDependencies": {
				"postcss": "^8.1.0"
			}
		},
		"node_modules/postcss-modules-scope": {
			"version": "3.2.0",
			"resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz",
			"integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==",
			"dev": true,
			"dependencies": {
				"postcss-selector-parser": "^6.0.4"
			},
			"engines": {
				"node": "^10 || ^12 || >= 14"
			},
			"peerDependencies": {
				"postcss": "^8.1.0"
			}
		},
		"node_modules/postcss-modules-values": {
			"version": "4.0.0",
			"resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
			"integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
			"dev": true,
			"dependencies": {
				"icss-utils": "^5.0.0"
			},
			"engines": {
				"node": "^10 || ^12 || >= 14"
			},
			"peerDependencies": {
				"postcss": "^8.1.0"
			}
		},
		"node_modules/postcss-normalize-charset": {
			"version": "6.0.2",
			"resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz",
			"integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==",
			"dev": true,
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-normalize-display-values": {
			"version": "6.0.2",
			"resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz",
			"integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==",
			"dev": true,
			"dependencies": {
				"postcss-value-parser": "^4.2.0"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-normalize-positions": {
			"version": "6.0.2",
			"resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz",
			"integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==",
			"dev": true,
			"dependencies": {
				"postcss-value-parser": "^4.2.0"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-normalize-repeat-style": {
			"version": "6.0.2",
			"resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz",
			"integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==",
			"dev": true,
			"dependencies": {
				"postcss-value-parser": "^4.2.0"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-normalize-string": {
			"version": "6.0.2",
			"resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz",
			"integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==",
			"dev": true,
			"dependencies": {
				"postcss-value-parser": "^4.2.0"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-normalize-timing-functions": {
			"version": "6.0.2",
			"resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz",
			"integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==",
			"dev": true,
			"dependencies": {
				"postcss-value-parser": "^4.2.0"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-normalize-unicode": {
			"version": "6.1.0",
			"resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz",
			"integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==",
			"dev": true,
			"dependencies": {
				"browserslist": "^4.23.0",
				"postcss-value-parser": "^4.2.0"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-normalize-url": {
			"version": "6.0.2",
			"resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz",
			"integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==",
			"dev": true,
			"dependencies": {
				"postcss-value-parser": "^4.2.0"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-normalize-whitespace": {
			"version": "6.0.2",
			"resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz",
			"integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==",
			"dev": true,
			"dependencies": {
				"postcss-value-parser": "^4.2.0"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-ordered-values": {
			"version": "6.0.2",
			"resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz",
			"integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==",
			"dev": true,
			"dependencies": {
				"cssnano-utils": "^4.0.2",
				"postcss-value-parser": "^4.2.0"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-reduce-initial": {
			"version": "6.1.0",
			"resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz",
			"integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==",
			"dev": true,
			"dependencies": {
				"browserslist": "^4.23.0",
				"caniuse-api": "^3.0.0"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-reduce-transforms": {
			"version": "6.0.2",
			"resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz",
			"integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==",
			"dev": true,
			"dependencies": {
				"postcss-value-parser": "^4.2.0"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-resolve-nested-selector": {
			"version": "0.1.1",
			"resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz",
			"integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==",
			"dev": true
		},
		"node_modules/postcss-safe-parser": {
			"version": "6.0.0",
			"resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz",
			"integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==",
			"dev": true,
			"engines": {
				"node": ">=12.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/postcss/"
			},
			"peerDependencies": {
				"postcss": "^8.3.3"
			}
		},
		"node_modules/postcss-scss": {
			"version": "4.0.9",
			"resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz",
			"integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==",
			"dev": true,
			"funding": [
				{
					"type": "opencollective",
					"url": "https://opencollective.com/postcss/"
				},
				{
					"type": "tidelift",
					"url": "https://tidelift.com/funding/github/npm/postcss-scss"
				},
				{
					"type": "github",
					"url": "https://github.com/sponsors/ai"
				}
			],
			"engines": {
				"node": ">=12.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.29"
			}
		},
		"node_modules/postcss-selector-parser": {
			"version": "6.0.16",
			"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz",
			"integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==",
			"dev": true,
			"dependencies": {
				"cssesc": "^3.0.0",
				"util-deprecate": "^1.0.2"
			},
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/postcss-svgo": {
			"version": "6.0.3",
			"resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz",
			"integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==",
			"dev": true,
			"dependencies": {
				"postcss-value-parser": "^4.2.0",
				"svgo": "^3.2.0"
			},
			"engines": {
				"node": "^14 || ^16 || >= 18"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-unique-selectors": {
			"version": "6.0.4",
			"resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz",
			"integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==",
			"dev": true,
			"dependencies": {
				"postcss-selector-parser": "^6.0.16"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/postcss-value-parser": {
			"version": "4.2.0",
			"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
			"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
			"dev": true
		},
		"node_modules/prelude-ls": {
			"version": "1.2.1",
			"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
			"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
			"dev": true,
			"engines": {
				"node": ">= 0.8.0"
			}
		},
		"node_modules/prettier": {
			"name": "wp-prettier",
			"version": "3.0.3",
			"resolved": "https://registry.npmjs.org/wp-prettier/-/wp-prettier-3.0.3.tgz",
			"integrity": "sha512-X4UlrxDTH8oom9qXlcjnydsjAOD2BmB6yFmvS4Z2zdTzqqpRWb+fbqrH412+l+OUXmbzJlSXjlMFYPgYG12IAA==",
			"dev": true,
			"bin": {
				"prettier": "bin/prettier.cjs"
			},
			"engines": {
				"node": ">=14"
			},
			"funding": {
				"url": "https://github.com/prettier/prettier?sponsor=1"
			}
		},
		"node_modules/prettier-linter-helpers": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
			"integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
			"dev": true,
			"dependencies": {
				"fast-diff": "^1.1.2"
			},
			"engines": {
				"node": ">=6.0.0"
			}
		},
		"node_modules/pretty-format": {
			"version": "29.7.0",
			"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
			"integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
			"dev": true,
			"dependencies": {
				"@jest/schemas": "^29.6.3",
				"ansi-styles": "^5.0.0",
				"react-is": "^18.0.0"
			},
			"engines": {
				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
			}
		},
		"node_modules/pretty-format/node_modules/ansi-styles": {
			"version": "5.2.0",
			"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
			"integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
			"dev": true,
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/chalk/ansi-styles?sponsor=1"
			}
		},
		"node_modules/process-nextick-args": {
			"version": "2.0.1",
			"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
			"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
			"dev": true
		},
		"node_modules/progress": {
			"version": "2.0.3",
			"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
			"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
			"dev": true,
			"engines": {
				"node": ">=0.4.0"
			}
		},
		"node_modules/prompts": {
			"version": "2.4.2",
			"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
			"integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
			"dev": true,
			"dependencies": {
				"kleur": "^3.0.3",
				"sisteransi": "^1.0.5"
			},
			"engines": {
				"node": ">= 6"
			}
		},
		"node_modules/prop-types": {
			"version": "15.8.1",
			"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
			"integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
			"dev": true,
			"dependencies": {
				"loose-envify": "^1.4.0",
				"object-assign": "^4.1.1",
				"react-is": "^16.13.1"
			}
		},
		"node_modules/prop-types/node_modules/react-is": {
			"version": "16.13.1",
			"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
			"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
			"dev": true
		},
		"node_modules/proxy-addr": {
			"version": "2.0.7",
			"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
			"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
			"dev": true,
			"dependencies": {
				"forwarded": "0.2.0",
				"ipaddr.js": "1.9.1"
			},
			"engines": {
				"node": ">= 0.10"
			}
		},
		"node_modules/proxy-addr/node_modules/ipaddr.js": {
			"version": "1.9.1",
			"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
			"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
			"dev": true,
			"engines": {
				"node": ">= 0.10"
			}
		},
		"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.1",
			"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
			"integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
			"dev": true,
			"dependencies": {
				"debug": "^4.3.4"
			},
			"engines": {
				"node": ">= 14"
			}
		},
		"node_modules/proxy-agent/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/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-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/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/pseudomap": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
			"integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==",
			"dev": true
		},
		"node_modules/psl": {
			"version": "1.9.0",
			"resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
			"integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
			"dev": true
		},
		"node_modules/pump": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
			"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
			"dev": true,
			"dependencies": {
				"end-of-stream": "^1.1.0",
				"once": "^1.3.1"
			}
		},
		"node_modules/punycode": {
			"version": "2.3.1",
			"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
			"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
			"dev": true,
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/puppeteer-core": {
			"version": "13.7.0",
			"resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-13.7.0.tgz",
			"integrity": "sha512-rXja4vcnAzFAP1OVLq/5dWNfwBGuzcOARJ6qGV7oAZhnLmVRU8G5MsdeQEAOy332ZhkIOnn9jp15R89LKHyp2Q==",
			"dev": true,
			"dependencies": {
				"cross-fetch": "3.1.5",
				"debug": "4.3.4",
				"devtools-protocol": "0.0.981744",
				"extract-zip": "2.0.1",
				"https-proxy-agent": "5.0.1",
				"pkg-dir": "4.2.0",
				"progress": "2.0.3",
				"proxy-from-env": "1.1.0",
				"rimraf": "3.0.2",
				"tar-fs": "2.1.1",
				"unbzip2-stream": "1.4.3",
				"ws": "8.5.0"
			},
			"engines": {
				"node": ">=10.18.1"
			}
		},
		"node_modules/puppeteer-core/node_modules/devtools-protocol": {
			"version": "0.0.981744",
			"resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz",
			"integrity": "sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==",
			"dev": true
		},
		"node_modules/puppeteer-core/node_modules/rimraf": {
			"version": "3.0.2",
			"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
			"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
			"dev": true,
			"dependencies": {
				"glob": "^7.1.3"
			},
			"bin": {
				"rimraf": "bin.js"
			},
			"funding": {
				"url": "https://github.com/sponsors/isaacs"
			}
		},
		"node_modules/puppeteer-core/node_modules/ws": {
			"version": "8.5.0",
			"resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz",
			"integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==",
			"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/pure-rand": {
			"version": "6.1.0",
			"resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz",
			"integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==",
			"dev": true,
			"funding": [
				{
					"type": "individual",
					"url": "https://github.com/sponsors/dubzzz"
				},
				{
					"type": "opencollective",
					"url": "https://opencollective.com/fast-check"
				}
			]
		},
		"node_modules/qs": {
			"version": "6.11.0",
			"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
			"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
			"dev": true,
			"dependencies": {
				"side-channel": "^1.0.4"
			},
			"engines": {
				"node": ">=0.6"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/querystringify": {
			"version": "2.2.0",
			"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
			"integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
			"dev": true
		},
		"node_modules/queue-microtask": {
			"version": "1.2.3",
			"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
			"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
			"dev": true,
			"funding": [
				{
					"type": "github",
					"url": "https://github.com/sponsors/feross"
				},
				{
					"type": "patreon",
					"url": "https://www.patreon.com/feross"
				},
				{
					"type": "consulting",
					"url": "https://feross.org/support"
				}
			]
		},
		"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/quick-lru": {
			"version": "4.0.1",
			"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
			"integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/randombytes": {
			"version": "2.1.0",
			"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
			"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
			"dev": true,
			"dependencies": {
				"safe-buffer": "^5.1.0"
			}
		},
		"node_modules/range-parser": {
			"version": "1.2.1",
			"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
			"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
			"dev": true,
			"engines": {
				"node": ">= 0.6"
			}
		},
		"node_modules/raw-body": {
			"version": "2.5.2",
			"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
			"integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
			"dev": true,
			"dependencies": {
				"bytes": "3.1.2",
				"http-errors": "2.0.0",
				"iconv-lite": "0.4.24",
				"unpipe": "1.0.0"
			},
			"engines": {
				"node": ">= 0.8"
			}
		},
		"node_modules/raw-body/node_modules/bytes": {
			"version": "3.1.2",
			"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
			"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
			"dev": true,
			"engines": {
				"node": ">= 0.8"
			}
		},
		"node_modules/raw-body/node_modules/iconv-lite": {
			"version": "0.4.24",
			"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
			"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
			"dev": true,
			"dependencies": {
				"safer-buffer": ">= 2.1.2 < 3"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/react": {
			"version": "18.3.1",
			"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
			"integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
			"dev": true,
			"dependencies": {
				"loose-envify": "^1.1.0"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/react-dom": {
			"version": "18.3.1",
			"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
			"integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
			"dev": true,
			"peer": true,
			"dependencies": {
				"loose-envify": "^1.1.0",
				"scheduler": "^0.23.2"
			},
			"peerDependencies": {
				"react": "^18.3.1"
			}
		},
		"node_modules/react-is": {
			"version": "18.3.1",
			"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
			"integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
			"dev": true
		},
		"node_modules/react-refresh": {
			"version": "0.14.2",
			"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz",
			"integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/read-pkg": {
			"version": "5.2.0",
			"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
			"integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
			"dev": true,
			"dependencies": {
				"@types/normalize-package-data": "^2.4.0",
				"normalize-package-data": "^2.5.0",
				"parse-json": "^5.0.0",
				"type-fest": "^0.6.0"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/read-pkg-up": {
			"version": "7.0.1",
			"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
			"integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
			"dev": true,
			"dependencies": {
				"find-up": "^4.1.0",
				"read-pkg": "^5.2.0",
				"type-fest": "^0.8.1"
			},
			"engines": {
				"node": ">=8"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/read-pkg-up/node_modules/type-fest": {
			"version": "0.8.1",
			"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
			"integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/read-pkg/node_modules/hosted-git-info": {
			"version": "2.8.9",
			"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
			"integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
			"dev": true
		},
		"node_modules/read-pkg/node_modules/normalize-package-data": {
			"version": "2.5.0",
			"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
			"integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
			"dev": true,
			"dependencies": {
				"hosted-git-info": "^2.1.4",
				"resolve": "^1.10.0",
				"semver": "2 || 3 || 4 || 5",
				"validate-npm-package-license": "^3.0.1"
			}
		},
		"node_modules/read-pkg/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/read-pkg/node_modules/type-fest": {
			"version": "0.6.0",
			"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
			"integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/readable-stream": {
			"version": "3.6.2",
			"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
			"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
			"dev": true,
			"dependencies": {
				"inherits": "^2.0.3",
				"string_decoder": "^1.1.1",
				"util-deprecate": "^1.0.1"
			},
			"engines": {
				"node": ">= 6"
			}
		},
		"node_modules/readdirp": {
			"version": "3.6.0",
			"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
			"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
			"dev": true,
			"dependencies": {
				"picomatch": "^2.2.1"
			},
			"engines": {
				"node": ">=8.10.0"
			}
		},
		"node_modules/rechoir": {
			"version": "0.8.0",
			"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
			"integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
			"dev": true,
			"dependencies": {
				"resolve": "^1.20.0"
			},
			"engines": {
				"node": ">= 10.13.0"
			}
		},
		"node_modules/redent": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
			"integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
			"dev": true,
			"dependencies": {
				"indent-string": "^4.0.0",
				"strip-indent": "^3.0.0"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/reflect.getprototypeof": {
			"version": "1.0.6",
			"resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz",
			"integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.7",
				"define-properties": "^1.2.1",
				"es-abstract": "^1.23.1",
				"es-errors": "^1.3.0",
				"get-intrinsic": "^1.2.4",
				"globalthis": "^1.0.3",
				"which-builtin-type": "^1.1.3"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/regenerate": {
			"version": "1.4.2",
			"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
			"integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
			"dev": true
		},
		"node_modules/regenerate-unicode-properties": {
			"version": "10.1.1",
			"resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz",
			"integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==",
			"dev": true,
			"dependencies": {
				"regenerate": "^1.4.2"
			},
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/regenerator-runtime": {
			"version": "0.14.1",
			"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
			"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
			"dev": true
		},
		"node_modules/regenerator-transform": {
			"version": "0.15.2",
			"resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz",
			"integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==",
			"dev": true,
			"dependencies": {
				"@babel/runtime": "^7.8.4"
			}
		},
		"node_modules/regexp.prototype.flags": {
			"version": "1.5.2",
			"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
			"integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.6",
				"define-properties": "^1.2.1",
				"es-errors": "^1.3.0",
				"set-function-name": "^2.0.1"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/regexpu-core": {
			"version": "5.3.2",
			"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
			"integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
			"dev": true,
			"dependencies": {
				"@babel/regjsgen": "^0.8.0",
				"regenerate": "^1.4.2",
				"regenerate-unicode-properties": "^10.1.0",
				"regjsparser": "^0.9.1",
				"unicode-match-property-ecmascript": "^2.0.0",
				"unicode-match-property-value-ecmascript": "^2.1.0"
			},
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/regjsparser": {
			"version": "0.9.1",
			"resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
			"integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
			"dev": true,
			"dependencies": {
				"jsesc": "~0.5.0"
			},
			"bin": {
				"regjsparser": "bin/parser"
			}
		},
		"node_modules/regjsparser/node_modules/jsesc": {
			"version": "0.5.0",
			"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
			"integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
			"dev": true,
			"bin": {
				"jsesc": "bin/jsesc"
			}
		},
		"node_modules/remove-accents": {
			"version": "0.5.0",
			"resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz",
			"integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==",
			"dev": true
		},
		"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",
			"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/requireindex": {
			"version": "1.2.0",
			"resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz",
			"integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==",
			"dev": true,
			"engines": {
				"node": ">=0.10.5"
			}
		},
		"node_modules/requires-port": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
			"integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
			"dev": true
		},
		"node_modules/resolve": {
			"version": "1.22.8",
			"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
			"integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
			"dev": true,
			"dependencies": {
				"is-core-module": "^2.13.0",
				"path-parse": "^1.0.7",
				"supports-preserve-symlinks-flag": "^1.0.0"
			},
			"bin": {
				"resolve": "bin/resolve"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/resolve-bin": {
			"version": "0.4.3",
			"resolved": "https://registry.npmjs.org/resolve-bin/-/resolve-bin-0.4.3.tgz",
			"integrity": "sha512-9u8TMpc+SEHXxQXblXHz5yRvRZERkCZimFN9oz85QI3uhkh7nqfjm6OGTLg+8vucpXGcY4jLK6WkylPmt7GSvw==",
			"dev": true,
			"dependencies": {
				"find-parent-dir": "~0.3.0"
			}
		},
		"node_modules/resolve-cwd": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
			"integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
			"dev": true,
			"dependencies": {
				"resolve-from": "^5.0.0"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/resolve-dir": {
			"version": "0.1.1",
			"resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz",
			"integrity": "sha512-QxMPqI6le2u0dCLyiGzgy92kjkkL6zO0XyvHzjdTNH3zM6e5Hz3BwG6+aEyNgiQ5Xz6PwTwgQEj3U50dByPKIA==",
			"dev": true,
			"dependencies": {
				"expand-tilde": "^1.2.2",
				"global-modules": "^0.2.3"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/resolve-from": {
			"version": "5.0.0",
			"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
			"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/resolve.exports": {
			"version": "2.0.2",
			"resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
			"integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
			"dev": true,
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/retry": {
			"version": "0.13.1",
			"resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz",
			"integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==",
			"dev": true,
			"engines": {
				"node": ">= 4"
			}
		},
		"node_modules/reusify": {
			"version": "1.0.4",
			"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
			"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
			"dev": true,
			"engines": {
				"iojs": ">=1.0.0",
				"node": ">=0.10.0"
			}
		},
		"node_modules/rimraf": {
			"version": "2.7.1",
			"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
			"integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
			"dev": true,
			"dependencies": {
				"glob": "^7.1.3"
			},
			"bin": {
				"rimraf": "bin.js"
			}
		},
		"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/run-con": {
			"version": "1.2.12",
			"resolved": "https://registry.npmjs.org/run-con/-/run-con-1.2.12.tgz",
			"integrity": "sha512-5257ILMYIF4RztL9uoZ7V9Q97zHtNHn5bN3NobeAnzB1P3ASLgg8qocM2u+R18ttp+VEM78N2LK8XcNVtnSRrg==",
			"dev": true,
			"dependencies": {
				"deep-extend": "^0.6.0",
				"ini": "~3.0.0",
				"minimist": "^1.2.8",
				"strip-json-comments": "~3.1.1"
			},
			"bin": {
				"run-con": "cli.js"
			}
		},
		"node_modules/run-con/node_modules/ini": {
			"version": "3.0.1",
			"resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz",
			"integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==",
			"dev": true,
			"engines": {
				"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
			}
		},
		"node_modules/run-parallel": {
			"version": "1.2.0",
			"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
			"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
			"dev": true,
			"funding": [
				{
					"type": "github",
					"url": "https://github.com/sponsors/feross"
				},
				{
					"type": "patreon",
					"url": "https://www.patreon.com/feross"
				},
				{
					"type": "consulting",
					"url": "https://feross.org/support"
				}
			],
			"dependencies": {
				"queue-microtask": "^1.2.2"
			}
		},
		"node_modules/rxjs": {
			"version": "7.8.1",
			"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
			"integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
			"dev": true,
			"dependencies": {
				"tslib": "^2.1.0"
			}
		},
		"node_modules/safe-array-concat": {
			"version": "1.1.2",
			"resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
			"integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.7",
				"get-intrinsic": "^1.2.4",
				"has-symbols": "^1.0.3",
				"isarray": "^2.0.5"
			},
			"engines": {
				"node": ">=0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/safe-buffer": {
			"version": "5.2.1",
			"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
			"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
			"dev": true,
			"funding": [
				{
					"type": "github",
					"url": "https://github.com/sponsors/feross"
				},
				{
					"type": "patreon",
					"url": "https://www.patreon.com/feross"
				},
				{
					"type": "consulting",
					"url": "https://feross.org/support"
				}
			]
		},
		"node_modules/safe-regex-test": {
			"version": "1.0.3",
			"resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
			"integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.6",
				"es-errors": "^1.3.0",
				"is-regex": "^1.1.4"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/safer-buffer": {
			"version": "2.1.2",
			"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
			"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
			"dev": true
		},
		"node_modules/sass": {
			"version": "1.75.0",
			"resolved": "https://registry.npmjs.org/sass/-/sass-1.75.0.tgz",
			"integrity": "sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==",
			"dev": true,
			"dependencies": {
				"chokidar": ">=3.0.0 <4.0.0",
				"immutable": "^4.0.0",
				"source-map-js": ">=0.6.2 <2.0.0"
			},
			"bin": {
				"sass": "sass.js"
			},
			"engines": {
				"node": ">=14.0.0"
			}
		},
		"node_modules/sass-loader": {
			"version": "12.6.0",
			"resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz",
			"integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==",
			"dev": true,
			"dependencies": {
				"klona": "^2.0.4",
				"neo-async": "^2.6.2"
			},
			"engines": {
				"node": ">= 12.13.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/webpack"
			},
			"peerDependencies": {
				"fibers": ">= 3.1.0",
				"node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0",
				"sass": "^1.3.0",
				"sass-embedded": "*",
				"webpack": "^5.0.0"
			},
			"peerDependenciesMeta": {
				"fibers": {
					"optional": true
				},
				"node-sass": {
					"optional": true
				},
				"sass": {
					"optional": true
				},
				"sass-embedded": {
					"optional": true
				}
			}
		},
		"node_modules/saxes": {
			"version": "6.0.0",
			"resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
			"integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
			"dev": true,
			"dependencies": {
				"xmlchars": "^2.2.0"
			},
			"engines": {
				"node": ">=v12.22.7"
			}
		},
		"node_modules/scheduler": {
			"version": "0.23.2",
			"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
			"integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
			"dev": true,
			"peer": true,
			"dependencies": {
				"loose-envify": "^1.1.0"
			}
		},
		"node_modules/schema-utils": {
			"version": "3.3.0",
			"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
			"integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
			"dev": true,
			"dependencies": {
				"@types/json-schema": "^7.0.8",
				"ajv": "^6.12.5",
				"ajv-keywords": "^3.5.2"
			},
			"engines": {
				"node": ">= 10.13.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/webpack"
			}
		},
		"node_modules/select-hose": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
			"integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==",
			"dev": true
		},
		"node_modules/selfsigned": {
			"version": "2.4.1",
			"resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz",
			"integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==",
			"dev": true,
			"dependencies": {
				"@types/node-forge": "^1.3.0",
				"node-forge": "^1"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"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/send": {
			"version": "0.18.0",
			"resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
			"integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
			"dev": true,
			"dependencies": {
				"debug": "2.6.9",
				"depd": "2.0.0",
				"destroy": "1.2.0",
				"encodeurl": "~1.0.2",
				"escape-html": "~1.0.3",
				"etag": "~1.8.1",
				"fresh": "0.5.2",
				"http-errors": "2.0.0",
				"mime": "1.6.0",
				"ms": "2.1.3",
				"on-finished": "2.4.1",
				"range-parser": "~1.2.1",
				"statuses": "2.0.1"
			},
			"engines": {
				"node": ">= 0.8.0"
			}
		},
		"node_modules/send/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/send/node_modules/debug/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/send/node_modules/mime": {
			"version": "1.6.0",
			"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
			"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
			"dev": true,
			"bin": {
				"mime": "cli.js"
			},
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/send/node_modules/ms": {
			"version": "2.1.3",
			"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
			"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
			"dev": true
		},
		"node_modules/sentence-case": {
			"version": "3.0.4",
			"resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz",
			"integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==",
			"dev": true,
			"dependencies": {
				"no-case": "^3.0.4",
				"tslib": "^2.0.3",
				"upper-case-first": "^2.0.2"
			}
		},
		"node_modules/serialize-javascript": {
			"version": "6.0.2",
			"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
			"integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
			"dev": true,
			"dependencies": {
				"randombytes": "^2.1.0"
			}
		},
		"node_modules/serve-index": {
			"version": "1.9.1",
			"resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
			"integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==",
			"dev": true,
			"dependencies": {
				"accepts": "~1.3.4",
				"batch": "0.6.1",
				"debug": "2.6.9",
				"escape-html": "~1.0.3",
				"http-errors": "~1.6.2",
				"mime-types": "~2.1.17",
				"parseurl": "~1.3.2"
			},
			"engines": {
				"node": ">= 0.8.0"
			}
		},
		"node_modules/serve-index/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/serve-index/node_modules/depd": {
			"version": "1.1.2",
			"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
			"integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
			"dev": true,
			"engines": {
				"node": ">= 0.6"
			}
		},
		"node_modules/serve-index/node_modules/http-errors": {
			"version": "1.6.3",
			"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
			"integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
			"dev": true,
			"dependencies": {
				"depd": "~1.1.2",
				"inherits": "2.0.3",
				"setprototypeof": "1.1.0",
				"statuses": ">= 1.4.0 < 2"
			},
			"engines": {
				"node": ">= 0.6"
			}
		},
		"node_modules/serve-index/node_modules/inherits": {
			"version": "2.0.3",
			"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
			"integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
			"dev": true
		},
		"node_modules/serve-index/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/serve-index/node_modules/setprototypeof": {
			"version": "1.1.0",
			"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
			"integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
			"dev": true
		},
		"node_modules/serve-index/node_modules/statuses": {
			"version": "1.5.0",
			"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
			"integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
			"dev": true,
			"engines": {
				"node": ">= 0.6"
			}
		},
		"node_modules/serve-static": {
			"version": "1.15.0",
			"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
			"integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
			"dev": true,
			"dependencies": {
				"encodeurl": "~1.0.2",
				"escape-html": "~1.0.3",
				"parseurl": "~1.3.3",
				"send": "0.18.0"
			},
			"engines": {
				"node": ">= 0.8.0"
			}
		},
		"node_modules/set-function-length": {
			"version": "1.2.2",
			"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
			"integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
			"dev": true,
			"dependencies": {
				"define-data-property": "^1.1.4",
				"es-errors": "^1.3.0",
				"function-bind": "^1.1.2",
				"get-intrinsic": "^1.2.4",
				"gopd": "^1.0.1",
				"has-property-descriptors": "^1.0.2"
			},
			"engines": {
				"node": ">= 0.4"
			}
		},
		"node_modules/set-function-name": {
			"version": "2.0.2",
			"resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
			"integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
			"dev": true,
			"dependencies": {
				"define-data-property": "^1.1.4",
				"es-errors": "^1.3.0",
				"functions-have-names": "^1.2.3",
				"has-property-descriptors": "^1.0.2"
			},
			"engines": {
				"node": ">= 0.4"
			}
		},
		"node_modules/setprototypeof": {
			"version": "1.2.0",
			"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
			"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
			"dev": true
		},
		"node_modules/shallow-clone": {
			"version": "0.1.2",
			"resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz",
			"integrity": "sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==",
			"dev": true,
			"dependencies": {
				"is-extendable": "^0.1.1",
				"kind-of": "^2.0.1",
				"lazy-cache": "^0.2.3",
				"mixin-object": "^2.0.1"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/shallow-clone/node_modules/kind-of": {
			"version": "2.0.1",
			"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz",
			"integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==",
			"dev": true,
			"dependencies": {
				"is-buffer": "^1.0.2"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/shallow-clone/node_modules/lazy-cache": {
			"version": "0.2.7",
			"resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz",
			"integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/shebang-command": {
			"version": "1.2.0",
			"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
			"integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
			"dev": true,
			"dependencies": {
				"shebang-regex": "^1.0.0"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/shebang-regex": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
			"integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/shell-quote": {
			"version": "1.8.1",
			"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
			"integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
			"dev": true,
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/side-channel": {
			"version": "1.0.6",
			"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
			"integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.7",
				"es-errors": "^1.3.0",
				"get-intrinsic": "^1.2.4",
				"object-inspect": "^1.13.1"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/signal-exit": {
			"version": "3.0.7",
			"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
			"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
			"dev": true
		},
		"node_modules/sirv": {
			"version": "2.0.4",
			"resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz",
			"integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==",
			"dev": true,
			"dependencies": {
				"@polka/url": "^1.0.0-next.24",
				"mrmime": "^2.0.0",
				"totalist": "^3.0.0"
			},
			"engines": {
				"node": ">= 10"
			}
		},
		"node_modules/sisteransi": {
			"version": "1.0.5",
			"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
			"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
			"dev": true
		},
		"node_modules/slash": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
			"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/slice-ansi": {
			"version": "4.0.0",
			"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
			"integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
			"dev": true,
			"dependencies": {
				"ansi-styles": "^4.0.0",
				"astral-regex": "^2.0.0",
				"is-fullwidth-code-point": "^3.0.0"
			},
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/chalk/slice-ansi?sponsor=1"
			}
		},
		"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/snake-case": {
			"version": "3.0.4",
			"resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz",
			"integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==",
			"dev": true,
			"dependencies": {
				"dot-case": "^3.0.4",
				"tslib": "^2.0.3"
			}
		},
		"node_modules/sockjs": {
			"version": "0.3.24",
			"resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz",
			"integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==",
			"dev": true,
			"dependencies": {
				"faye-websocket": "^0.11.3",
				"uuid": "^8.3.2",
				"websocket-driver": "^0.7.4"
			}
		},
		"node_modules/socks": {
			"version": "2.8.3",
			"resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
			"integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
			"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.3",
			"resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz",
			"integrity": "sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==",
			"dev": true,
			"dependencies": {
				"agent-base": "^7.1.1",
				"debug": "^4.3.4",
				"socks": "^2.7.1"
			},
			"engines": {
				"node": ">= 14"
			}
		},
		"node_modules/socks-proxy-agent/node_modules/agent-base": {
			"version": "7.1.1",
			"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
			"integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
			"dev": true,
			"dependencies": {
				"debug": "^4.3.4"
			},
			"engines": {
				"node": ">= 14"
			}
		},
		"node_modules/source-map": {
			"version": "0.7.4",
			"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
			"integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
			"dev": true,
			"engines": {
				"node": ">= 8"
			}
		},
		"node_modules/source-map-js": {
			"version": "1.2.0",
			"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
			"integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/source-map-loader": {
			"version": "3.0.2",
			"resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz",
			"integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==",
			"dev": true,
			"dependencies": {
				"abab": "^2.0.5",
				"iconv-lite": "^0.6.3",
				"source-map-js": "^1.0.1"
			},
			"engines": {
				"node": ">= 12.13.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/webpack"
			},
			"peerDependencies": {
				"webpack": "^5.0.0"
			}
		},
		"node_modules/source-map-support": {
			"version": "0.5.13",
			"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
			"integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
			"dev": true,
			"dependencies": {
				"buffer-from": "^1.0.0",
				"source-map": "^0.6.0"
			}
		},
		"node_modules/source-map-support/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,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/spawnd": {
			"version": "9.0.2",
			"resolved": "https://registry.npmjs.org/spawnd/-/spawnd-9.0.2.tgz",
			"integrity": "sha512-nl8DVHEDQ57IcKakzpjanspVChkMpGLuVwMR/eOn9cXE55Qr6luD2Kn06sA0ootRMdgrU4tInN6lA6ohTNvysw==",
			"dev": true,
			"dependencies": {
				"signal-exit": "^4.1.0",
				"tree-kill": "^1.2.2"
			},
			"engines": {
				"node": ">=16"
			}
		},
		"node_modules/spawnd/node_modules/signal-exit": {
			"version": "4.1.0",
			"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
			"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
			"dev": true,
			"engines": {
				"node": ">=14"
			},
			"funding": {
				"url": "https://github.com/sponsors/isaacs"
			}
		},
		"node_modules/spdx-correct": {
			"version": "3.2.0",
			"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
			"integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
			"dev": true,
			"dependencies": {
				"spdx-expression-parse": "^3.0.0",
				"spdx-license-ids": "^3.0.0"
			}
		},
		"node_modules/spdx-correct/node_modules/spdx-expression-parse": {
			"version": "3.0.1",
			"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
			"integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
			"dev": true,
			"dependencies": {
				"spdx-exceptions": "^2.1.0",
				"spdx-license-ids": "^3.0.0"
			}
		},
		"node_modules/spdx-exceptions": {
			"version": "2.5.0",
			"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
			"integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
			"dev": true
		},
		"node_modules/spdx-expression-parse": {
			"version": "4.0.0",
			"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz",
			"integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==",
			"dev": true,
			"dependencies": {
				"spdx-exceptions": "^2.1.0",
				"spdx-license-ids": "^3.0.0"
			}
		},
		"node_modules/spdx-license-ids": {
			"version": "3.0.17",
			"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz",
			"integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==",
			"dev": true
		},
		"node_modules/spdy": {
			"version": "4.0.2",
			"resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
			"integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
			"dev": true,
			"dependencies": {
				"debug": "^4.1.0",
				"handle-thing": "^2.0.0",
				"http-deceiver": "^1.2.7",
				"select-hose": "^2.0.0",
				"spdy-transport": "^3.0.0"
			},
			"engines": {
				"node": ">=6.0.0"
			}
		},
		"node_modules/spdy-transport": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
			"integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
			"dev": true,
			"dependencies": {
				"debug": "^4.1.0",
				"detect-node": "^2.0.4",
				"hpack.js": "^2.1.6",
				"obuf": "^1.1.2",
				"readable-stream": "^3.0.6",
				"wbuf": "^1.7.3"
			}
		},
		"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.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/stack-utils": {
			"version": "2.0.6",
			"resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
			"integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
			"dev": true,
			"dependencies": {
				"escape-string-regexp": "^2.0.0"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/stack-utils/node_modules/escape-string-regexp": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
			"integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/stackframe": {
			"version": "1.3.4",
			"resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz",
			"integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==",
			"dev": true
		},
		"node_modules/statuses": {
			"version": "2.0.1",
			"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
			"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
			"dev": true,
			"engines": {
				"node": ">= 0.8"
			}
		},
		"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": {
				"fast-fifo": "^1.1.0",
				"queue-tick": "^1.0.1"
			},
			"optionalDependencies": {
				"bare-events": "^2.2.0"
			}
		},
		"node_modules/string_decoder": {
			"version": "1.3.0",
			"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
			"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
			"dev": true,
			"dependencies": {
				"safe-buffer": "~5.2.0"
			}
		},
		"node_modules/string-length": {
			"version": "4.0.2",
			"resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
			"integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
			"dev": true,
			"dependencies": {
				"char-regex": "^1.0.2",
				"strip-ansi": "^6.0.0"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"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": {
				"emoji-regex": "^8.0.0",
				"is-fullwidth-code-point": "^3.0.0",
				"strip-ansi": "^6.0.1"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/string-width/node_modules/emoji-regex": {
			"version": "8.0.0",
			"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
			"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
			"dev": true
		},
		"node_modules/string.prototype.matchall": {
			"version": "4.0.11",
			"resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz",
			"integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.7",
				"define-properties": "^1.2.1",
				"es-abstract": "^1.23.2",
				"es-errors": "^1.3.0",
				"es-object-atoms": "^1.0.0",
				"get-intrinsic": "^1.2.4",
				"gopd": "^1.0.1",
				"has-symbols": "^1.0.3",
				"internal-slot": "^1.0.7",
				"regexp.prototype.flags": "^1.5.2",
				"set-function-name": "^2.0.2",
				"side-channel": "^1.0.6"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/string.prototype.trim": {
			"version": "1.2.9",
			"resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
			"integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.7",
				"define-properties": "^1.2.1",
				"es-abstract": "^1.23.0",
				"es-object-atoms": "^1.0.0"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/string.prototype.trimend": {
			"version": "1.0.8",
			"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
			"integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.7",
				"define-properties": "^1.2.1",
				"es-object-atoms": "^1.0.0"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/string.prototype.trimstart": {
			"version": "1.0.8",
			"resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
			"integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.7",
				"define-properties": "^1.2.1",
				"es-object-atoms": "^1.0.0"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/strip-ansi": {
			"version": "6.0.1",
			"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
			"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
			"dev": true,
			"dependencies": {
				"ansi-regex": "^5.0.1"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/strip-bom": {
			"version": "4.0.0",
			"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
			"integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/strip-final-newline": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
			"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
			"dev": true,
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/strip-indent": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
			"integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
			"dev": true,
			"dependencies": {
				"min-indent": "^1.0.0"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/strip-json-comments": {
			"version": "3.1.1",
			"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
			"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
			"dev": true,
			"engines": {
				"node": ">=8"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/strip-outer": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz",
			"integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==",
			"dev": true,
			"dependencies": {
				"escape-string-regexp": "^1.0.2"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/strip-outer/node_modules/escape-string-regexp": {
			"version": "1.0.5",
			"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
			"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
			"dev": true,
			"engines": {
				"node": ">=0.8.0"
			}
		},
		"node_modules/style-search": {
			"version": "0.1.0",
			"resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
			"integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==",
			"dev": true
		},
		"node_modules/stylehacks": {
			"version": "6.1.1",
			"resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz",
			"integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==",
			"dev": true,
			"dependencies": {
				"browserslist": "^4.23.0",
				"postcss-selector-parser": "^6.0.16"
			},
			"engines": {
				"node": "^14 || ^16 || >=18.0"
			},
			"peerDependencies": {
				"postcss": "^8.4.31"
			}
		},
		"node_modules/stylelint": {
			"version": "14.16.1",
			"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz",
			"integrity": "sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==",
			"dev": true,
			"dependencies": {
				"@csstools/selector-specificity": "^2.0.2",
				"balanced-match": "^2.0.0",
				"colord": "^2.9.3",
				"cosmiconfig": "^7.1.0",
				"css-functions-list": "^3.1.0",
				"debug": "^4.3.4",
				"fast-glob": "^3.2.12",
				"fastest-levenshtein": "^1.0.16",
				"file-entry-cache": "^6.0.1",
				"global-modules": "^2.0.0",
				"globby": "^11.1.0",
				"globjoin": "^0.1.4",
				"html-tags": "^3.2.0",
				"ignore": "^5.2.1",
				"import-lazy": "^4.0.0",
				"imurmurhash": "^0.1.4",
				"is-plain-object": "^5.0.0",
				"known-css-properties": "^0.26.0",
				"mathml-tag-names": "^2.1.3",
				"meow": "^9.0.0",
				"micromatch": "^4.0.5",
				"normalize-path": "^3.0.0",
				"picocolors": "^1.0.0",
				"postcss": "^8.4.19",
				"postcss-media-query-parser": "^0.2.3",
				"postcss-resolve-nested-selector": "^0.1.1",
				"postcss-safe-parser": "^6.0.0",
				"postcss-selector-parser": "^6.0.11",
				"postcss-value-parser": "^4.2.0",
				"resolve-from": "^5.0.0",
				"string-width": "^4.2.3",
				"strip-ansi": "^6.0.1",
				"style-search": "^0.1.0",
				"supports-hyperlinks": "^2.3.0",
				"svg-tags": "^1.0.0",
				"table": "^6.8.1",
				"v8-compile-cache": "^2.3.0",
				"write-file-atomic": "^4.0.2"
			},
			"bin": {
				"stylelint": "bin/stylelint.js"
			},
			"engines": {
				"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/stylelint"
			}
		},
		"node_modules/stylelint-config-recommended": {
			"version": "6.0.0",
			"resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-6.0.0.tgz",
			"integrity": "sha512-ZorSSdyMcxWpROYUvLEMm0vSZud2uB7tX1hzBZwvVY9SV/uly4AvvJPPhCcymZL3fcQhEQG5AELmrxWqtmzacw==",
			"dev": true,
			"peerDependencies": {
				"stylelint": "^14.0.0"
			}
		},
		"node_modules/stylelint-config-recommended-scss": {
			"version": "5.0.2",
			"resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-5.0.2.tgz",
			"integrity": "sha512-b14BSZjcwW0hqbzm9b0S/ScN2+3CO3O4vcMNOw2KGf8lfVSwJ4p5TbNEXKwKl1+0FMtgRXZj6DqVUe/7nGnuBg==",
			"dev": true,
			"dependencies": {
				"postcss-scss": "^4.0.2",
				"stylelint-config-recommended": "^6.0.0",
				"stylelint-scss": "^4.0.0"
			},
			"peerDependencies": {
				"stylelint": "^14.0.0"
			}
		},
		"node_modules/stylelint-scss": {
			"version": "4.7.0",
			"resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.7.0.tgz",
			"integrity": "sha512-TSUgIeS0H3jqDZnby1UO1Qv3poi1N8wUYIJY6D1tuUq2MN3lwp/rITVo0wD+1SWTmRm0tNmGO0b7nKInnqF6Hg==",
			"dev": true,
			"dependencies": {
				"postcss-media-query-parser": "^0.2.3",
				"postcss-resolve-nested-selector": "^0.1.1",
				"postcss-selector-parser": "^6.0.11",
				"postcss-value-parser": "^4.2.0"
			},
			"peerDependencies": {
				"stylelint": "^14.5.1 || ^15.0.0"
			}
		},
		"node_modules/stylelint/node_modules/balanced-match": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
			"integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
			"dev": true
		},
		"node_modules/stylelint/node_modules/cosmiconfig": {
			"version": "7.1.0",
			"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
			"integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
			"dev": true,
			"dependencies": {
				"@types/parse-json": "^4.0.0",
				"import-fresh": "^3.2.1",
				"parse-json": "^5.0.0",
				"path-type": "^4.0.0",
				"yaml": "^1.10.0"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/stylelint/node_modules/global-modules": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
			"integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
			"dev": true,
			"dependencies": {
				"global-prefix": "^3.0.0"
			},
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/stylelint/node_modules/global-prefix": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
			"integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
			"dev": true,
			"dependencies": {
				"ini": "^1.3.5",
				"kind-of": "^6.0.2",
				"which": "^1.3.1"
			},
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/stylelint/node_modules/is-plain-object": {
			"version": "5.0.0",
			"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
			"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/stylelint/node_modules/kind-of": {
			"version": "6.0.3",
			"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
			"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/supports-color": {
			"version": "7.2.0",
			"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
			"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
			"dev": true,
			"dependencies": {
				"has-flag": "^4.0.0"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/supports-hyperlinks": {
			"version": "2.3.0",
			"resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz",
			"integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==",
			"dev": true,
			"dependencies": {
				"has-flag": "^4.0.0",
				"supports-color": "^7.0.0"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/supports-preserve-symlinks-flag": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
			"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
			"dev": true,
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/svg-parser": {
			"version": "2.0.4",
			"resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz",
			"integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==",
			"dev": true
		},
		"node_modules/svg-tags": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
			"integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
			"dev": true
		},
		"node_modules/svgo": {
			"version": "3.2.0",
			"resolved": "https://registry.npmjs.org/svgo/-/svgo-3.2.0.tgz",
			"integrity": "sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==",
			"dev": true,
			"dependencies": {
				"@trysound/sax": "0.2.0",
				"commander": "^7.2.0",
				"css-select": "^5.1.0",
				"css-tree": "^2.3.1",
				"css-what": "^6.1.0",
				"csso": "^5.0.5",
				"picocolors": "^1.0.0"
			},
			"bin": {
				"svgo": "bin/svgo"
			},
			"engines": {
				"node": ">=14.0.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/svgo"
			}
		},
		"node_modules/svgo/node_modules/commander": {
			"version": "7.2.0",
			"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
			"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
			"dev": true,
			"engines": {
				"node": ">= 10"
			}
		},
		"node_modules/symbol-tree": {
			"version": "3.2.4",
			"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
			"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
			"dev": true
		},
		"node_modules/synckit": {
			"version": "0.8.8",
			"resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz",
			"integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==",
			"dev": true,
			"dependencies": {
				"@pkgr/core": "^0.1.0",
				"tslib": "^2.6.2"
			},
			"engines": {
				"node": "^14.18.0 || >=16.0.0"
			},
			"funding": {
				"url": "https://opencollective.com/unts"
			}
		},
		"node_modules/table": {
			"version": "6.8.2",
			"resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz",
			"integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==",
			"dev": true,
			"dependencies": {
				"ajv": "^8.0.1",
				"lodash.truncate": "^4.4.2",
				"slice-ansi": "^4.0.0",
				"string-width": "^4.2.3",
				"strip-ansi": "^6.0.1"
			},
			"engines": {
				"node": ">=10.0.0"
			}
		},
		"node_modules/table/node_modules/ajv": {
			"version": "8.12.0",
			"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
			"integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
			"dev": true,
			"dependencies": {
				"fast-deep-equal": "^3.1.1",
				"json-schema-traverse": "^1.0.0",
				"require-from-string": "^2.0.2",
				"uri-js": "^4.2.2"
			},
			"funding": {
				"type": "github",
				"url": "https://github.com/sponsors/epoberezkin"
			}
		},
		"node_modules/table/node_modules/json-schema-traverse": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
			"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
			"dev": true
		},
		"node_modules/tannin": {
			"version": "1.2.0",
			"resolved": "https://registry.npmjs.org/tannin/-/tannin-1.2.0.tgz",
			"integrity": "sha512-U7GgX/RcSeUETbV7gYgoz8PD7Ni4y95pgIP/Z6ayI3CfhSujwKEBlGFTCRN+Aqnuyf4AN2yHL+L8x+TCGjb9uA==",
			"dev": true,
			"dependencies": {
				"@tannin/plural-forms": "^1.1.0"
			}
		},
		"node_modules/tapable": {
			"version": "2.2.1",
			"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
			"integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
			"dev": true,
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/tar-fs": {
			"version": "2.1.1",
			"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
			"integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
			"dev": true,
			"dependencies": {
				"chownr": "^1.1.1",
				"mkdirp-classic": "^0.5.2",
				"pump": "^3.0.0",
				"tar-stream": "^2.1.4"
			}
		},
		"node_modules/tar-stream": {
			"version": "2.2.0",
			"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
			"integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
			"dev": true,
			"dependencies": {
				"bl": "^4.0.3",
				"end-of-stream": "^1.4.1",
				"fs-constants": "^1.0.0",
				"inherits": "^2.0.3",
				"readable-stream": "^3.1.1"
			},
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/terser": {
			"version": "5.30.4",
			"resolved": "https://registry.npmjs.org/terser/-/terser-5.30.4.tgz",
			"integrity": "sha512-xRdd0v64a8mFK9bnsKVdoNP9GQIKUAaJPTaqEQDL4w/J8WaW4sWXXoMZ+6SimPkfT5bElreXf8m9HnmPc3E1BQ==",
			"dev": true,
			"dependencies": {
				"@jridgewell/source-map": "^0.3.3",
				"acorn": "^8.8.2",
				"commander": "^2.20.0",
				"source-map-support": "~0.5.20"
			},
			"bin": {
				"terser": "bin/terser"
			},
			"engines": {
				"node": ">=10"
			}
		},
		"node_modules/terser-webpack-plugin": {
			"version": "5.3.10",
			"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
			"integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
			"dev": true,
			"dependencies": {
				"@jridgewell/trace-mapping": "^0.3.20",
				"jest-worker": "^27.4.5",
				"schema-utils": "^3.1.1",
				"serialize-javascript": "^6.0.1",
				"terser": "^5.26.0"
			},
			"engines": {
				"node": ">= 10.13.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/webpack"
			},
			"peerDependencies": {
				"webpack": "^5.1.0"
			},
			"peerDependenciesMeta": {
				"@swc/core": {
					"optional": true
				},
				"esbuild": {
					"optional": true
				},
				"uglify-js": {
					"optional": true
				}
			}
		},
		"node_modules/terser-webpack-plugin/node_modules/jest-worker": {
			"version": "27.5.1",
			"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
			"integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
			"dev": true,
			"dependencies": {
				"@types/node": "*",
				"merge-stream": "^2.0.0",
				"supports-color": "^8.0.0"
			},
			"engines": {
				"node": ">= 10.13.0"
			}
		},
		"node_modules/terser-webpack-plugin/node_modules/supports-color": {
			"version": "8.1.1",
			"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
			"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
			"dev": true,
			"dependencies": {
				"has-flag": "^4.0.0"
			},
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/chalk/supports-color?sponsor=1"
			}
		},
		"node_modules/terser/node_modules/commander": {
			"version": "2.20.3",
			"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
			"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
			"dev": true
		},
		"node_modules/terser/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,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/terser/node_modules/source-map-support": {
			"version": "0.5.21",
			"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
			"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
			"dev": true,
			"dependencies": {
				"buffer-from": "^1.0.0",
				"source-map": "^0.6.0"
			}
		},
		"node_modules/test-exclude": {
			"version": "6.0.0",
			"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
			"integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
			"dev": true,
			"dependencies": {
				"@istanbuljs/schema": "^0.1.2",
				"glob": "^7.1.4",
				"minimatch": "^3.0.4"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/test-exclude/node_modules/brace-expansion": {
			"version": "1.1.11",
			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
			"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
			"dev": true,
			"dependencies": {
				"balanced-match": "^1.0.0",
				"concat-map": "0.0.1"
			}
		},
		"node_modules/test-exclude/node_modules/minimatch": {
			"version": "3.1.2",
			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
			"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
			"dev": true,
			"dependencies": {
				"brace-expansion": "^1.1.7"
			},
			"engines": {
				"node": "*"
			}
		},
		"node_modules/text-table": {
			"version": "0.2.0",
			"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
			"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
			"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/through": {
			"version": "2.3.8",
			"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
			"integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
			"dev": true
		},
		"node_modules/thunky": {
			"version": "1.1.0",
			"resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
			"integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
			"dev": true
		},
		"node_modules/tmpl": {
			"version": "1.0.5",
			"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
			"integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
			"dev": true
		},
		"node_modules/to-fast-properties": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
			"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
			"dev": true,
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/to-regex-range": {
			"version": "5.0.1",
			"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
			"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
			"dev": true,
			"dependencies": {
				"is-number": "^7.0.0"
			},
			"engines": {
				"node": ">=8.0"
			}
		},
		"node_modules/toidentifier": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
			"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
			"dev": true,
			"engines": {
				"node": ">=0.6"
			}
		},
		"node_modules/totalist": {
			"version": "3.0.1",
			"resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
			"integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
			"dev": true,
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/tough-cookie": {
			"version": "4.1.3",
			"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
			"integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
			"dev": true,
			"dependencies": {
				"psl": "^1.1.33",
				"punycode": "^2.1.1",
				"universalify": "^0.2.0",
				"url-parse": "^1.5.3"
			},
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/tr46": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
			"integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
			"dev": true,
			"dependencies": {
				"punycode": "^2.1.1"
			},
			"engines": {
				"node": ">=12"
			}
		},
		"node_modules/tree-kill": {
			"version": "1.2.2",
			"resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
			"integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
			"dev": true,
			"bin": {
				"tree-kill": "cli.js"
			}
		},
		"node_modules/trim-newlines": {
			"version": "3.0.1",
			"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
			"integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/trim-repeated": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
			"integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==",
			"dev": true,
			"dependencies": {
				"escape-string-regexp": "^1.0.2"
			},
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/trim-repeated/node_modules/escape-string-regexp": {
			"version": "1.0.5",
			"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
			"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
			"dev": true,
			"engines": {
				"node": ">=0.8.0"
			}
		},
		"node_modules/ts-api-utils": {
			"version": "1.3.0",
			"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
			"integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
			"dev": true,
			"engines": {
				"node": ">=16"
			},
			"peerDependencies": {
				"typescript": ">=4.2.0"
			}
		},
		"node_modules/tsconfig-paths": {
			"version": "3.15.0",
			"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
			"integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
			"dev": true,
			"dependencies": {
				"@types/json5": "^0.0.29",
				"json5": "^1.0.2",
				"minimist": "^1.2.6",
				"strip-bom": "^3.0.0"
			}
		},
		"node_modules/tsconfig-paths/node_modules/json5": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
			"integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
			"dev": true,
			"dependencies": {
				"minimist": "^1.2.0"
			},
			"bin": {
				"json5": "lib/cli.js"
			}
		},
		"node_modules/tsconfig-paths/node_modules/strip-bom": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
			"integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
			"dev": true,
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/tslib": {
			"version": "2.6.2",
			"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
			"integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
			"dev": true
		},
		"node_modules/tsutils": {
			"version": "3.21.0",
			"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
			"integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
			"dev": true,
			"dependencies": {
				"tslib": "^1.8.1"
			},
			"engines": {
				"node": ">= 6"
			},
			"peerDependencies": {
				"typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
			}
		},
		"node_modules/tsutils/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/type-check": {
			"version": "0.4.0",
			"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
			"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
			"dev": true,
			"dependencies": {
				"prelude-ls": "^1.2.1"
			},
			"engines": {
				"node": ">= 0.8.0"
			}
		},
		"node_modules/type-detect": {
			"version": "4.0.8",
			"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
			"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
			"dev": true,
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/type-fest": {
			"version": "0.21.3",
			"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
			"integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
			"dev": true,
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/type-is": {
			"version": "1.6.18",
			"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
			"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
			"dev": true,
			"dependencies": {
				"media-typer": "0.3.0",
				"mime-types": "~2.1.24"
			},
			"engines": {
				"node": ">= 0.6"
			}
		},
		"node_modules/typed-array-buffer": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
			"integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.7",
				"es-errors": "^1.3.0",
				"is-typed-array": "^1.1.13"
			},
			"engines": {
				"node": ">= 0.4"
			}
		},
		"node_modules/typed-array-byte-length": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
			"integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.7",
				"for-each": "^0.3.3",
				"gopd": "^1.0.1",
				"has-proto": "^1.0.3",
				"is-typed-array": "^1.1.13"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/typed-array-byte-offset": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
			"integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
			"dev": true,
			"dependencies": {
				"available-typed-arrays": "^1.0.7",
				"call-bind": "^1.0.7",
				"for-each": "^0.3.3",
				"gopd": "^1.0.1",
				"has-proto": "^1.0.3",
				"is-typed-array": "^1.1.13"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/typed-array-length": {
			"version": "1.0.6",
			"resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
			"integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.7",
				"for-each": "^0.3.3",
				"gopd": "^1.0.1",
				"has-proto": "^1.0.3",
				"is-typed-array": "^1.1.13",
				"possible-typed-array-names": "^1.0.0"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"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/typescript": {
			"version": "5.4.5",
			"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
			"integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
			"dev": true,
			"peer": true,
			"bin": {
				"tsc": "bin/tsc",
				"tsserver": "bin/tsserver"
			},
			"engines": {
				"node": ">=14.17"
			}
		},
		"node_modules/uc.micro": {
			"version": "1.0.6",
			"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
			"integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
			"dev": true
		},
		"node_modules/unbox-primitive": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
			"integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
			"dev": true,
			"dependencies": {
				"call-bind": "^1.0.2",
				"has-bigints": "^1.0.2",
				"has-symbols": "^1.0.3",
				"which-boxed-primitive": "^1.0.2"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"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/undici-types": {
			"version": "5.26.5",
			"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
			"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
			"dev": true
		},
		"node_modules/unicode-canonical-property-names-ecmascript": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
			"integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
			"dev": true,
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/unicode-match-property-ecmascript": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
			"integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
			"dev": true,
			"dependencies": {
				"unicode-canonical-property-names-ecmascript": "^2.0.0",
				"unicode-property-aliases-ecmascript": "^2.0.0"
			},
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/unicode-match-property-value-ecmascript": {
			"version": "2.1.0",
			"resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
			"integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
			"dev": true,
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/unicode-property-aliases-ecmascript": {
			"version": "2.1.0",
			"resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
			"integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
			"dev": true,
			"engines": {
				"node": ">=4"
			}
		},
		"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",
			"integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
			"dev": true,
			"engines": {
				"node": ">= 4.0.0"
			}
		},
		"node_modules/unpipe": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
			"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
			"dev": true,
			"engines": {
				"node": ">= 0.8"
			}
		},
		"node_modules/update-browserslist-db": {
			"version": "1.0.13",
			"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
			"integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
			"dev": true,
			"funding": [
				{
					"type": "opencollective",
					"url": "https://opencollective.com/browserslist"
				},
				{
					"type": "tidelift",
					"url": "https://tidelift.com/funding/github/npm/browserslist"
				},
				{
					"type": "github",
					"url": "https://github.com/sponsors/ai"
				}
			],
			"dependencies": {
				"escalade": "^3.1.1",
				"picocolors": "^1.0.0"
			},
			"bin": {
				"update-browserslist-db": "cli.js"
			},
			"peerDependencies": {
				"browserslist": ">= 4.21.0"
			}
		},
		"node_modules/upper-case": {
			"version": "2.0.2",
			"resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz",
			"integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==",
			"dev": true,
			"dependencies": {
				"tslib": "^2.0.3"
			}
		},
		"node_modules/upper-case-first": {
			"version": "2.0.2",
			"resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz",
			"integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==",
			"dev": true,
			"dependencies": {
				"tslib": "^2.0.3"
			}
		},
		"node_modules/uri-js": {
			"version": "4.4.1",
			"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
			"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
			"dev": true,
			"dependencies": {
				"punycode": "^2.1.0"
			}
		},
		"node_modules/url-loader": {
			"version": "4.1.1",
			"resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz",
			"integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==",
			"dev": true,
			"dependencies": {
				"loader-utils": "^2.0.0",
				"mime-types": "^2.1.27",
				"schema-utils": "^3.0.0"
			},
			"engines": {
				"node": ">= 10.13.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/webpack"
			},
			"peerDependencies": {
				"file-loader": "*",
				"webpack": "^4.0.0 || ^5.0.0"
			},
			"peerDependenciesMeta": {
				"file-loader": {
					"optional": true
				}
			}
		},
		"node_modules/url-parse": {
			"version": "1.5.10",
			"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
			"integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
			"dev": true,
			"dependencies": {
				"querystringify": "^2.1.1",
				"requires-port": "^1.0.0"
			}
		},
		"node_modules/util-deprecate": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
			"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
			"dev": true
		},
		"node_modules/utils-merge": {
			"version": "1.0.1",
			"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
			"integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
			"dev": true,
			"engines": {
				"node": ">= 0.4.0"
			}
		},
		"node_modules/uuid": {
			"version": "8.3.2",
			"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
			"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
			"dev": true,
			"bin": {
				"uuid": "dist/bin/uuid"
			}
		},
		"node_modules/v8-compile-cache": {
			"version": "2.4.0",
			"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz",
			"integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==",
			"dev": true
		},
		"node_modules/v8-to-istanbul": {
			"version": "9.2.0",
			"resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz",
			"integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==",
			"dev": true,
			"dependencies": {
				"@jridgewell/trace-mapping": "^0.3.12",
				"@types/istanbul-lib-coverage": "^2.0.1",
				"convert-source-map": "^2.0.0"
			},
			"engines": {
				"node": ">=10.12.0"
			}
		},
		"node_modules/validate-npm-package-license": {
			"version": "3.0.4",
			"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
			"integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
			"dev": true,
			"dependencies": {
				"spdx-correct": "^3.0.0",
				"spdx-expression-parse": "^3.0.0"
			}
		},
		"node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": {
			"version": "3.0.1",
			"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
			"integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
			"dev": true,
			"dependencies": {
				"spdx-exceptions": "^2.1.0",
				"spdx-license-ids": "^3.0.0"
			}
		},
		"node_modules/validate-npm-package-name": {
			"version": "5.0.0",
			"resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz",
			"integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==",
			"dev": true,
			"dependencies": {
				"builtins": "^5.0.0"
			},
			"engines": {
				"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
			}
		},
		"node_modules/vary": {
			"version": "1.1.2",
			"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
			"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
			"dev": true,
			"engines": {
				"node": ">= 0.8"
			}
		},
		"node_modules/w3c-xmlserializer": {
			"version": "4.0.0",
			"resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz",
			"integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==",
			"dev": true,
			"dependencies": {
				"xml-name-validator": "^4.0.0"
			},
			"engines": {
				"node": ">=14"
			}
		},
		"node_modules/wait-on": {
			"version": "7.2.0",
			"resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.2.0.tgz",
			"integrity": "sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==",
			"dev": true,
			"dependencies": {
				"axios": "^1.6.1",
				"joi": "^17.11.0",
				"lodash": "^4.17.21",
				"minimist": "^1.2.8",
				"rxjs": "^7.8.1"
			},
			"bin": {
				"wait-on": "bin/wait-on"
			},
			"engines": {
				"node": ">=12.0.0"
			}
		},
		"node_modules/walker": {
			"version": "1.0.8",
			"resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
			"integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
			"dev": true,
			"dependencies": {
				"makeerror": "1.0.12"
			}
		},
		"node_modules/watchpack": {
			"version": "2.4.1",
			"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz",
			"integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==",
			"dev": true,
			"dependencies": {
				"glob-to-regexp": "^0.4.1",
				"graceful-fs": "^4.1.2"
			},
			"engines": {
				"node": ">=10.13.0"
			}
		},
		"node_modules/wbuf": {
			"version": "1.7.3",
			"resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
			"integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
			"dev": true,
			"dependencies": {
				"minimalistic-assert": "^1.0.0"
			}
		},
		"node_modules/web-vitals": {
			"version": "3.5.2",
			"resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-3.5.2.tgz",
			"integrity": "sha512-c0rhqNcHXRkY/ogGDJQxZ9Im9D19hDihbzSQJrsioex+KnFgmMzBiy57Z1EjkhX/+OjyBpclDCzz2ITtjokFmg==",
			"dev": true
		},
		"node_modules/webidl-conversions": {
			"version": "7.0.0",
			"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
			"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
			"dev": true,
			"engines": {
				"node": ">=12"
			}
		},
		"node_modules/webpack": {
			"version": "5.91.0",
			"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz",
			"integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==",
			"dev": true,
			"dependencies": {
				"@types/eslint-scope": "^3.7.3",
				"@types/estree": "^1.0.5",
				"@webassemblyjs/ast": "^1.12.1",
				"@webassemblyjs/wasm-edit": "^1.12.1",
				"@webassemblyjs/wasm-parser": "^1.12.1",
				"acorn": "^8.7.1",
				"acorn-import-assertions": "^1.9.0",
				"browserslist": "^4.21.10",
				"chrome-trace-event": "^1.0.2",
				"enhanced-resolve": "^5.16.0",
				"es-module-lexer": "^1.2.1",
				"eslint-scope": "5.1.1",
				"events": "^3.2.0",
				"glob-to-regexp": "^0.4.1",
				"graceful-fs": "^4.2.11",
				"json-parse-even-better-errors": "^2.3.1",
				"loader-runner": "^4.2.0",
				"mime-types": "^2.1.27",
				"neo-async": "^2.6.2",
				"schema-utils": "^3.2.0",
				"tapable": "^2.1.1",
				"terser-webpack-plugin": "^5.3.10",
				"watchpack": "^2.4.1",
				"webpack-sources": "^3.2.3"
			},
			"bin": {
				"webpack": "bin/webpack.js"
			},
			"engines": {
				"node": ">=10.13.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/webpack"
			},
			"peerDependenciesMeta": {
				"webpack-cli": {
					"optional": true
				}
			}
		},
		"node_modules/webpack-bundle-analyzer": {
			"version": "4.10.2",
			"resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz",
			"integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==",
			"dev": true,
			"dependencies": {
				"@discoveryjs/json-ext": "0.5.7",
				"acorn": "^8.0.4",
				"acorn-walk": "^8.0.0",
				"commander": "^7.2.0",
				"debounce": "^1.2.1",
				"escape-string-regexp": "^4.0.0",
				"gzip-size": "^6.0.0",
				"html-escaper": "^2.0.2",
				"opener": "^1.5.2",
				"picocolors": "^1.0.0",
				"sirv": "^2.0.3",
				"ws": "^7.3.1"
			},
			"bin": {
				"webpack-bundle-analyzer": "lib/bin/analyzer.js"
			},
			"engines": {
				"node": ">= 10.13.0"
			}
		},
		"node_modules/webpack-bundle-analyzer/node_modules/commander": {
			"version": "7.2.0",
			"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
			"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
			"dev": true,
			"engines": {
				"node": ">= 10"
			}
		},
		"node_modules/webpack-bundle-analyzer/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/webpack-cli": {
			"version": "5.1.4",
			"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz",
			"integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==",
			"dev": true,
			"dependencies": {
				"@discoveryjs/json-ext": "^0.5.0",
				"@webpack-cli/configtest": "^2.1.1",
				"@webpack-cli/info": "^2.0.2",
				"@webpack-cli/serve": "^2.0.5",
				"colorette": "^2.0.14",
				"commander": "^10.0.1",
				"cross-spawn": "^7.0.3",
				"envinfo": "^7.7.3",
				"fastest-levenshtein": "^1.0.12",
				"import-local": "^3.0.2",
				"interpret": "^3.1.1",
				"rechoir": "^0.8.0",
				"webpack-merge": "^5.7.3"
			},
			"bin": {
				"webpack-cli": "bin/cli.js"
			},
			"engines": {
				"node": ">=14.15.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/webpack"
			},
			"peerDependencies": {
				"webpack": "5.x.x"
			},
			"peerDependenciesMeta": {
				"@webpack-cli/generators": {
					"optional": true
				},
				"webpack-bundle-analyzer": {
					"optional": true
				},
				"webpack-dev-server": {
					"optional": true
				}
			}
		},
		"node_modules/webpack-cli/node_modules/commander": {
			"version": "10.0.1",
			"resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
			"integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
			"dev": true,
			"engines": {
				"node": ">=14"
			}
		},
		"node_modules/webpack-cli/node_modules/cross-spawn": {
			"version": "7.0.3",
			"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
			"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
			"dev": true,
			"dependencies": {
				"path-key": "^3.1.0",
				"shebang-command": "^2.0.0",
				"which": "^2.0.1"
			},
			"engines": {
				"node": ">= 8"
			}
		},
		"node_modules/webpack-cli/node_modules/shebang-command": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
			"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
			"dev": true,
			"dependencies": {
				"shebang-regex": "^3.0.0"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/webpack-cli/node_modules/shebang-regex": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
			"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
			"dev": true,
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/webpack-cli/node_modules/which": {
			"version": "2.0.2",
			"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
			"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
			"dev": true,
			"dependencies": {
				"isexe": "^2.0.0"
			},
			"bin": {
				"node-which": "bin/node-which"
			},
			"engines": {
				"node": ">= 8"
			}
		},
		"node_modules/webpack-dev-middleware": {
			"version": "5.3.4",
			"resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz",
			"integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==",
			"dev": true,
			"dependencies": {
				"colorette": "^2.0.10",
				"memfs": "^3.4.3",
				"mime-types": "^2.1.31",
				"range-parser": "^1.2.1",
				"schema-utils": "^4.0.0"
			},
			"engines": {
				"node": ">= 12.13.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/webpack"
			},
			"peerDependencies": {
				"webpack": "^4.0.0 || ^5.0.0"
			}
		},
		"node_modules/webpack-dev-middleware/node_modules/ajv": {
			"version": "8.12.0",
			"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
			"integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
			"dev": true,
			"dependencies": {
				"fast-deep-equal": "^3.1.1",
				"json-schema-traverse": "^1.0.0",
				"require-from-string": "^2.0.2",
				"uri-js": "^4.2.2"
			},
			"funding": {
				"type": "github",
				"url": "https://github.com/sponsors/epoberezkin"
			}
		},
		"node_modules/webpack-dev-middleware/node_modules/ajv-keywords": {
			"version": "5.1.0",
			"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
			"integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
			"dev": true,
			"dependencies": {
				"fast-deep-equal": "^3.1.3"
			},
			"peerDependencies": {
				"ajv": "^8.8.2"
			}
		},
		"node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
			"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
			"dev": true
		},
		"node_modules/webpack-dev-middleware/node_modules/schema-utils": {
			"version": "4.2.0",
			"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
			"integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
			"dev": true,
			"dependencies": {
				"@types/json-schema": "^7.0.9",
				"ajv": "^8.9.0",
				"ajv-formats": "^2.1.1",
				"ajv-keywords": "^5.1.0"
			},
			"engines": {
				"node": ">= 12.13.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/webpack"
			}
		},
		"node_modules/webpack-dev-server": {
			"version": "4.15.2",
			"resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz",
			"integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==",
			"dev": true,
			"dependencies": {
				"@types/bonjour": "^3.5.9",
				"@types/connect-history-api-fallback": "^1.3.5",
				"@types/express": "^4.17.13",
				"@types/serve-index": "^1.9.1",
				"@types/serve-static": "^1.13.10",
				"@types/sockjs": "^0.3.33",
				"@types/ws": "^8.5.5",
				"ansi-html-community": "^0.0.8",
				"bonjour-service": "^1.0.11",
				"chokidar": "^3.5.3",
				"colorette": "^2.0.10",
				"compression": "^1.7.4",
				"connect-history-api-fallback": "^2.0.0",
				"default-gateway": "^6.0.3",
				"express": "^4.17.3",
				"graceful-fs": "^4.2.6",
				"html-entities": "^2.3.2",
				"http-proxy-middleware": "^2.0.3",
				"ipaddr.js": "^2.0.1",
				"launch-editor": "^2.6.0",
				"open": "^8.0.9",
				"p-retry": "^4.5.0",
				"rimraf": "^3.0.2",
				"schema-utils": "^4.0.0",
				"selfsigned": "^2.1.1",
				"serve-index": "^1.9.1",
				"sockjs": "^0.3.24",
				"spdy": "^4.0.2",
				"webpack-dev-middleware": "^5.3.4",
				"ws": "^8.13.0"
			},
			"bin": {
				"webpack-dev-server": "bin/webpack-dev-server.js"
			},
			"engines": {
				"node": ">= 12.13.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/webpack"
			},
			"peerDependencies": {
				"webpack": "^4.37.0 || ^5.0.0"
			},
			"peerDependenciesMeta": {
				"webpack": {
					"optional": true
				},
				"webpack-cli": {
					"optional": true
				}
			}
		},
		"node_modules/webpack-dev-server/node_modules/ajv": {
			"version": "8.12.0",
			"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
			"integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
			"dev": true,
			"dependencies": {
				"fast-deep-equal": "^3.1.1",
				"json-schema-traverse": "^1.0.0",
				"require-from-string": "^2.0.2",
				"uri-js": "^4.2.2"
			},
			"funding": {
				"type": "github",
				"url": "https://github.com/sponsors/epoberezkin"
			}
		},
		"node_modules/webpack-dev-server/node_modules/ajv-keywords": {
			"version": "5.1.0",
			"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
			"integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
			"dev": true,
			"dependencies": {
				"fast-deep-equal": "^3.1.3"
			},
			"peerDependencies": {
				"ajv": "^8.8.2"
			}
		},
		"node_modules/webpack-dev-server/node_modules/json-schema-traverse": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
			"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
			"dev": true
		},
		"node_modules/webpack-dev-server/node_modules/rimraf": {
			"version": "3.0.2",
			"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
			"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
			"dev": true,
			"dependencies": {
				"glob": "^7.1.3"
			},
			"bin": {
				"rimraf": "bin.js"
			},
			"funding": {
				"url": "https://github.com/sponsors/isaacs"
			}
		},
		"node_modules/webpack-dev-server/node_modules/schema-utils": {
			"version": "4.2.0",
			"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
			"integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
			"dev": true,
			"dependencies": {
				"@types/json-schema": "^7.0.9",
				"ajv": "^8.9.0",
				"ajv-formats": "^2.1.1",
				"ajv-keywords": "^5.1.0"
			},
			"engines": {
				"node": ">= 12.13.0"
			},
			"funding": {
				"type": "opencollective",
				"url": "https://opencollective.com/webpack"
			}
		},
		"node_modules/webpack-merge": {
			"version": "5.10.0",
			"resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz",
			"integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==",
			"dev": true,
			"dependencies": {
				"clone-deep": "^4.0.1",
				"flat": "^5.0.2",
				"wildcard": "^2.0.0"
			},
			"engines": {
				"node": ">=10.0.0"
			}
		},
		"node_modules/webpack-merge/node_modules/clone-deep": {
			"version": "4.0.1",
			"resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
			"integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
			"dev": true,
			"dependencies": {
				"is-plain-object": "^2.0.4",
				"kind-of": "^6.0.2",
				"shallow-clone": "^3.0.0"
			},
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/webpack-merge/node_modules/kind-of": {
			"version": "6.0.3",
			"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
			"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/webpack-merge/node_modules/shallow-clone": {
			"version": "3.0.1",
			"resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
			"integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
			"dev": true,
			"dependencies": {
				"kind-of": "^6.0.2"
			},
			"engines": {
				"node": ">=8"
			}
		},
		"node_modules/webpack-sources": {
			"version": "3.2.3",
			"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
			"integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
			"dev": true,
			"engines": {
				"node": ">=10.13.0"
			}
		},
		"node_modules/websocket-driver": {
			"version": "0.7.4",
			"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
			"integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",
			"dev": true,
			"dependencies": {
				"http-parser-js": ">=0.5.1",
				"safe-buffer": ">=5.1.0",
				"websocket-extensions": ">=0.1.1"
			},
			"engines": {
				"node": ">=0.8.0"
			}
		},
		"node_modules/websocket-extensions": {
			"version": "0.1.4",
			"resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
			"integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
			"dev": true,
			"engines": {
				"node": ">=0.8.0"
			}
		},
		"node_modules/whatwg-encoding": {
			"version": "2.0.0",
			"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
			"integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==",
			"dev": true,
			"dependencies": {
				"iconv-lite": "0.6.3"
			},
			"engines": {
				"node": ">=12"
			}
		},
		"node_modules/whatwg-mimetype": {
			"version": "3.0.0",
			"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz",
			"integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==",
			"dev": true,
			"engines": {
				"node": ">=12"
			}
		},
		"node_modules/whatwg-url": {
			"version": "11.0.0",
			"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
			"integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
			"dev": true,
			"dependencies": {
				"tr46": "^3.0.0",
				"webidl-conversions": "^7.0.0"
			},
			"engines": {
				"node": ">=12"
			}
		},
		"node_modules/which": {
			"version": "1.3.1",
			"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
			"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
			"dev": true,
			"dependencies": {
				"isexe": "^2.0.0"
			},
			"bin": {
				"which": "bin/which"
			}
		},
		"node_modules/which-boxed-primitive": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
			"integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
			"dev": true,
			"dependencies": {
				"is-bigint": "^1.0.1",
				"is-boolean-object": "^1.1.0",
				"is-number-object": "^1.0.4",
				"is-string": "^1.0.5",
				"is-symbol": "^1.0.3"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/which-builtin-type": {
			"version": "1.1.3",
			"resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz",
			"integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==",
			"dev": true,
			"dependencies": {
				"function.prototype.name": "^1.1.5",
				"has-tostringtag": "^1.0.0",
				"is-async-function": "^2.0.0",
				"is-date-object": "^1.0.5",
				"is-finalizationregistry": "^1.0.2",
				"is-generator-function": "^1.0.10",
				"is-regex": "^1.1.4",
				"is-weakref": "^1.0.2",
				"isarray": "^2.0.5",
				"which-boxed-primitive": "^1.0.2",
				"which-collection": "^1.0.1",
				"which-typed-array": "^1.1.9"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/which-collection": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
			"integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
			"dev": true,
			"dependencies": {
				"is-map": "^2.0.3",
				"is-set": "^2.0.3",
				"is-weakmap": "^2.0.2",
				"is-weakset": "^2.0.3"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/which-typed-array": {
			"version": "1.1.15",
			"resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
			"integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
			"dev": true,
			"dependencies": {
				"available-typed-arrays": "^1.0.7",
				"call-bind": "^1.0.7",
				"for-each": "^0.3.3",
				"gopd": "^1.0.1",
				"has-tostringtag": "^1.0.2"
			},
			"engines": {
				"node": ">= 0.4"
			},
			"funding": {
				"url": "https://github.com/sponsors/ljharb"
			}
		},
		"node_modules/wildcard": {
			"version": "2.0.1",
			"resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz",
			"integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
			"dev": true
		},
		"node_modules/word-wrap": {
			"version": "1.2.5",
			"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
			"integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
			"dev": true,
			"engines": {
				"node": ">=0.10.0"
			}
		},
		"node_modules/wrap-ansi": {
			"version": "7.0.0",
			"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
			"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
			"dev": true,
			"dependencies": {
				"ansi-styles": "^4.0.0",
				"string-width": "^4.1.0",
				"strip-ansi": "^6.0.0"
			},
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
			}
		},
		"node_modules/wrappy": {
			"version": "1.0.2",
			"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
			"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
			"dev": true
		},
		"node_modules/write-file-atomic": {
			"version": "4.0.2",
			"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
			"integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
			"dev": true,
			"dependencies": {
				"imurmurhash": "^0.1.4",
				"signal-exit": "^3.0.7"
			},
			"engines": {
				"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
			}
		},
		"node_modules/ws": {
			"version": "8.17.0",
			"resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz",
			"integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==",
			"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/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/xml-name-validator": {
			"version": "4.0.0",
			"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
			"integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
			"dev": true,
			"engines": {
				"node": ">=12"
			}
		},
		"node_modules/xmlchars": {
			"version": "2.2.0",
			"resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
			"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
			"dev": true
		},
		"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": "3.1.1",
			"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
			"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
			"dev": true
		},
		"node_modules/yaml": {
			"version": "1.10.2",
			"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
			"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
			"dev": true,
			"engines": {
				"node": ">= 6"
			}
		},
		"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",
			"integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
			"dev": true,
			"dependencies": {
				"buffer-crc32": "~0.2.3",
				"fd-slicer": "~1.1.0"
			}
		},
		"node_modules/yocto-queue": {
			"version": "0.1.0",
			"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
			"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
			"dev": true,
			"engines": {
				"node": ">=10"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		}
	}
}
assets/js/breadcrumbs/src/edit.js000064400000002446151545122310013032 0ustar00import { __ } from '@wordpress/i18n';
import { useBlockProps } from '@wordpress/block-editor';
import { useSelect } from '@wordpress/data';
import { Notice } from '@wordpress/components';

export default function Edit({attributes}) {
	let [title] = useSelect((select) => {
		return [
			select('core/editor').getEditedPostAttribute("title") || __('Example title', 'siteseo'),
		]
	}, []);

	let crumbs = [];

	if(attributes.prefix){
		crumbs.push({
			'title' : attributes.prefix,
			'url' : false
		});
	}

	if(!attributes.hideHome){
		crumbs.push({
			'title' : attributes.homeLabel ? attributes.homeLabel : __('Home'),
			'url' : true
		});
	}

	crumbs.push({
		'title' : title,
		'url' : false
	});

	return (
		<>
		<Notice status="warning" isDismissible={false} politeness="polite">
			<p>{__('This is just a preview, to see the final result, please view this page as a normal user', 'siteseo')}</p>
		</Notice>
		<div { ...useBlockProps() }>
			<ul className="siteseo-breadcrumbs">
				{crumbs.map((crub, i) => {
					return (<><li key={crub.url}>{crub.url ? (<a href="#" title={crub.title}>{crub.title}</a>) : (crub.title)}</li>
						<div className="siteseo-breadcrumbs-seperator"><span>{(crumbs.length-1) != i ? attributes.seperator : ''}</span></div>
						</>
					);
				})}
			</ul>
		</div>
		</>
	);
}
assets/js/breadcrumbs/src/block.json000064400000001114151545122430013526 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "siteseo/breadcrumbs",
	"version": "1.0.0",
	"title": "Breadcrumbs",
	"category": "widgets",
	"description": "Breadcrumbs help you track you location on the website.",
	"supports": {
		"html": false,
		"align": true,
		"spacing": {
			"padding": true,
			"margin": true
		},
		"multiple": false,
		"typography": {
			"fontSize": true,
			"lineHeight": true
		},
		"color": {
			"link": true
		}
	},
	"textdomain": "siteseo",
	"editorScript": "file:./index.js",
	"editorStyle": "file:./style-index.css"
}
assets/js/breadcrumbs/src/style.css000064400000000242151545122560013420 0ustar00.siteseo-breadcrumbs{
    display:flex;
    list-style-type:none;
    margin:0;
    padding:0
}

.siteseo-breadcrumbs-seperator{
    margin:0 5px;
    padding:0
}assets/js/breadcrumbs/src/index.js000064400000001523151545122700013212 0ustar00import { registerBlockType } from '@wordpress/blocks';
import './style.css';

import Edit from './edit';
import metadata from './block.json';

function siteseo_breadcrumb_icon(){
	return (<svg xmlns="http://www.w3.org/2000/svg" width="664.82" height="495.38" viewBox="0 0 43.214 32.2"><path d="M1 32.1c-.6 0-1-.4-1-1V1c0-.6.4-1 1-1h8.1c.4 0 .9.2 1.2.5l11.6 14.6c.4.5.4 1.3 0 1.9L10.2 31.6c-.3.4-.8.6-1.3.6zM42.914 15.071l-11.7-14.5c-.5-.6-1.4-.8-2.1-.2l-2.3 1.9c-.7.5-.8 1.5-.2 2.1l9.5 11.7-9.5 11.8c-.5.6-.4 1.6.2 2.1l2.3 1.9c.7.5 1.5.4 2.1-.2l11.7-14.6c.4-.8.4-1.5 0-2z"/><path d="m32.407 15.071-11.7-14.5c-.5-.6-1.4-.8-2.1-.2l-2.3 1.9c-.7.5-.8 1.5-.2 2.1l9.5 11.7-9.5 11.8c-.5.6-.4 1.6.2 2.1l2.3 1.9c.7.5 1.5.4 2.1-.2l11.7-14.6c.4-.8.4-1.5 0-2z"/></svg>
	);
}


registerBlockType( metadata.name, {
	edit: Edit,
	icon : siteseo_breadcrumb_icon
} );
assets/js/breadcrumbs/build/style-index.css000064400000000201151545123040015022 0ustar00.siteseo-breadcrumbs{display:flex;list-style-type:none;margin:0;padding:0}.siteseo-breadcrumbs-seperator{margin:0 5px;padding:0}
assets/js/breadcrumbs/build/block.json000064400000001170151545123120014035 0ustar00{
  "$schema": "https://schemas.wp.org/trunk/block.json",
  "apiVersion": 3,
  "name": "siteseo/breadcrumbs",
  "version": "1.0.0",
  "title": "Breadcrumbs",
  "category": "widgets",
  "description": "Breadcrumbs help you track you location on the website.",
  "supports": {
    "html": false,
    "align": true,
    "spacing": {
      "padding": true,
      "margin": true
    },
    "multiple": false,
    "typography": {
      "fontSize": true,
      "lineHeight": true
    },
    "color": {
      "link": true
    }
  },
  "textdomain": "siteseo",
  "editorScript": "file:./index.js",
  "editorStyle": "file:./style-index.css"
}assets/js/breadcrumbs/build/index.asset.php000064400000000242151545123170015012 0ustar00<?php return array('dependencies' => array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-data', 'wp-i18n'), 'version' => '8b21d09f0f5425c2e70d');
assets/js/breadcrumbs/build/index.js000064400000005370151545123310013524 0ustar00(()=>{"use strict";var e,t={95:()=>{const e=window.React,t=window.wp.blocks,r=window.wp.i18n,l=window.wp.blockEditor,i=window.wp.data,s=window.wp.components,a=JSON.parse('{"UU":"siteseo/breadcrumbs"}');(0,t.registerBlockType)(a.UU,{edit:function({attributes:t}){let[a]=(0,i.useSelect)((e=>[e("core/editor").getEditedPostAttribute("title")||(0,r.__)("Example title","siteseo")]),[]),n=[];return t.prefix&&n.push({title:t.prefix,url:!1}),t.hideHome||n.push({title:t.homeLabel?t.homeLabel:(0,r.__)("Home"),url:!0}),n.push({title:a,url:!1}),(0,e.createElement)(e.Fragment,null,(0,e.createElement)(s.Notice,{status:"warning",isDismissible:!1,politeness:"polite"},(0,e.createElement)("p",null,(0,r.__)("This is just a preview, to see the final result, please view this page as a normal user","siteseo"))),(0,e.createElement)("div",{...(0,l.useBlockProps)()},(0,e.createElement)("ul",{className:"siteseo-breadcrumbs"},n.map(((r,l)=>(0,e.createElement)(e.Fragment,null,(0,e.createElement)("li",{key:r.url},r.url?(0,e.createElement)("a",{href:"#",title:r.title},r.title):r.title),(0,e.createElement)("div",{className:"siteseo-breadcrumbs-seperator"},(0,e.createElement)("span",null,n.length-1!=l?t.seperator:""))))))))},icon:function(){return(0,e.createElement)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"664.82",height:"495.38",viewBox:"0 0 43.214 32.2"},(0,e.createElement)("path",{d:"M1 32.1c-.6 0-1-.4-1-1V1c0-.6.4-1 1-1h8.1c.4 0 .9.2 1.2.5l11.6 14.6c.4.5.4 1.3 0 1.9L10.2 31.6c-.3.4-.8.6-1.3.6zM42.914 15.071l-11.7-14.5c-.5-.6-1.4-.8-2.1-.2l-2.3 1.9c-.7.5-.8 1.5-.2 2.1l9.5 11.7-9.5 11.8c-.5.6-.4 1.6.2 2.1l2.3 1.9c.7.5 1.5.4 2.1-.2l11.7-14.6c.4-.8.4-1.5 0-2z"}),(0,e.createElement)("path",{d:"m32.407 15.071-11.7-14.5c-.5-.6-1.4-.8-2.1-.2l-2.3 1.9c-.7.5-.8 1.5-.2 2.1l9.5 11.7-9.5 11.8c-.5.6-.4 1.6.2 2.1l2.3 1.9c.7.5 1.5.4 2.1-.2l11.7-14.6c.4-.8.4-1.5 0-2z"}))}})}},r={};function l(e){var i=r[e];if(void 0!==i)return i.exports;var s=r[e]={exports:{}};return t[e](s,s.exports,l),s.exports}l.m=t,e=[],l.O=(t,r,i,s)=>{if(!r){var a=1/0;for(u=0;u<e.length;u++){for(var[r,i,s]=e[u],n=!0,o=0;o<r.length;o++)(!1&s||a>=s)&&Object.keys(l.O).every((e=>l.O[e](r[o])))?r.splice(o--,1):(n=!1,s<a&&(a=s));if(n){e.splice(u--,1);var c=i();void 0!==c&&(t=c)}}return t}s=s||0;for(var u=e.length;u>0&&e[u-1][2]>s;u--)e[u]=e[u-1];e[u]=[r,i,s]},l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={57:0,350:0};l.O.j=t=>0===e[t];var t=(t,r)=>{var i,s,[a,n,o]=r,c=0;if(a.some((t=>0!==e[t]))){for(i in n)l.o(n,i)&&(l.m[i]=n[i]);if(o)var u=o(l)}for(t&&t(r);c<a.length;c++)s=a[c],l.o(e,s)&&e[s]&&e[s][0](),e[s]=0;return l.O(u)},r=globalThis.webpackChunkbreadcrumbs=globalThis.webpackChunkbreadcrumbs||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})();var i=l.O(void 0,[350],(()=>l(95)));i=l.O(i)})();functions.php000064400000016200151545123360007271 0ustar00<?php
/*
* SITESEO
* https://siteseo.io
* (c) SITSEO Team
*/

// Are we being accessed directly ?
if(!defined('ABSPATH')){
	exit('Hacking Attempt !');
}

// Add our license key if ANY
function siteseo_pro_updater_filter_args($queryArgs){
	
	global $siteseo;
	
	if (!empty($siteseo->license['license'])){
		$queryArgs['license'] = $siteseo->license['license'];
	}
	
	$queryArgs['url'] = rawurlencode(site_url());
	
	return $queryArgs;
}

// Handle the Check for update link and ask to install license key
function siteseo_pro_updater_check_link($final_link){
	
	global $siteseo;
	
	if(empty($siteseo->license['license'])){
		return '<a href="'.admin_url('admin.php?page=siteseo-license').'">Install SiteSEO Pro License Key</a>';
	}
	
	return $final_link;
}

// Prevent update of Siteseo free
function siteseo_pro_file_get_free_version_num(){
		
	if(defined('SITESEO_VERSION')){
		return SITESEO_VERSION;
	}
	
	// In case of Siteseo deactive
	return siteseo_pro_file_get_version_num('siteseo/siteseo.php');
}

// Prevent update of Siteseo free
function siteseo_pro_file_get_version_num($plugin){
	
	// In case of Siteseo deactive
	include_once(ABSPATH . 'wp-admin/includes/plugin.php');
	$plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/'.$plugin);

	if(empty($plugin_data)){
		return false;
	}

	return $plugin_data['Version'];

}

// Prevent update of siteseo free
function siteseo_pro_disable_manual_update_for_plugin($transient){
	$plugin = 'siteseo/siteseo.php';
	
	// Is update available?
	if(!isset($transient->response) || !isset($transient->response[$plugin])){
		return $transient;
	}
	
	$free_version = siteseo_pro_file_get_free_version_num();
	$pro_version = SITESEO_PRO_VERSION;
	
	if(!empty($GLOBALS['siteseo_pro_is_upgraded'])){
		$pro_version = siteseo_pro_file_get_version_num('siteseo-pro/siteseo-pro.php');
	}

	// Update the Siteseo version to the equivalent of Pro version
	if(!empty($pro_version) && version_compare($free_version, $pro_version, '<')){
		$transient->response[$plugin]->new_version = $pro_version;
		$transient->response[$plugin]->package = 'https://a.softaculous.com/siteseo/files/versions/latest-stable-free.zip';
	}else{
		unset($transient->response[$plugin]);
	}

	return $transient;
}

// Auto update free version after update pro version
function siteseo_pro_update_free_after_pro($upgrader_object, $options){
	
	// Check if the action is an update for the plugins
	if($options['action'] != 'update' || $options['type'] != 'plugin'){
		return;
	}
		
	// Define the slugs for the free and pro plugins
	$free_slug = 'siteseo/siteseo.php'; 
	$pro_slug = 'siteseo-pro/siteseo-pro.php';

	// Check if the pro plugin is in the list of updated plugins
	if( 
		(isset($options['plugins']) && in_array($pro_slug, $options['plugins']) && !in_array($free_slug, $options['plugins'])) ||
		(isset($options['plugin']) && $pro_slug == $options['plugin'])
	){
	
		// Trigger the update for the free plugin
		$current_version = siteseo_pro_file_get_free_version_num();
		
		if(empty($current_version)){
			return;
		}
		
		$GLOBALS['siteseo_pro_is_upgraded'] = true;
		
		// This will set the 'update_plugins' transient again
		wp_update_plugins();

		// Check for updates for the free plugin
		$update_plugins = get_site_transient('update_plugins');
		
		if(empty($update_plugins) || !isset($update_plugins->response[$free_slug]) || version_compare($update_plugins->response[$free_slug]->new_version, $current_version, '<=')){
			return;
		}
		
		require_once(ABSPATH . 'wp-admin/includes/plugin.php');
		require_once(ABSPATH . 'wp-admin/includes/class-wp-upgrader.php');
		
		$skin = wp_doing_ajax()? new WP_Ajax_Upgrader_Skin() : null;
		
		$upgrader = new Plugin_Upgrader($skin);
		$upgraded = $upgrader->upgrade($free_slug);
		
		if(!is_wp_error($upgraded) && $upgraded){
			// Re-active free plugins
			if( file_exists( WP_PLUGIN_DIR . '/'.  $free_slug ) && is_plugin_inactive($free_slug) ){
				activate_plugin($free_slug); // TODO for network
			}
			
			// Re-active pro plugins
			if( file_exists( WP_PLUGIN_DIR . '/'.  $pro_slug ) && is_plugin_inactive($pro_slug) ){
				activate_plugin($pro_slug); // TODO for network
			}
		}
	}
}

// Load license data
function siteseo_pro_load_license($parent = 0){
	
	global $siteseo, $lic_resp;
	
	$license_field = 'siteseo_license';
	$license_api_url = SITESEO_API;
	
	// Save license
	if(!empty($parent) && is_string($parent) && strlen($parent) > 5){		
		$lic['license'] = $parent;
	
	// Load license of Soft Pro
	}elseif(!empty($parent)){
		$license_field = 'softaculous_pro_license';
		$lic = get_option('softaculous_pro_license', []);
	
	// My license
	}else{
		$lic = get_option($license_field, []);
	}
	
	// Loaded license is a Soft Pro
	if(!empty($lic['license']) && preg_match('/^softwp/is', $lic['license'])){
		$license_field = 'softaculous_pro_license';
		$license_api_url = 'https://a.softaculous.com/softwp/';
		$prods = apply_filters('softaculous_pro_products', []);
	}else{
		$prods = [];
	}

	if(empty($lic['last_update'])){
		$lic['last_update'] = time() - 86600;
	}
	
	// Update license details as well
	if(!empty($lic) && !empty($lic['license']) && (time() - @$lic['last_update']) >= 86400){
		
		$url = $license_api_url.'/license.php?license='.$lic['license'].'&prods='.implode(',', $prods).'&url='.rawurlencode(site_url());
		$resp = wp_remote_get($url);
		$lic_resp = $resp;

		//Did we get a response ?
		if(is_array($resp)){
			
			$tosave = json_decode($resp['body'], true);
			
			//Is it the license ?
			if(!empty($tosave['license'])){
				$tosave['last_update'] = time();
				update_option($license_field, $tosave);
				$lic = $tosave;
			}
		}
	}
	
	// If the license is Free or Expired check for Softaculous Pro license
	if(empty($lic) || empty($lic['active'])){
		
		if(function_exists('softaculous_pro_load_license')){
			$softaculous_license = softaculous_pro_load_license();
			if(!empty($softaculous_license['license']) && 
				(!empty($softaculous_license['active']) || empty($lic['license']))
			){
				$lic = $softaculous_license;
			}
		}elseif(empty($parent)){
			$lic = get_option('softaculous_pro_license', []);
			
			if(!empty($lic)){
				return siteseo_pro_load_license(1);
			}
		}
	}
	
	if(!empty($lic['license'])){
		$siteseo->license = $lic;
	}
	
}

add_filter('softaculous_pro_products', 'siteseo_softaculous_pro_products', 10, 1);
function siteseo_softaculous_pro_products($r = []){
	$r['siteseo'] = 'siteseo';
	return $r;
}

function siteseo_pro_api_url($main_server = 0, $suffix = 'siteseo'){
	global $siteseo;
	
	$r = array(
		'https://s0.softaculous.com/a/softwp/',
		'https://s1.softaculous.com/a/softwp/',
		'https://s2.softaculous.com/a/softwp/',
		'https://s3.softaculous.com/a/softwp/',
		'https://s4.softaculous.com/a/softwp/',
		'https://s5.softaculous.com/a/softwp/',
		'https://s7.softaculous.com/a/softwp/',
		'https://s8.softaculous.com/a/softwp/'
	);

	$mirror = $r[array_rand($r)];

	// If the license is newly issued, we need to fetch from API only
	if(!empty($main_server) || empty($siteseo->license['last_edit']) || 
		(!empty($siteseo->license['last_edit']) && (time() - 3600) < $siteseo->license['last_edit'])
	){
		$mirror = SITESEO_API;
	}

	if(!empty($suffix)){
		$mirror = str_replace('/softwp', '/'.$suffix, $mirror);
	}

	return $mirror;
	
}siteseo-pro.php000064400000011542151545123430007534 0ustar00<?php
/*
Plugin Name: SiteSEO Pro
Plugin URI: https://siteseo.io/
Description: This plugin handles On Page SEO, Content Analysis, Social Previews, Google Preview, Hyperlink Analysis, Image Analysis, Home Page Monitor, Schemas for various type of posts.
Author: Softaculous
Version: 1.2.0
Author URI: https://siteseo.io/
License: GPLv2
Text Domain: siteseo-pro
Domain Path: /languages
Requires Plugins: siteseo
*/

// We need the ABSPATH
if (!defined('ABSPATH')) exit;

if(!function_exists('add_action')){
	echo 'You are not allowed to access this page directly.';
	exit;
}

// If SITESEO_PRO_VERSION exists then the plugin is loaded already !
if(defined('SITESEO_PRO_VERSION')){
	return;
}

define('SITESEO_PRO_FILE', __FILE__);
define('SITESEO_PRO_VERSION', '1.2.0');
define('SITESEO_PRO_DIR', plugin_dir_path(SITESEO_PRO_FILE));
define('SITESEO_PRO_URL', plugin_dir_url(SITESEO_PRO_FILE));
define('SITESEO_PRO_ASSETS_PATH', SITESEO_PRO_DIR . 'assets');
define('SITESEO_PRO_ASSETS_URL', SITESEO_PRO_URL . 'assets');
define('SITESEO_PREMIUM', plugin_basename(__FILE__));

if(!defined('SITESEO_API')){
	define('SITESEO_API', 'https://api.siteseo.io/');
}

include_once SITESEO_PRO_DIR . 'functions.php';

function siteseopro_autoloader($class){

	if(!preg_match('/^SiteSEOPro\\\(.*)/is', $class, $m)){
		return;
	}
	
	$m[1] = str_replace('\\', '/', $m[1]);

	// Include file
	if(file_exists(SITESEO_PRO_DIR . 'main/'.strtolower($m[1]).'.php')){
		include_once(SITESEO_PRO_DIR.'main/'.strtolower($m[1]).'.php');
	}
}

spl_autoload_register('siteseopro_autoloader');

register_activation_hook( __FILE__, '\SiteSEOPro\Install::activate');
register_deactivation_hook( __FILE__, '\SiteSEOPro\Install::deactivate');
register_uninstall_hook(__FILE__, '\SiteSEOPro\Install::uninstall');

add_action('plugins_loaded', 'sitseopro_load_plugin');

// Prevent update of Siteseo free
// This also work for auto update
add_filter('site_transient_update_plugins', 'siteseo_pro_disable_manual_update_for_plugin', 20);
add_filter('pre_site_transient_update_plugins', 'siteseo_pro_disable_manual_update_for_plugin', 20);

// Auto update free version after update pro version
add_action('upgrader_process_complete', 'siteseo_pro_update_free_after_pro', 20, 2);

// Check on update
function sitseopro_check_updates(){

	$current_version = get_option('siteseo_pro_version');
	$version = (int) str_replace('.', '', $current_version);
	
	// Check version less
	if($version < 118){
		\Siteseopro\Install::activate();
	}
	
	// No update required
	if($current_version == SITESEO_PRO_VERSION){
		return true;
	}
	
	// Till 1.1.9 we used to update free using the Pro version so we need to remove the scheduler
	if(wp_next_scheduled('check_plugin_updates-siteseo')){
		wp_clear_scheduled_hook('check_plugin_updates-siteseo');
	}

	update_option('siteseo_pro_version', SITESEO_PRO_VERSION);
}

function sitseopro_load_plugin(){
	global $siteseo;

	if(empty($siteseo)){
		$siteseo = new StdClass();
	}

	$siteseo->pro = get_option('siteseo_pro_options', []);

	siteseo_pro_load_license();

	//check updates
	sitseopro_check_updates();

	// Check for updates
	include_once(SITESEO_PRO_DIR . 'main/plugin-update-checker.php');
	$siteseo_updater = SiteSEO_PucFactory::buildUpdateChecker(siteseo_pro_api_url().'/updates.php?version='.SITESEO_PRO_VERSION, SITESEO_PRO_FILE);
	
	// Add the license key to query arguments
	$siteseo_updater->addQueryArgFilter('siteseo_pro_updater_filter_args');
	
	// Show the text to install the license key
	add_filter('puc_manual_final_check_link-siteseo-pro', 'siteseo_pro_updater_check_link', 10, 1);

	// Cron Action
	add_action('siteseo_404_cleanup', 'siteseo_404_cleanup');
	add_action('siteseo_send_404_report_email', '\SiteSEOPro\RedirectManager::send_weekly_report');

	if(wp_doing_ajax()){
		\SiteSEOPro\Ajax::hooks();
		return;
	}
	
	//breadcrumbs
	add_action('init', '\SiteSEOPro\RegisterBlocks::init', 999);	
	add_action('init', '\SiteSEOPro\Breadcrumbs::enable_breadcrumbs');
	
	add_action('init', '\SiteSEOPro\Admin::local_business_block');

	if(is_admin()){
		\SiteSEOPro\Admin::init();
		return;
	}

	// Actions
	// TODO: Will need to shift these actions to a seperate file as the code grows.
	add_action('wp_head','\SiteSEOPro\Tags::dublin_core', 2);
	add_filter('wp_robots', '\SiteSEOPro\Tags::woocommerce_index_tags',9999);
	add_filter('wp_head', '\SiteSEOPro\Tags::woocommerce');
	add_action('wp_head','\SiteSEOPro\Tags::easy_digital_downloads', 2);
	add_action('wp_head','\SiteSEOPro\Tags::structured_data');
	add_action('template_redirect', '\SiteSEOPro\RedirectManager::handle_404_request');
	add_action('wp_head', '\SiteSEOPro\StructuredData::render');
	
}

// Deleting 404 older than 30 days
function siteseo_404_cleanup(){
	global $wpdb, $siteseo;

	// Clear Logs
	if(!empty($siteseo->pro['clean_404_logs'])){
		$wpdb->query("DELETE FROM `".$wpdb->prefix."siteseo_redirect_logs` WHERE `timestamp` < DATE_SUB(NOW(), INTERVAL 30 DAY)");
	}
}
main/settings/license.php000064400000011422151545123630011470 0ustar00<?php
/*
* SITESEO
* https://siteseo.io
* (c) SITSEO Team
*/

namespace SiteSEOPro\Settings;

// Are we being accessed directly ?
if(!defined('ABSPATH')){
	die('Hacking Attempt !');
}

// license page display
class License{
	static function template(){
		global $siteseo;
		
		// Add header
		if(function_exists('siteseo_admin_header')){
			siteseo_admin_header();
		}

		if(isset($_REQUEST['save_siteseo_pro_license'])){
			self::save();
		}

		echo '<div class="siteseo-license-tab">
			<div class="siteseopro-setting-content">
			<div class="siteseopro-tab-group">
				<table class="wp-list-table fixed striped users siteseopro-license-table" cellspacing="1" border="0" width="78%" cellpadding="10" align="center">
					<tbody>
						<tr>
							<th align="left" width="25%">' . esc_html__('Siteseo Version', 'siteseo-pro') . '</th>
							<td>' . (defined('SITESEO_PRO_VERSION') ? esc_html(SITESEO_PRO_VERSION) . ' (Pro Version)' : 'N/A') . '</td>
						</tr>
						<tr>
							<th align="left" valign="top">' . esc_html__('Siteseo License', 'siteseo-pro') . '</th>
							<td align="left">
								<form method="post" action="">
									<span style="color:red">' . (defined('SITESEO_PRO_VERSION') && empty($siteseo->license['active']) ? '<span style="color:red">Unlicensed</span> &nbsp; &nbsp;' : '') . '</span>
									<input type="hidden" name="siteseo_pro_license_nonce" value="' . wp_create_nonce('siteseo_pro_license') . '"/>
									<input type="text" name="siteseo_pro_license" value="' . (empty($siteseo->license['license']) ? (empty($_POST['siteseo_pro_license']) ? '' : sanitize_text_field($_POST['siteseo_pro_license'])) : sanitize_text_field($siteseo->license['license'])) . '" size="30" placeholder="e.g. SITESEO-11111-22222-33333-44444" style="width:300px;"> &nbsp; 
									<br><br><input name="save_siteseo_pro_license" class="siteseopro-btn siteseopro-btn-primary" value="Update License" type="submit">
								</form>';
								if(!empty($siteseo->license)){
									$expires = $siteseo->license['expires'];
									$expires = substr($expires, 0, 4) . '/' . substr($expires, 4, 2) . '/' . substr($expires, 6);
									echo '<div style="margin-top:10px;">License Status : ' . (empty($siteseo->license['status_txt']) ? 'N.A.' : wp_kses_post($siteseo->license['status_txt'])) . ' &nbsp; &nbsp; &nbsp; 
									' . ($siteseo->license['expires'] <= date('Ymd') ? 'License Expires : <span style="color:red">' . esc_attr($expires) . '</span>' : (empty($siteseo->license['has_plid']) ? 'License Expires : ' . esc_html($expires) : '')) . '</div>';
								}
							echo '</td>
						</tr>
						<tr>
							<th align="left">URL</th>
							<td>' . get_site_url() . '</td>
						</tr>
						<tr>
							<th align="left">Path</th>
							<td>' . ABSPATH . '</td>
						</tr>
						<tr>
							<th align="left">Server\'s IP Address</th>
							<td>' . esc_html($_SERVER['SERVER_ADDR']) . '</td>
						</tr>
						<tr>
							<th align="left">.htaccess is writable</th>
							<td>' . (is_writable(ABSPATH . '.htaccess') ? '<span style="color:red">Yes</span>' : '<span style="color:green">No</span>') . '</td>
						</tr>
						</tbody>
					</table>
				</div>
			</div>
		</div>';
	}
	
	static function save(){
		global $siteseo, $lic_resp;
		
		if(!wp_verify_nonce($_POST['siteseo_pro_license_nonce'], 'siteseo_pro_license')){
			echo '<div class="notice notice-error is-dismissible"><p>';
			echo esc_html__('Security Check Failed', 'siteseo-pro');
			echo '</p></div>';
			return;
		}

		$license = sanitize_text_field(wp_unslash($_POST['siteseo_pro_license']));

		if(empty($license)){
			echo '<div style="margin-top:65px;" class="notice notice-error is-dismissible"><p>';
			echo esc_html__('The license key was not submitted', 'siteseo-pro');
			echo '</p></div>';
			return;
		}
		
		siteseo_pro_load_license($license);
		
		if(is_wp_error($lic_resp) || 200 !== wp_remote_retrieve_response_code($lic_resp)){
			if(is_wp_error($lic_resp)){
				echo '<div style="margin-top:65px;" class="notice notice-error is-dismissible"><p>';
				echo esc_html__($lic_resp->get_error_message());
				echo '</p></div>';
				return;
			} else{
				echo '<div style="margin-top:65px;" class="notice notice-error is-dismissible"><p>';
				echo esc_html__('An error occurred, please try again. Response code: ', 'siteseo-pro') . wp_remote_retrieve_response_code($lic_resp);
				echo '</p></div>';
				return;
			}
		} else {
			$tmp = json_decode(wp_remote_retrieve_body($lic_resp), true);
			 if(empty($tmp)){
				echo '<div style="margin-top:65px;" class="notice notice-error is-dismissible"><p>';
				echo esc_html__('The license key is invalid', 'siteseo-pro');
				echo '</p></div>';
				return;
			}
			
			echo'<div class="siteseo-notice is-success">
				<p>'. esc_html__('Your license has been successfully activated!', 'siteseo-pro').'
				</p>
			</div>';
		}
	}
}main/settings/util.php000064400000004725151545123750011036 0ustar00<?php
/*
* SITESEO
* https://siteseo.io
* (c) SITSEO Team
*/

namespace SiteSEOPro\Settings;

// Are we being accessed directly ?
if(!defined('ABSPATH')){
	die('Hacking Attempt !');
}

class Util{

    static function render_toggle($toggle_key, $toggle_state, $nonce, $label = false){
		$is_active = $toggle_state ? 'active' : '';
		$state_text = $toggle_state ? 'Click to disable this feature' : 'Click to enable this feature';

		// for dashbord screen
		if($label){
			echo'<div class="siteseo-toggleCnt">
					<div class="siteseo-toggleSw '.esc_attr($is_active).'" id="siteseo-toggleSw-' . esc_attr($toggle_key) . '" data-nonce="' . esc_attr($nonce) . '" data-toggle-key="'.esc_attr($toggle_key).'" data-action="siteseo_pro_save_'.esc_attr($toggle_key).'"></div>
					<input type="hidden" name="siteseo_options['.esc_attr($toggle_key) . ']" id="'.esc_attr($toggle_key).'" value="'.esc_attr($toggle_state).'">
				</div>';
		} else{
			
			echo'<div class="siteseo-toggleCnt">
					<div class="siteseo-toggleSw '.esc_attr($is_active).'" id="siteseo-toggleSw-'.esc_attr($toggle_key).'" data-nonce="' . esc_attr($nonce) . '" data-toggle-key="'.esc_attr($toggle_key).'" data-action="siteseo_pro_save_'.esc_attr($toggle_key).'"></div>
					<span id="siteseo-arrow-icon" class="dashicons dashicons-arrow-left-alt siteseo-arrow-icon"></span>
					<p class="toggle_state_'.esc_attr($toggle_key).'">'.esc_html($state_text).'</p>
					<input type="hidden" name="siteseo_options['.esc_attr($toggle_key).']" id="'.esc_attr($toggle_key).'" value="'.esc_attr($toggle_state).'">
				</div>';
		}

	}
	
	static function get_logs(){
		global $wpdb;
		
		$table_name = $wpdb->prefix . 'siteseo_redirect_logs';

		self::maybe_create_404_table();
	
		$results = $wpdb->get_results("SELECT * FROM $table_name ORDER BY timestamp DESC");
		return ['items' => $results];
		
	}

	static function maybe_create_404_table(){
		global $wpdb;

		$charset_collate = $wpdb->get_charset_collate();

		$sql = "CREATE TABLE IF NOT EXISTS `".$wpdb->prefix."siteseo_redirect_logs` (
		    id mediumint(9) NOT NULL AUTO_INCREMENT,
		    url varchar(255) NOT NULL,
		    ip_address varchar(46),
		    timestamp datetime DEFAULT CURRENT_TIMESTAMP,
		    user_agent text,
		    referer varchar(255),
		    hit_count int DEFAULT 1,
		    PRIMARY KEY  (id),
		    KEY url (url)
		) $charset_collate;";

		require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
		dbDelta($sql);
	}
	
}main/settings/pro.php000064400000243252151545124020010650 0ustar00<?php
/*
* SITESEO
* https://siteseo.io
* (c) SITSEO Team
*/

namespace SiteSEOPro\Settings;

// Are we being accessed directly ?
if(!defined('ABSPATH')){
	die('Hacking Attempt !');
}

use \SiteSEOPro\Settings\PageSpeed;

class Pro{

	// Display page
	static function home(){
		global $siteseo;

		echo '<div id="siteseo-root">';
		if(function_exists('siteseo_admin_header')){
			siteseo_admin_header();
		}

		$current_tab = isset($_GET['tab']) ? sanitize_key($_GET['tab']) : 'tab_siteseopro_woocommerce'; // Default tab

		$siteseopro_settings_tabs = [
			'tab_siteseopro_woocommerce' => esc_html__('WooCommerce', 'siteseo-pro'),
			'tab_siteseopro_easydigital_downloads' => esc_html__('Easy Digital Downloads', 'siteseo-pro'),
			'tab_siteseopro_pagespeed_insights' => esc_html__('PageSpeed Insights', 'siteseo-pro'),
			'tab_siteseopro_dublin_core' => esc_html__('Dublin Core', 'siteseo-pro'),
			'tab_siteseopro_local_business' => esc_html__('Local Business', 'siteseo-pro'),
			'tab_siteseopro_structured_data' => esc_html__('Structured Data Types', 'siteseo-pro'),
			'tab_siteseopro_breadcrumbs' => esc_html__('Breadcrumbs','siteseo-pro'),
			'tab_siteseopro_robots_txt' => esc_html__('robots.txt','siteseo-pro'),
			'tab_siteseopro_htaccess' => esc_html__('htaccess','siteseo-pro'),
			'tab_siteseopro_redirect_monitor' => esc_html__('Redirections / 404 monitoring', 'siteseo-pro'),
			'tab_google_news' => esc_html__('Google News', 'siteseo-pro'),
			
		];

		echo'<form method="post" style="margin-right:20px;" class="siteseo-option" name="siteseo-flush">';

		$sitesepro_license = get_option('siteseo_license');
		// TODO:: Will make it visible later.
		// if(empty($sitesepro_license['license'])){
			// echo'<div class="siteseopro_license_notices">';
				// $docs = siteseo_get_docs_links();

				// echo'<div class="siteseo-notice is-success">
				// <p><strong>' . __('Welcome to SiteSEO PRO!', 'siteseo-pro') . '</strong></p>
				// <p>' . __('Please activate your license to receive automatic updates and get premium support.', 'siteseo-pro') . '</p>
				// <p><a class="button button-primary" href="' . esc_url(admin_url('admin.php?page=siteseo-license')) . '">' . __('Activate License', 'siteseo-pro') . '</a></p>
				// </div>
				
			// </div>';
		// }
		echo'<span id="siteseo-tab-title"><strong>'.esc_html('SiteSEO - PRO','siteseo-pro').'</strong></span>';
		wp_nonce_field('sitseo_pro_settings');

		echo '<div id="siteseo-tabs" class="wrap">
		<div class="nav-tab-wrapper">';

		foreach ($siteseopro_settings_tabs as $tab_key => $tab_caption) {
			$active_class = ($current_tab === $tab_key) ? ' nav-tab-active' : '';
			echo '<a id="' . esc_attr($tab_key) . '-tab" class="nav-tab' . esc_attr($active_class) . '" data-tab="' . esc_attr($tab_key) . '">' . esc_html($tab_caption) . '</a>';
		}

		echo '</div>
		<div class="siteseo-tab' .($current_tab == 'tab_siteseopro_woocommerce' ? ' active' : '') . '" id="tab_siteseopro_woocommerce" style="display: none;">';
		self::woocommerce_tab();
		echo '</div>
		<div class="siteseo-tab' . ($current_tab == 'tab_siteseopro_easydigital_downloads' ? ' active' : '') . '" id="tab_siteseopro_easydigital_downloads" style="display: none;">';
		self::easy_digital_downloads_tab();
		echo '</div>
		<div class="siteseo-tab' . ($current_tab == 'tab_siteseopro_pagespeed_insights' ? ' active' : '') . '" id="tab_siteseopro_pagespeed_insights" style="display: none;">';
		self::pagespeed_insights_tab();
		echo '</div>
		<div class="siteseo-tab' . ($current_tab == 'tab_siteseopro_dublin_core' ? ' active' : '') . '" id="tab_siteseopro_dublin_core" style="display: none;">';
		self::dublin_core_tab();
		echo '</div>
		<div class="siteseo-tab' . ($current_tab == 'tab_siteseopro_local_business' ? ' active' : '') . '" id="tab_siteseopro_local_business" style="display: none;">';
		self::local_business_tab();
		echo '</div>
		<div class="siteseo-tab' .($current_tab == 'tab_siteseopro_structured_data' ? ' active' : ''). '" id="tab_siteseopro_structured_data" style="display: none;">';
		self::structured_data();
		echo'</div>
		<div class="siteseo-tab' .($current_tab == 'tab_siteseopro_breadcrumbs' ? ' active' : ''). '" id="tab_siteseopro_breadcrumbs" style="display: none;">';
		self::breadcrumbs();
		echo'</div>
		<div class="siteseo-tab' .($current_tab == 'tab_siteseopro_redirect_monitor' ? ' active' : ''). '" id="tab_siteseopro_redirect_monitor" style="display: none;">';
		self::redirect_monitoring();
		echo '</div>
		<div class="siteseo-tab' .($current_tab == 'tab_siteseopro_robots_txt' ? ' active' : ''). '" id="tab_siteseopro_robots_txt" style="display: none;">';
		self::robots();
		echo'</div>
		<div class="siteseo-tab' .($current_tab == 'tab_siteseopro_htaccess' ? ' active' : ''). '" id="tab_siteseopro_htaccess" style="display: none;">';
		self::htaccess();
		echo'</div>
		<div class="siteseo-tab' .($current_tab == 'tab_google_news' ? ' active' : ''). '" id="tab_google_news" style="display: none;">';
		self::google_news();
		echo '</div>
		
		</div>';

		siteseo_submit_button(__('Save changes', 'siteseo-pro'));
		echo '</form>
		</div>';

	}

	static function woocommerce_tab(){
		global $siteseo;

		if(!empty($_POST['submit'])){
			self::save_settings();
		}

		$options = $siteseo->pro;
		// Check if settings are enable
		$cart_page = !empty($options['woocommerce_cart_page_no_index']);
		$checkout_page = !empty($options['woocommerce_checkout_page_no_index']);
		$account_page = !empty($options['woocommerce_customer_account_page_no_index']);
		$woo_og_price = !empty($options['woocommerce_product_og_price']);
		$woo_og_currency = !empty($options['woocommerce_product_og_currency']);
		$woo_meta_generator = !empty($options['woocommerce_meta_generator']);
		$schema_output = !empty($options['woocommerce_schema_output']);
		$schema_breadcrumbs = !empty($options['woocommerce_schema_breadcrumbs_output']);
		$toggle_state_woocommerce = !empty($options['toggle_state_woocommerce']) ? $options['toggle_state_woocommerce'] : '';
		$nonce = wp_create_nonce('siteseo_pro_toggle_nonce');

		echo'<h3 class="siteseo-tabs">'.esc_html('WooCommerce','siteseo-pro').'</h3>';

		Util::render_toggle('woocommerce', $toggle_state_woocommerce, $nonce);

		if(!is_plugin_active('woocommerce/woocommerce.php')){
			echo'<div class="siteseo-notice is-warning"><p>'.wp_kses_post(__('You need to enable <strong>WooCommerce</strong> to apply these settings.', 'siteseo-pro')).'</p></div>';
		}

		echo'<table class="form-table"><tbody>
			<tr><th scope="row">Cart page</th>
			<td><label for="siteseo_woocommerce_cart_page_no_index">
				<input id="siteseo_woocommerce_cart_page_no_index" name="siteseo_pro_options[woocommerce_cart_page_no_index]" type="checkbox"' . 
			  (!empty($cart_page) ? 'checked="yes"' : '') . 
			  ' value="1"/>' . 
			  esc_html__('noindex', 'siteseo-pro') . 
			'</label>
			<p class="description">' . esc_html__('If your theme or plugin displays the cart across your entire WordPress site, don\'t enable this option.', 'siteseo-pro') . '</p></td></tr>
		  
			<tr><th scope="row">Checkout page</th>
			<td><label for="siteseo_woocommerce_checkout_page_no_index">
				<input id="siteseo_woocommerce_checkout_page_no_index" name="siteseo_pro_options[woocommerce_checkout_page_no_index]" type="checkbox"' . (!empty($checkout_page) ? 'checked="yes"' : '') . ' value="1"/>' . esc_html__('noindex', 'siteseo-pro') . 
			'</label></td></tr>
		  
			<tr><th scope="row">Customer account pages</th>
			<td><label for="siteseo_woocommerce_customer_account_page_no_index">
				<input id="siteseo_woocommerce_customer_account_page_no_index" name="siteseo_pro_options[woocommerce_customer_account_page_no_index]" type="checkbox"'.(!empty($account_page) ? 'checked="yes"' : '').' value="1"/>'.esc_html__('noindex', 'siteseo-pro') . 
			'</label></td></tr>
	   
			<tr><th scope="row">OG Price</th>
			<td><label for="siteseo_woocommerce_product_og_price">
				<input id="siteseo_woocommerce_product_og_price" name="siteseo_pro_options[woocommerce_product_og_price]" type="checkbox"'.(!empty($woo_og_price) ? 'checked="yes"' : '').' value="1"/>' .esc_html__('Add product:price:amount meta for product', 'siteseo-pro') . 
			'</label>

			<div class="siteseo-styles pre"><pre>' . esc_html('<meta property="product:price:amount" content="99" />') . '</pre></div></td></tr>
	 
			<tr><th scope="row">OG Currency</th>
			<td><label for="siteseo_woocommerce_product_og_currency">
				<input id="siteseo_woocommerce_product_og_currency" name="siteseo_pro_options[woocommerce_product_og_currency]" type="checkbox"'.(!empty($woo_og_currency) ? 'checked="yes"' : '').' value="1"/>'.esc_html__('Add product:price:currency meta for product', 'siteseo-pro').
			'</label>
			<div class="siteseo-styles pre"><pre>' . esc_html('<meta property="product:price:currency" content="EUR" />') .'</pre></div></td></tr>

			<tr><th scope="row">Remove WooCommerce generator tag in your head</th>
			<td><label for="siteseo_woocommerce_meta_generator">
				<input id="siteseo_woocommerce_meta_generator" name="siteseo_pro_options[woocommerce_meta_generator]" type="checkbox"'.(!empty($woo_meta_generator) ? 'checked="yes"' : '').' value="1"/>'.esc_html__('Remove WooCommerce meta generator', 'siteseo-pro').
			'</label>
			<div class="siteseo-styles pre"><pre>' . esc_html('<meta name="generator" content="WooCommerce 7.5" />') . '</pre></div></td>

			<tr><th scope="row">Remove WooCommerce Schemas</th>
			<td><label for="siteseo_woocommerce_schema_output">
				<input id="siteseo_woocommerce_schema_output" name="siteseo_pro_options[woocommerce_schema_output]" type="checkbox"'.(!empty($schema_output) ? 'checked="yes"' : '').' value="1"/>'.esc_html__('Remove default JSON-LD structured data (WooCommerce 3+)', 'siteseo-pro') . 
			'</label>
			<p class="description">'. 
				wp_kses_post(sprintf(__('The default product schema added by WooCommerce generates errors in Google Search Console. Disable it and create your own <a href="%s">automatic product schema</a>.', 'siteseo-pro'), esc_url(admin_url('edit.php?post_type=siteseo_schemas')))) . 
			'</p></td></tr>

			<tr><th scope="row">Remove WooCommerce breadcrumbs schemas only</th>
			<td><label for="siteseo_woocommerce_schema_breadcrumbs_output">
				<input id="siteseo_woocommerce_schema_breadcrumbs_output" name="siteseo_pro_options[woocommerce_schema_breadcrumbs_output]" type="checkbox"'.(!empty($schema_breadcrumbs) ? 'checked="yes"' : '').' value="1"/>' . esc_html__('Remove default breadcrumbs JSON-LD structured data (WooCommerce 3+)', 'siteseo-pro').
			'</label><p class="description">' . esc_html__('If "Remove default JSON-LD structured data (WooCommerce 3+)" option is already checked, the breadcrumbs schema is already removed from your source code.', 'siteseo-pro') . 
			'</p></td></tr>
		</tbody></table>
		<input type="hidden" name="woocommerce_settings" value="1"/>';

	}

	static function easy_digital_downloads_tab() {

		if(!empty($_POST['submit'])){
			self::save_settings();
		}

		$options = get_option('siteseo_pro_options');

		// check settings enable
		$option_og_price = isset($options['edd_product_og_price']) ? $options['edd_product_og_price'] : '';
		$option_og_currency = isset($options['edd_product_og_currency']) ? $options['edd_product_og_currency'] : '';
		$option_meta_generator = isset($options['edd_meta_generator']) ? $options['edd_meta_generator'] : '';
		$toggle_state_easy_digital = isset($options['toggle_state_easy_digital']) ? $options['toggle_state_easy_digital'] : '';

		$nonce = wp_create_nonce('siteseo_pro_toggle_nonce');

		echo'<h3 class="siteseo-tabs">'.esc_html('Easy Digital Downloads','siteseo-pro').'</h3>';

		Util::render_toggle('edd', $toggle_state_easy_digital, $nonce);
		
		echo'<p>'.esc_html__('Improve Easy Digital Downloads SEO', 'siteseo-pro').'</p>';

		if(!is_plugin_active('easy-digital-downloads/easy-digital-downloads.php')){
			echo '<div class="siteseo-notice is-warning"><p>'.
			wp_kses_post(__('You need to enable <strong>Easy Digital Downloads</strong> to apply these settings.', 'siteseo-pro'))
			.'</p></div>';
		}

		echo'<table class="form-table">
			<tbody>
				<tr><th scope="row">OG price</th>
					<td><label for="siteseo_edd_product_og_price">
						<input id="siteseo_edd_product_og_price" name="siteseo_pro_options[edd_product_og_price]" type="checkbox" ' . (empty(!$option_og_price) ? 'checked="yes"' : '') . ' value="1"/>' . esc_html__('Add product:price:amount meta for product', 'siteseo-pro') .
						 '</label>' .
						'<div class="siteseo-styles pre"><pre>' . esc_html('<meta property="product:price:amount" content="99" />') . '</pre></div>
					</td>
				</tr>' .
				'<tr><th scope="row">OG Currency</th>' .
					'<td><label for="siteseo_edd_product_og_currency">' .
						'<input id="siteseo_edd_product_og_currency" name="siteseo_pro_options[edd_product_og_currency]" type="checkbox"'. (!empty($option_og_currency) ? 'checked="yes"' : '') . ' value="1"/>' . esc_html__('Add product:price:currency meta for product', 'siteseo-pro') . '</label>' .
						'<div class="siteseo-styles pre"><pre>' . esc_html('<meta property="product:price:currency" content="EUR" />') . '</pre></div>
					</td>
				</tr>' .
				'<tr>
					<th scope="row">'.esc_html__('Remove Easy Digital Downloads generator tag in your head', 'siteseo-pro').'</th>' .
					'<td><label for="siteseo_edd_meta_generator">' .
						'<input id="siteseo_edd_meta_generator" name="siteseo_pro_options[edd_meta_generator]" type="checkbox" ' . (!empty($option_meta_generator) ? 'checked="yes"' : '') . ' value="1"/>' . esc_html__('Remove EDD meta generator', 'siteseo-pro') .
						'</label>' .
					 '<div class="siteseo-styles pre"><pre>' . esc_html('<meta name="generator" content="Easy Digital Downloads v3.0" />') . '</pre></div>
					</td>
				</tr>
			</tbody>
		</table>

		<input type="hidden" name="digital_download_settings" value="1"/>';

	}

	static function pagespeed_insights_tab(){

		global $siteseo;

		if(!empty($_POST['submit'])){
			self::save_settings();	
		}

		// check settings enable
		$check_api_key = !empty($siteseo->pro['ps_api_key']) ? $siteseo->pro['ps_api_key'] : '';
		$docs = function_exists('siteseo_get_docs_links') ? siteseo_get_docs_links() : '';
 

		echo'<h3 class="siteseo-tabs">'.esc_html('PageSpeed Insights','siteseo-pro').'</h3>
			<p>'.esc_html__('Check your site performance with Google PageSpeed Insights.', 'siteseo-pro').'</p>
			<p>'.esc_html__('Learn how your site has performed, based on data from your actual users around the world.', 'siteseo-pro').'</p>
		 <table class="form-table">
			<tbody>' .
				'<tr><th scope="row">'.esc_html__('Enter your own Google Page Speed API key', 'siteseo-pro').'</th>';

		echo sprintf(
			'<td><input id="siteseo_ps_api_key" type="text" name="siteseo_pro_options[ps_api_key]" aria-label="%s" placeholder="%s" value="%s">',
			esc_html__('Google Page Speed Insights API key', 'siteseo-pro'),
			esc_html__('Enter your Page Speed Insights API key', 'siteseo-pro'),
			esc_html($check_api_key)
		);

		echo '<p class="siteseo-help description">
			<span class="dashicons dashicons-external"></span>
			<a href="' . esc_url($docs['page_speed']['api']) . '" target="_blank">' . esc_html__('Learn how to create a free Google Page Speed API key', 'siteseo-pro') . '</a>
		  </p>
		  <p class="siteseo-help description">
			<span class="dashicons dashicons-external"></span>
			<a href="' . esc_url($docs['page_speed']['google']) . '" target="_blank">' . esc_html__('A Page Speed Insights key is required to avoid quota errors.', 'siteseo-pro') . '</a>
		  </p></tr>';
		  
		echo'</th></tbody></table>';

		echo '<br/><div class="siteseo-pagespeed-input-wrapper">
			<input id="siteseo_ps_url" type="text" name="siteseo_pro_options[siteseo_ps_url]" placeholder="' . esc_attr__('Enter a URL to analyse with Page Speed Insights', 'siteseo-pro') . '" value="' . esc_html(get_home_url()) . '">
			<button type="button" id="siteseopro-pagespeed-btn" class="siteseo-request-page-speed btn btnPrimary">' .
			esc_html__('Analyse performance', 'siteseo-pro') . '</button><div style="position: absolute;left:99.5%;margin-top:1%;" class="spinner"></div>
			<button type="button" id="siteseopro-clear-Page-speed-insights" class="btn btnTertiary">' .
			esc_html__('Remove last analysis', 'siteseo-pro') . '</button>
		  </div>';

		echo'<div id="siteseopro-pagespeed-results">';
		$page_speed = get_option('siteseo_pro_page_speed', []); 

		if(!empty($page_speed['mobile']) && !empty($page_speed['desktop'])){
			PageSpeed::analysis();
		}

		echo'<br/><br/></div>
		<input type="hidden" name="pagespeed_settings" value="1"/>';
	}

	static function dublin_core_tab(){
		global $siteseo;

		if(!empty($_POST['submit'])){
			self::save_settings();
		}

		$dublin_core = !empty($siteseo->pro['dublin_core_enable']);
		$toggle_state_dublin_core = !empty($siteseo->pro['toggle_state_dublin_core']) ? $siteseo->pro['toggle_state_dublin_core'] : '';
		$nonce = wp_create_nonce('siteseo_pro_toggle_nonce');

		echo'<h3 class="siteseo-tabs">'.esc_html('Dublin Core','siteseo-pro').'</h3>';

		Util::render_toggle('dublin', $toggle_state_dublin_core, $nonce);

		 echo'<br/>' . esc_html__('Dublin Core is a set of meta tags to describe your content','siteseo-pro') .
		 '<br/>' . esc_html__('These tags are automatically generated. Recognized by states / governments, they are used by directories, Bing, Baidu and Yandex.','siteseo-pro') .
		 '<table class="form-table">
			<tbody>
				<tr>' .
					'<th scope="row" style="user-select: auto;">'.esc_html__('Enable Dublin Core', 'siteseo-pro').'</th>'.
					'<td><label for="siteseo_dublin_core_enable">'.
						'<input id="siteseo_dublin_core_enable" name="siteseo_pro_options[dublin_core_enable]" type="checkbox" ' .
							(!empty($dublin_core) ? 'checked="yes"' : '') . ' value="1"/>' . esc_html__('Enable Dublin Core meta tags (dc.title, dc.description, dc.source, dc.language, dc.relation, dc.subject)', 'siteseo-pro') .
						'</label>
					</td>
				</tr>
			</tbody>
		</table>
		<input type="hidden" name="dublin_code_settings" value="1"/>';
	}
	
	static function local_business_tab(){
		global $siteseo;
		
		if(!empty($_POST['submit'])){
			self::save_settings();
		}
		
		// Time slots
		$days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
	
		$hours = range('00', '23');
		$mins = ['00', '15', '30', '45', '59'];
		
		if(isset($_POST['siteseo_pro_options']) && is_array($_POST['siteseo_pro_options'])){
			$siteseo_pro_options = map_deep(wp_unslash($_POST['siteseo_pro_options']), 'sanitize_text_field');
		}
		
		$business_type['LocalBusiness'] = 'Local Business (default)';
		$business_type['AnimalShelter'] = 'Animal Shelter';
		$business_type['ChildCare'] = 'Child Care';
		$business_type['DryCleaningOrLaundry'] = 'Dry Cleaning Or Laundry';
		$business_type['EmergencyService'] = 'Emergency Service';
		$business_type['FireStation'] = '|-FireStation';
		$business_type['Hospital'] = '|-Hospital';
		$business_type['PoliceStation'] = '|-Police Station';
		$business_type['EmploymentAgency'] = 'Employment Agency';
		$business_type['Entertainment Business'] = 'Entertainment Business';
		$business_type['AdultEntertainment'] = '|-AdultEntertainment';
		$business_type['AmusementPark'] = '|-Amusement Park';
		$business_type['ArtGallery'] = '|-Art Gallery';
		$business_type['Casino'] = '|-Casino';
		$business_type['ComedyClub'] = '|-Comedy Club';
		$business_type['MovieTheater'] = '|-Movie Theater';
		$business_type['NightClub'] = '|-Night Club';
		$business_type['FinancialService'] = '|-Financial Service';
		$business_type['AccountingService'] = '|-Accounting Service';
		$business_type['AutomatedTeller'] = '|-Automated Teller';
		$business_type['BankOrCreditUnion'] = '|-Bank Or CreditUnion';
		$business_type['InsuranceAgency'] = '|-Insurance Agency';
		$business_type['FoodEstablishment'] = 'Food Establishment';
		$business_type['Bakery'] = '|-Bakery';
		$business_type['BarOrPub'] = '|-Bar Or Pub';
		$business_type['Brewery'] = 'Brewery';
		$business_type['CafeOrCoffeeShop'] = '|-Cafe Or CoffeeShop';
		$business_type['FastFoodRestaurant'] = '|-Fast Food Restaurant';
		$business_type['IceCreamShop'] = '|-Ice Cream Shop';
		$business_type['Restaurant'] = '|-Restaurant';
		$business_type['Winery'] = '|-Winery';
		$business_type['GovernmentOffice'] = 'Government Office';
		$business_type['PostOffice'] = '|-PostOffice';
		$business_type['HealthAndBeautyBusiness'] = 'Health And Beauty Business';
		$business_type['BeautySalon'] = '|-Beauty Salon';
		$business_type['DaySpa'] = '|-DaySpa';
		$business_type['HairSalon'] = '|-Hair Salon';
		$business_type['HealthClub'] = '|-Health Club';
		$business_type['NailSalon'] = '|-Nail Salon';
		$business_type['TattooParlor'] = '|-Tattoo Parlor';
		$business_type['HomeAndConstructionBusiness'] = '|-Home And Construction Business';
		$business_type['Electrician'] = '|-Electrician';
		$business_type['HVACBusiness'] = '|-HVAC Business';
		$business_type['HousePainter'] = '|-House Painter';
		$business_type['Locksmith'] = '|-Locksmith';
		$business_type['MovingCompany'] = '|-MovingCompany';
		$business_type['Plumber'] = '|-Plumber';
		$business_type['RoofingContractor'] = '|-Roofing Contractor';
		$business_type['InternetCafe'] = '|-Internet Cafe';
		$business_type['MedicalBusiness'] = '|-Medical Business';
		$business_type['CommunityHealth'] = '|-Community Health';
		$business_type['Dentist'] = '|-Dentist';
		$business_type['Dermatology'] = '|-Dermatology';
		$business_type['DietNutrition'] = '|-Diet Nutrition';
		$business_type['Emergency'] = '|-Emergency';
		$business_type['Gynecologic'] = '|-Gynecologic';
		$business_type['MedicalClinic'] = '|-MedicalClinic';
		$business_type['Midwifery'] = '|-Midwifery';
		$business_type['Nursing'] = '|-Nursing';
		$business_type['Obstetric'] = '|-Obstetric';
		$business_type['Oncologic'] = '|-Oncologic';
		$business_type['Optician'] = '|-Optician';
		$business_type['Otolaryngologic'] = '|-Otolaryngologic';
		$business_type['Pediatric'] = '|-Pediatric';
		$business_type['Pharmacy'] = '|-Pharmacy';
		$business_type['Physiotherapy'] = '|-Physiotherapy';
		$business_type['PlasticSurgery'] = '|-PlasticSurgery';
		$business_type['Podiatric'] = '|-Podiatric';	
		$business_type['PrimaryCare'] = '|-PrimaryCare';
		$business_type['Psychiatric'] = '|-Psychiatric';
		$business_type['PublicHealth'] = '|-PublicHealth';
		$business_type['VeterinaryCare'] = '|-VeterinaryCare';
		$business_type['LegalService'] = '|-LegalService';	
		$business_type['Attorney'] = '|-Attorney';	
		$business_type['Notary'] = '|-Notary';
		$business_type['Library'] = 'Library';	
		$business_type['LodgingBusiness'] = 'LodgingBusiness';
		$business_type['BedAndBreakfast'] = '|-Bed And Breakfast';
		$business_type['Campground'] = '|-Campground';
		$business_type['Hostel'] = '|-Hostel';
		$business_type['Hotel'] = '|-Hotel';
		$business_type['Motel'] = '|-Motel';
		$business_type['Resort'] ='|-Resort';
		$business_type['ProfessionalService'] ='Professional Service';
		$business_type['RadioStation'] ='Radio Station';
		$business_type['RealEstateAgent'] ='Real Estate Agent';
		$business_type['RecyclingCenter'] ='Recycling Center';
		$business_type['SelfStorage'] ='Real Self Storage';
		$business_type['ShoppingCenter'] ='ShoppingCenter';
		$business_type['SportsActivityLocation'] ='Sports Activity Location';	
		$business_type['BowlingAlley'] ='|-Bowling Alley';
		$business_type['ExerciseGym'] = '|-Exercise Gym';
		$business_type['GolfCourse'] = '|-Golf Course';
		$business_type['HealthClub'] = '|-HealthClub';
		$business_type['PublicSwimmingPool'] = '|-Public Swimming Pool';
		$business_type['SkiResort'] = '|-Ski Resort';
		$business_type['SportsClub'] = '|-Sports Club';
		$business_type['StadiumOrArena'] = '|-Stadium Or Arena';
		$business_type['TennisComplex'] = '|-Tennis Complex';
		$business_type['Store'] = '|-Store';
		$business_type['AutoPartsStore'] = '|-Auto Parts Store';
		$business_type['BikeStore'] = '|-Bike Store';
		$business_type['BookStore'] = '|-Book Store';
		$business_type['ClothingStore'] = '|-Clothing Store';
		$business_type['ComputerStore'] = '|-Computer Store';
		$business_type['ConvenienceStore'] = '|-Convenience Store';
		$business_type['DepartmentStore'] = '|-Department Store';
		$business_type['ElectronicsStore'] = '|-Electronics Store';
		$business_type['Florist'] = '|-Florist';
		$business_type['FurnitureStore'] = '|-Furniture Store';
		$business_type['GardenStore'] = '|-Garden Store';
		$business_type['GroceryStore'] = '|-Grocery Store';
		$business_type['HardwareStore'] = '|-Hardware Store';
		$business_type['HobbyShop'] = '|-Hobby Shop';
		$business_type['HomeGoodsStore'] = '|-Home Goods Store';
		$business_type['JewelryStore'] = '|-Jewelry Store';
		$business_type['LiquorStore'] = '|-Liquor Store';
		$business_type['MensClothingStore'] = '|-Mens Clothing Store';
		$business_type['MobilePhoneStore'] = '|-Mobile Phone Store';
		$business_type['MovieRentalStore'] = '|-Movie Rental Store';
		$business_type['MusicStore'] = '|-Music Store';
		$business_type['OfficeEquipmentStore'] = '|-Office Equipment Store';
		$business_type['OutletStore'] = '|-Outlet Store';
		$business_type['PawnShop'] = '|-Pawn Shop';
		$business_type['PetStore'] = '|-PetStore';
		$business_type['ShoeStore'] = '|-Shoe Store';
		$business_type['SportingGoodsStore'] = '|-Sporting Goods Store';
		$business_type['TireShop'] = '|-Tire Shop';
		$business_type['ToyStore'] = '|-Toy Store';
		$business_type['WholesaleStore'] = '|-Whole sale Store';
		$business_type['TelevisionStation'] = '|-Whole sale Store';
		$business_type['TouristInformationCenter'] = 'Tourist Information Center';
		$business_type['TravelAgency'] = 'Travel Agency';
		$business_type['AutomotiveBusiness'] = 'Automotive Business';
		$business_type['AutoBodyShop'] = '|-Auto Body Shop';
		$business_type['AutoDealer'] = '|-Auto Dealer';
		$business_type['AutoPartsStore'] = '|-Auto Parts Store';
		$business_type['AutoRental'] = '|-Auto Rental';
		$business_type['AutoRepair'] = '|-Auto Repair';
		$business_type['AutoWash'] = '|-AutoWash';
		$business_type['GasStation'] = '|-Gas Station';
		$business_type['MotorcycleDealer'] = '|-Motorcycle Dealer';
		$business_type['MotorcycleRepair'] = '|-MotorcycleRepair';
		
		// Get saved settings
		$options = $siteseo->pro;
		
		$display_schema = isset($options['local_business_display_schema']) ? esc_attr($options['local_business_display_schema']) : '';
		$set_street_address = isset($options['street_address']) ? esc_attr($options['street_address']): '';
		$set_city = isset($options['city']) ? esc_attr($options['city']): ''; 
		$set_state = isset($options['state']) ? esc_attr($options['state']): ''; 
		$set_postal_code = isset($options['postal_code']) ? esc_attr($options['postal_code']) : '' ; 
		$set_country = isset($options['country']) ? esc_attr($options['country']): '';
		$set_latitude = isset($options['latitude'])? esc_attr($options['latitude']): ''; 
		$set_longitude = isset($options['longitude']) ? esc_attr($options['longitude']) : '';
		$set_place_id = isset($options['place_id']) ? esc_attr($options['place_id']) : '';
		$set_url = isset($options['url']) ? esc_attr($options['url']) : '';
		$set_telephone = isset($options['telephone']) ? esc_attr($options['telephone']): '';
		$set_price_range = isset($options['price_range']) ? esc_attr($options['price_range']) : '';
		$set_cuisine_served = isset($options['cuisine_served'])? esc_attr($options['cuisine_served']) : '';
		$set_accepts_reser = isset($options['accepts_reser']) ? esc_attr($options['accepts_reser']) : '';
		$set_business_type = isset($options['business_type']) ? esc_attr($options['business_type']) : 'LocalBusiness';
		$toggle_state_local_buz = isset($options['toggle_state_local_buz']) ? esc_html($options['toggle_state_local_buz']): '';
		
		$nonce = wp_create_nonce('siteseo_pro_toggle_nonce');

		$docs = siteseo_get_docs_links();

		// Display the settings form
		echo'<h3 class="siteseo-tabs">'.esc_html('Local Business','siteseo-pro').'</h3>';

		Util::render_toggle('local', $toggle_state_local_buz, $nonce);

		echo'<p>'.esc_html__('Local Business data type for Google', 'siteseo-pro').'</p>
		
		<form method="post" action="">';
		wp_nonce_field('sitseo_pro_settings', 'sitseo_pro_settings_nonce');
	
		echo'<table class="form-table">
			<tbody>
				<tr>
					<th scope="row" style="user-select: auto;">Business type</th>
				<td>
					<select id="siteseo_pro_rich_snippets_lb_type" name="siteseo_pro_options[business_type]">';
					
					foreach ($business_type as $type_value => $type_i18n) {
						$selected = ($type_value == $set_business_type) ? 'selected' : '';
						echo '<option value="'.esc_attr($type_value).'" '.esc_attr($selected).'>'.esc_html($type_i18n).'</option>';
					}
		
					echo'</select>
						</td>
				</tr>
				
				<tr><th scope="row" style="user-select: auto;">Street Address</th>
					<td><input type="text" name="siteseo_pro_options[street_address]" placeholder="eg: Place Bellevue" value="'.esc_attr($set_street_address).'">
						<p class="description">' . sprintf('<span class="field-required">%s</span> %s.', esc_html__('Required', 'siteseo-pro'), esc_html__('property by Google', 'siteseo-pro')) . '</p>
					</td>
				</tr>
		
				<tr><th scope="row" style="user-select: auto;">City</th>
					<td><input type="text" name="siteseo_pro_options[city]" placeholder="Biarritz" value="'.esc_attr($set_city).'">
						<p class="description">' . sprintf('<span class="field-required">%s</span> %s.', esc_html__('Required', 'siteseo-pro'), esc_html__('property by Google', 'siteseo-pro')) . '</p>
					</td>
				</tr>
				
				<tr><th scope="row" style="user-select: auto;">State</th>
					<td><input type="text" name="siteseo_pro_options[state]" placeholder="eg: Nouvelle Aquitaine" value="'.esc_attr($set_state).'">
						<p class="description">' . sprintf('<span class="field-required">%s</span> %s.', esc_html__('Required', 'siteseo-pro'), esc_html__('property by Google', 'siteseo-pro')) . '</p>
					</td>
				</tr>
				
				<tr><th scope="row" style="user-select: auto;">Postal code</th>
					<td><input type="text" name="siteseo_pro_options[postal_code]" placeholder="eg: 64200" value="'.esc_attr($set_postal_code).'">
						<p class="description">' . sprintf('<span class="field-required">%s</span> %s.', esc_html__('Required', 'siteseo-pro'), esc_html__('property by Google', 'siteseo-pro')) . '</p>
					</td>
				</tr>
				
				<tr><th scope="row" style="user-select: auto;">Country</th>
					<td><input type="text" name="siteseo_pro_options[country]" placeholder="eg: France" value="'.esc_attr($set_country).'">
						<p class="description">' . sprintf('<span class="field-required">%s</span> %s.', esc_html__('Required', 'siteseo-pro'), esc_html__('property by Google', 'siteseo-pro')) . '</p>
					</td>
				</tr>
				
				<tr><th scope="row" style="user-select: auto;">Latitude</th>
					<td><input type="text" name="siteseo_pro_options[latitude]" placeholder="eg: 43.4831389" value="'.esc_attr($set_latitude).'">
						 <p class="description">' . sprintf('<span class="field-recommended">%s</span> %s.', esc_html__('Recommended', 'siteseo-pro'), esc_html__('property by Google', 'siteseo-pro')) . '</p>
					</td>
				</tr>
				
				<tr><th scope="row" style="user-select: auto;">Longitude</th>
					<td><input type="text" name="siteseo_pro_options[longitude]" placeholder="eg: -1.5630987" value="'.esc_attr($set_longitude).'">
						<p class="description">' . sprintf('<span class="field-recommended">%s</span> %s.', esc_html__('Recommended', 'siteseo-pro'), esc_html__('property by Google', 'siteseo-pro')) . '</p>
					</td>
				</tr>
				
				<tr><th scope="row" style="user-select: auto;">Place ID</th>
					<td><input type="text" name="siteseo_pro_options[place_id]" placeholder="eg: Biarrit" value="'.esc_attr($set_place_id).'">
						<p class="description">' . wp_kses_post(__('<a href="https://developers.google.com/places/web-service/place-id" target="_blank">Click here to find your Google Maps Place ID</a><span class="siteseo-help dashicons dashicons-external"></span> for your Local Business. <br>This ID will be used to display the Google Maps link from the LB widget.', 'siteseo-pro')) . '</p>
					</td>
				</tr>
				
				<tr><th scope="row" style="user-select: auto;">URL</th>
					<td><input type="text" name="siteseo_pro_options[url]" placeholder="default:'.esc_url(get_home_url()).'" value="'.esc_attr($set_url).'">
						<p class="description"> '. esc_html__('Default: homepage. Google recommends to include your business details (address, phone, website...) for your visitors too.', 'siteseo-pro') .' </p>
						<p class="description">' . sprintf('<span class="field-recommended">%s</span> %s.', esc_html__('Recommended', 'siteseo-pro'), esc_html__('property by Google', 'siteseo-pro')) . '</p>
					</td>
				</tr>
				
				<tr><th scope="row" style="user-select: auto;">Telephone</th>
					<td><input type="text" name="siteseo_pro_options[telephone]" placeholder="eg: +33559240138" value="'.esc_attr($set_telephone).'">
						<p class="description">' . sprintf('<span class="field-recommended">%s</span> %s.', esc_html__('Recommended', 'siteseo-pro'), esc_html__('property by Google', 'siteseo-pro')) . '</p>
					</td>
				</tr>            
				
				<tr><th scope="row" style="user-select: auto;">Price range</th>
					<td><input type="text" name="siteseo_pro_options[price_range]" placeholder="eg: $$, €€€, or ££££..." value="'.esc_attr($set_price_range).'">
						<p class="description">' . sprintf('<span class="field-recommended">%s</span> %s.', esc_html__('Recommended', 'siteseo-pro'), esc_html__('property by Google', 'siteseo-pro')) . '</p>
					</td>
				</tr>
				
				<tr><th scope="row" style="user-select: auto;">'.esc_html__('Cuisine served', 'siteseo-pro').'</th>
					<td><input type="text" name="siteseo_pro_options[cuisine_served]" placeholder="French, Mediterranean, or American" value="'.esc_attr($set_cuisine_served).'">
						<p class="description"> '. esc_html__('Only to be filled if the business type is: "FoodEstablishment", "Bakery", "BarOrPub", "Brewery", "CafeOrCoffeeShop", "FastFoodRestaurant", "IceCreamShop", "Restaurant" or "Winery".', 'siteseo-pro').' </p>
						<p class="description">' . sprintf('<span class="field-recommended">%s</span> %s.', esc_html__('Recommended', 'siteseo-pro'), esc_html__('property by Google', 'siteseo-pro')) . '</p>
					</td>
				</tr>            
				
				<tr><th scope="row" style="user-select: auto;">'.esc_html__('Accepts Reservations', 'siteseo-pro').'</th>
					<td><input type="text" name="siteseo_pro_options[accepts_reser]" placeholder="eg.True" value="'.esc_attr($set_accepts_reser).'">
						<p class="description"> '. esc_html__('Indicates whether a FoodEstablishment accepts reservations. Values can be Boolean (True or False), an URL at which reservations can be made or (for backwards compatibility) the strings Yes or No.', 'siteseo-pro').' </p>
						<p class="description">' . sprintf('<span class="field-recommended">%s</span> %s.', esc_html__('Recommended', 'siteseo-pro'), esc_html__('property by Google', 'siteseo-pro')) . '</p>
					</td>
				</tr>
			
				<tr><th scope="row" style="user-select: auto;">Opening hours</th>    
					<td><div class="siteseo-notice-pro">
						<p>' . wp_kses_post(__('<strong>Morning and Afternoon are just time slots</strong>', 'siteseo-pro')) . '</p>
						<p>' . esc_html__('Eg: if you\'re opened from 10:00 AM to 9:00 PM, check Morning and enter 10:00 / 21:00.', 'siteseo-pro') . '</p>
						<p>' . esc_html__('If you are open non-stop, check Morning and enter 0:00 / 23:59.', 'siteseo-pro') . '</p>
						</div>
					
					<ul style="list-style-type: none;">';
					
					foreach($days as $key => $day) {

						$is_closed = !empty($options['opening_hours'][$key]['closed']) ? $options['opening_hours'][$key]['closed'] : 0;
						$open_morning = !empty($options['opening_hours'][$key]['open_morning']) ? $options['opening_hours'][$key]['open_morning'] : 0;
						$open_afternoon = !empty($options['opening_hours'][$key]['open_afternoon']) ? $options['opening_hours'][$key]['open_afternoon'] : 0;
						
						// Get saved start and end times
						$open_morning_start_hour = !empty($options['opening_hours'][$key]['open_morning_start_hour']) ? $options['opening_hours'][$key]['open_morning_start_hour'] : '';
						$open_morning_start_min = !empty($options['opening_hours'][$key]['open_morning_start_min']) ? $options['opening_hours'][$key]['open_morning_start_min'] : '';
	
						$open_morning_end_hour = !empty($options['opening_hours'][$key]['open_morning_end_hour']) ? esc_attr($options['opening_hours'][$key]['open_morning_end_hour']) : '';
						$open_morning_end_min = !empty($options['opening_hours'][$key]['open_morning_end_min']) ? esc_attr($options['opening_hours'][$key]['open_morning_end_min']) : '';
						
						$open_afternoon_start_hour = !empty($options['opening_hours'][$key]['open_afternoon_start_hour']) ? esc_attr($options['opening_hours'][$key]['open_afternoon_start_hour']) : '';
						$open_afternoon_start_min = !empty($options['opening_hours'][$key]['open_afternoon_start_min']) ? esc_attr($options['opening_hours'][$key]['open_afternoon_start_min']) : '';
						$open_afternoon_end_hour = !empty($options['opening_hours'][$key]['open_afternoon_end_hour']) ? esc_attr($options['opening_hours'][$key]['open_afternoon_end_hour']) : '';
						$open_afternoon_end_min = !empty($options['opening_hours'][$key]['open_afternoon_end_min']) ? esc_attr($options['opening_hours'][$key]['open_afternoon_end_min']) : '';
	
						echo'<li><h3>' . esc_html($day) . '</h3></li><hr><br>
						<input type="checkbox"'.(!empty($is_closed) ? 'checked="yes"' : '').' name="siteseo_pro_options[opening_hours]['.esc_attr($key).'][closed]" value="1"> Closed all the day?</input><br /><br />
						<input type="checkbox"'.(!empty($open_morning) ? 'checked="yes"' : '').' name="siteseo_pro_options[opening_hours]['.esc_attr($key).'][open_morning]" value="1">Open in the morning?</input><br /><br />
						<div style="display:flex;">
						<select style="width:auto;" name="siteseo_pro_options[opening_hours]['.esc_attr($key).'][open_morning_start_hour]">';

						foreach($hours as $hour){
							$selected = ($hour == $open_morning_start_hour) ? 'selected' : '';
							echo '<option value="' . esc_attr($hour) . '" ' . esc_attr($selected) . '>' . esc_html($hour) . '</option>';
						}
						
						echo '</select>:<select style="width:auto;" name="siteseo_pro_options[opening_hours]['.esc_attr($key).'][open_morning_start_min]">';

						foreach($mins as $min){
							$selected = ($min == $open_morning_start_min) ? 'selected' : '';
							echo '<option value="' . esc_attr($min) . '" ' . esc_attr($selected) . '>' . esc_html($min) . '</option>';
						}
						
						echo '</select>-<select style="width:auto;" name="siteseo_pro_options[opening_hours]['.esc_attr($key).'][open_morning_end_hour]">';
						
						foreach($hours as $hour){
							$selected = ($hour == $open_morning_end_hour) ? 'selected' : '';
							echo '<option value="'. esc_attr($hour) .'" '.esc_attr($selected).'>'.esc_html($hour).'</option>';
						}
						
						echo '</select>:<select style="width:auto;" name="siteseo_pro_options[opening_hours]['.esc_attr($key).'][open_morning_end_min]">';
						
						foreach($mins as $min){
							$selected = ($min == $open_morning_end_min) ? 'selected' : '';
							echo '<option value="' . esc_attr($min) . '" ' . esc_attr($selected) . '>' . esc_html($min) . '</option>';
						}
		
						echo '</select><br><br></div>';
				
						echo'<br><input type="checkbox"'.(!empty($open_afternoon) ? 'checked="yes"' : '').' name="siteseo_pro_options[opening_hours]['.esc_attr($key).'][open_afternoon]" value="1">Open in the afternoon?</input><br /><br />
						 <div style="display:flex;"><select style="width:auto;" name="siteseo_pro_options[opening_hours]['.esc_attr($key).'][open_afternoon_start_hour]">';
							
							// Get saved start and end times	
							foreach($hours as $hour){
								$selected = ($hour == $open_afternoon_start_hour) ? 'selected' : '';
								echo '<option value="' . esc_attr($hour) . '" ' . esc_attr($selected) . '>' . esc_html($hour) . '</option>';
							}
							
							echo'</select>:<select style="width:auto;" name="siteseo_pro_options[opening_hours]['.esc_attr($key).'][open_afternoon_start_min]">';
								foreach($mins as $min){
									$selected = ($min == $open_afternoon_start_min) ? 'selected' : '';
									echo '<option value="' . esc_attr($min) . '" ' . esc_attr($selected) . '>' . esc_html($min) . '</option>';
								}
	
							echo'</select>-<select style="width:auto;" name="siteseo_pro_options[opening_hours]['.esc_html($key).'][open_afternoon_end_hour]">';
								foreach($hours as $hour){
								   $selected = ($hour == $open_afternoon_end_hour) ? 'selected' : '';
									echo '<option value="' . esc_attr($hour) . '" ' . esc_attr($selected) . '>' . esc_html($hour) . '</option>';
								}
								
							echo'</select>:<select style="width:auto;" name="siteseo_pro_options[opening_hours]['.esc_attr($key).'][open_afternoon_end_min]">';
								foreach($mins as $min){
									$selected = ($min == $open_afternoon_end_min) ? 'selected' : '';
									echo '<option value="' . esc_attr($min) . '" ' . esc_attr($selected) . '>' . esc_attr($min) . '</option>';
								}

							echo'</select></div>';

						}
						echo '<br><br><p class="description">' . sprintf('<span class="field-recommended">%s</span> %s.', esc_html__('Recommended', 'siteseo-pro'), esc_html__('property by Google', 'siteseo-pro')) . '</p></td>
				</tr>
			</tbody>
		</table>
		<input type="hidden" name="local_business_settings" value="1"/>';
	}


	static function structured_data(){
		global $siteseo;

		if(!empty($_POST['sumbit'])){
			self::save_settings();
		}

		$options = $siteseo->pro;

		//load settings
		$toggle_state_stru_data = isset($options['toggle_state_stru_data']) ? $options['toggle_state_stru_data'] : '';
		$option_set_enable_structured_data = isset($options['enable_structured_data']) ? $options['enable_structured_data'] : '';
		$option_logo_url = isset($options['structured_data_image_url']) ? $options['structured_data_image_url'] : '';
		$option_desciption = isset($options['org_desciption']) ? $options['org_desciption'] : '';
		$option_email_id = isset($options['org_email']) ? $options['org_email'] : '';
		$option_phone = isset($options['org_phone_no']) ? $options['org_phone_no'] : '';
		$option_legal_name = isset($options['org_legal']) ? $options['org_legal'] : '';
		$option_establish_date = isset($options['establish_date']) ? $options['establish_date'] : '';
		$option_number_emp = isset($options['number_emp']) ? $options['number_emp'] : '';
		$option_vat_id = isset($options['vat_id']) ? $options['vat_id'] : '';
		$option_tax_id = isset($options['tax_id']) ? $options['tax_id'] : ''; 
		$option_iso_id = isset($options['iso_code']) ? $options['iso_code'] : '';
		$option_let_code = isset($options['let_code']) ? $options['let_code'] : '';
		$option_duns_number = isset($options['duns_number']) ? $options['duns_number'] : '';
		$option_naics_code = isset($options['naics_code']) ? $options['naics_code'] : '';

		$nonce = wp_create_nonce('siteseo_pro_toggle_nonce');
		
		echo'<h3 class="siteseo-tabs">'.esc_html('Structured Data Types (schema.org)','siteseo-pro').'</h3>';

		Util::render_toggle('structured', $toggle_state_stru_data, $nonce);

		echo'<table class="form-table">
			<tbody>
				<tr>
					<th scope="row" style="user-select: auto;">Enable Structured Data</th>
					<td>
						<label for="siteseo_structured_data">
						<input id="siteseo_structured_data" name="siteseo_pro_options[enable_structured_data]" type="checkbox" ' . (empty(empty($option_set_enable_structured_data)) ? 'checked="yes"' : '') .' value="1"/>' .
						esc_html__('Enable Structured Data Types on your site', 'siteseo-pro') .'</label>
					</td>
				</tr>
				<tr>
					<th scope="row" style="user-select: auto">Upload your publisher logo</th>
					<td>
						<input id="structured_data_image_url" autocomplete="off" type="text" value="'. esc_url($option_logo_url) .'" name="siteseo_pro_options[structured_data_image_url]" aria-label="'. esc_html__('Upload your publisher logo', 'siteseo-pro').'" placeholder="'. esc_html__('Select your logo', 'siteseo-pro') .'" />	
						<input id="siteseopro_structured_data_upload_img" class="btn btnSecondary" type="button" value="'. esc_html__('Upload an Image', 'siteseo-pro') .'" />
					</td>
				</tr>

				<tr><th scope="row" style="user-select:auto"></th>
					<td>
						<p><img style="width:auto;height:auto;max-width:560px;margin-top:15px;display:inline-block;" src="'.esc_url($option_logo_url) .'" /></p>
					</td>
				</tr>
				
				<tr><th scope="row" style="user-select: auto"></th>
					<td>
						<div class="siteseo-notice-pro">
							<h3> '. esc_html__('Make sure your image follow these Google guidelines', 'siteseo-pro').' </h3>
							<ul>
								<li> '. esc_html__('A logo that is representative of the organization.', 'siteseo-pro').' </li>
								<li> '. esc_html__('Files must be BMP, GIF, JPEG, PNG, WebP or SVG.', 'siteseo-pro') .' </li>
								<li> '. esc_html__('The image must be 112x112px, at minimum.', 'siteseo-pro') .' </li>
								<li> '. esc_html__('The image URL must be crawlable and indexable.', 'siteseo-pro') .' </li>
								<li> '. esc_html__('Make sure the image looks how you intend it to look on a purely white background (for example, if the logo is mostly white or gray, it may not look how you want it to look when displayed on a white background).', 'siteseo-pro') .' </li>
							</ul>
							<p>
								<span class="siteseo-help dashicons dashicons-external"></span>
								<a class="siteseo-help" href="https://developers.google.com/search/docs/appearance/structured-data/logo#structured-data-type-definitions" target="_blank"> '. esc_html__('Learn more', 'siteseo-pro') .' </a>
							</p>
						</div>
					</td>
				</tr>
				
				<tr>
					<th scope="row" style="user-select:auto;">'.esc_html__('Organization Legal Name', 'siteseo-pro').'</th>
					<td>
						<input type="text" name="siteseo_pro_options[org_legal]" placeholder="'.esc_attr__('Enter Organizations legal name', 'siteseo-pro').'" value="'.esc_attr($option_legal_name).'">
						<p class="description">' . esc_html__('The official registered name of your organization.', 'siteseo-pro') . '</p>
					</td>
				</tr>

				<tr>
					<th scope="row" style="user-select: auto;">'.esc_html__('Organization Description', 'siteseo-pro').'</th>
					<td>
						<input type="text" name="siteseo_pro_options[org_desciption]" placeholder="'.esc_attr__('Enter Organizations description', 'siteseo-pro').'" value="'.esc_attr($option_desciption).'">
						<p class="description">' . esc_html__('A brief description of your organization.', 'siteseo-pro') . '</p>
					</td>
				</tr>

				<tr>
					<th scope="row" style="user-select:auto;">'.esc_html__('Organization Email Address', 'siteseo-pro').' </th>
					<td>
						<input type="text" name="siteseo_pro_options[org_email]" placeholder="'.esc_attr__('Enter Organizations email Id', 'siteseo-pro').'" value="'.esc_attr($option_email_id).'">
						<p class="description">' . esc_html__('The primary email address for your organization.', 'siteseo-pro') . '</p>
					</td>
				</tr>

				<tr>
					<th scope="row" style="user-select:auto;">'.esc_html__('Organization Phone Number', 'siteseo-pro').'</th>
					<td>
						<input type="text" name="siteseo_pro_options[org_phone_no]" placeholder="'.esc_attr__('Enter Organizations contact number', 'siteseo-pro').'" value="'.esc_attr($option_phone).'">
						<p class="description">' . esc_html__('The main contact number for your organization.', 'siteseo-pro') . '</p>
					</td>
				</tr>

				<tr>
					<th scope="row" style="user-select:auto;">'.esc_html__('Organization Establish Date', 'siteseo-pro').'</th>
					<td>
						<input type="date" id="org_establish_date" style="width: 560px; height: 40px;"  name="siteseo_pro_options[establish_date]" placeholder="Select Organization establish date" value="'.esc_attr($option_establish_date).'">
						<p class="description">' . esc_html__('The date when your organization was established.', 'siteseo-pro') . '</p>
					</td>
				</tr>

				<tr>
					<th scope="row" style="user-select:auto;">Number Of Employees</th>
					<td>
						<input type="text" name="siteseo_pro_options[number_emp]" placeholder="Enter Organizations legal name" value="'.esc_attr($option_number_emp).'">
						<p class="description">' . esc_html__('The total number of employees in your organization.', 'siteseo-pro') . '</p>
					</td>
				</tr>

				<tr>
					<th scope="row" style="user-select:auto;"><h2>Organization Identifiers</h2><br/></th>
					<td>
						<p class="description">' . esc_html__('We would like to know more about your organization’s identifiers. This information will assist Google in providing accurate and relevant details about your organization.', 'siteseo-pro') . '</p>
					</td>
				</tr>

				<tr>
					<th scope="row" style="user-select:auto;">VAT ID</th>
					<td>
						<input type="text" name="siteseo_pro_options[vat_id]" placeholder="Enter Organization VAT ID" value="'.esc_attr($option_vat_id).'">
						<p class="description">' . esc_html__('The VAT identification number for your organization.', 'siteseo-pro') . '</p>
					</td>
				</tr>

				<tr>
					<th scope="row" style="user-select:auto;">Tax ID</th>
					<td>
						<input type="text" name="siteseo_pro_options[tax_id]" placeholder="Enter Organization Tax ID" value="'.esc_attr($option_tax_id).'">
						<p class="description">' . esc_html__('The tax identification number for your organization.', 'siteseo-pro') . '</p>
					</td>
				</tr>

				<tr>
					<th scope="row" style="user-select:auto;">ISO 6523</th>
					<td>
						<input type="text" name="siteseo_pro_options[iso_code]" placeholder="Enter Organization ISO 6523" value="'.esc_attr($option_iso_id).'">
						<p class="description">' . esc_html__('The ISO 6523	identification number for your organization.', 'siteseo-pro') . '</p>
					</td>
				</tr>

				<tr>
					<th scope="row" style="user-select:auto;">LEI Code</th>
					<td>
						<input type="text" name="siteseo_pro_options[let_code]" placeholder="'.esc_html__('Enter Organization LEI Code', 'siteseo-pro').'" value="'.esc_attr($option_let_code).'">
						<p class="description">' . esc_html__('The LET identification number for your organization.', 'siteseo-pro') . '</p>
					</td>
				</tr>

				<tr>
					<th scope="row" style="user-select:auto;">DUNS</th>
					<td>
						<input type="text" name="siteseo_pro_options[duns_number]" placeholder="'.esc_html__('Enter Organization DUNS code', 'siteseo-pro').'" value="'.esc_attr($option_duns_number).'">
						<p class="description">' . esc_html__('The DUNS identification number for your organization.', 'siteseo-pro') . '</p>
					</td>
				</tr>

				<tr>
					<th scope="row" style="user-select:auto;">NAICS</th>
					<td>
						<input type="text" name="siteseo_pro_options[naics_code]" placeholder="'.esc_html__('Enter Organization NAICS', 'siteseo-pro').'" value="'.esc_attr($option_naics_code).'">
						<p class="description">' . esc_html__('The NAICS identification number for your organization.', 'siteseo-pro') . '</p>
					</td>
				</tr>
			</tbody>
		</table>
		<input type="hidden" name="structured_data_settings" value="1"/>';
	}


	static function breadcrumbs(){
		global $siteseo;
	
		if(!empty($_POST['submit'])){
			self::save_settings();
		}
		
		$options = $siteseo->pro;
		$advanced_option = get_option('siteseo_advanced_option_name');
		$options = isset($options['breadcrumbs_enable']) ? $options : $advanced_option;
		
		$enabled = !empty($options['breadcrumbs_enable']) ? $options['breadcrumbs_enable'] : '';
		$separators = ['-', '|', '/', '←', '→', '↠', '⇒', '►', '—', '•', '»', '›', '–'];
		$separator = !empty($options['breadcrumbs_seperator']) ? $options['breadcrumbs_seperator'] : '';
		$custom_separator = !empty($options['breadcrumbs_custom_seperator']) ? $options['breadcrumbs_custom_seperator'] : '';
		$hide_home = isset($options['breadcrumbs_home']) ? $options['breadcrumbs_home'] : false;
		$home_label = !empty($options['breadcrumb_home_label']) ? $options['breadcrumb_home_label'] : __('Home', 'siteseo-pro');
		$prefix = !empty($options['breadcrumb_prefix']) ? $options['breadcrumb_prefix'] : '';

		
		echo'<h3 class="siteseo-tabs">' . esc_html__('Breadcrumbs', 'siteseo-pro') . '</h3>
		<p>'.esc_html__('Breadcrumbs work as a navigation tool for users, helping them know their current location and providing quick links to their previous browsing path, which improves the user experience.', 'siteseo-pro').'</p>

		<table class="form-table">
			<tr>
				<th scope="row">'.esc_html__('Enable Breadcrumbs', 'siteseo-pro').'</th>
				<td>
					<label>
						<input type="checkbox" value="1" id="siteseo_breadcrumbs_enable" name="siteseo_pro_options[breadcrumbs_enable]" ' . checked($enabled, true, false) . '/>
					</label>
				</td>
			</tr>
			<tr>
				<th scope="row">'.esc_html__('Breadcrumbs Display Methods', 'siteseo-pro').'</th>
				<td>
					<div class="siteseo-inner-tabs-wrap">
						<input type="radio" id="siteseo-breadcrumbs-gutenberg" name="siteseo-inner-tabs" checked>
						<input type="radio" id="siteseo-breadcrumbs-shortcode" name="siteseo-inner-tabs">
						<input type="radio" id="siteseo-breadcrumbs-php" name="siteseo-inner-tabs">
						
						<ul class="siteseo-inner-tabs">
							<li class="siteseo-inner-tab"><label for="siteseo-breadcrumbs-gutenberg"><span class="dashicons dashicons-block-default"></span>'.esc_html__('Gutenberg Blocks', 'siteseo-pro').'</label></li>
							<li class="siteseo-inner-tab"><label for="siteseo-breadcrumbs-shortcode"><span class="dashicons dashicons-shortcode"></span>'.esc_html__('Shortcode', 'siteseo-pro').'</label></li>
							<li class="siteseo-inner-tab"><label for="siteseo-breadcrumbs-php"><span class="dashicons dashicons-editor-code"></span>'.esc_html__('PHP Code', 'siteseo-pro').'</label></li>
						</ul>
						
						<div class="siteseo-inner-tab-content">
							<h4>'.esc_html__('Gutenberg Block', 'siteseo-pro').'</h4>
							<p>'.esc_html__('Generate Block can be accessed by going to edit post using the Gutenberg Editor, the default editor of WordPress. There search for Breadcrumbs block.', 'siteseo-pro').'</p>
						</div>
						
						<div class="siteseo-inner-tab-content">
							<h4>'.esc_html__('Shortcode', 'siteseo-pro').'</h4>
							<p>'.esc_html__('WordPress shortcodes are shortcuts ([shortcode]) that insert features without coding. You can use these shortcodes with Classic Editor, Gutenberg, or any other editor. Copy the shortcode below and use it in the editor.', 'siteseo-pro').'</p>
							<pre>'.esc_attr('[siteseo_breadcrumbs]','siteseo-pro').'</pre>
						</div>
						
						<div class="siteseo-inner-tab-content">
							<h4>'.esc_html__('PHP Code', 'siteseo-pro').'</h4>
							<p>'.esc_html__('You can add the breadcrumbs by directly adding PHP code. Make sure you are aware of what you are doing. Use the code below anywhere in your theme.', 'siteseo-pro').'</p>
							<pre>'.esc_html("<?php if(function_exists('siteseo_render_breadcrumbs')){ echo siteseo_render_breadcrumbs(); } ?>").'</pre>
						</div>
					</div>
				</td>
			</tr>
			<tr>
				<th scope="row">'.esc_html__('Separator', 'siteseo-pro').'</th>
				<td>
					<div class="siteseo_breadcrumbs_seperator_callback">
					   <div class="siteseo-seperator-btns">';
		foreach($separators as $sep){
			$checked = ($separator == $sep) ? 'checked' : '';
			echo '<label>
				<input type="radio" name="siteseo_pro_options[breadcrumbs_seperator]" value="' . esc_attr($sep) . '" '.esc_attr($checked).'/>
				'.esc_html($sep).'</label>';
		}
		echo '</div>
						<input type="text" style="width:200px" name="siteseo_pro_options[breadcrumbs_custom_seperator]" placeholder="'.esc_html__('Custom Separator', 'siteseo-pro').'" value="'.esc_attr($custom_separator).'"/>
					</div>
					</div>
				</td>
			</tr>
			<tr>
				<th scope="row">'.esc_html__('Home Settings', 'siteseo-pro').'</th>
				<td>
					<div>
						<label style="margin:10px 0;">
							<input type="checkbox" name="siteseo_pro_options[breadcrumbs_home]" ' . checked($hide_home, true, false).'/>
							'.esc_html__('Hide Home', 'siteseo-pro') . '
						</label>
						<br/><br/>
						<label>
							<input type="text" name="siteseo_pro_options[breadcrumb_home_label]" placeholder="'.esc_attr__('Homepage label', 'siteseo-pro').'" value="'.esc_attr($home_label).'"/>
							<p class="description">'.esc_html__('Home label', 'siteseo-pro').'</p>
						</label>
					</div>
				</td>
			</tr>
			<tr>
				<th scope="row">'.esc_html__('Prefix', 'siteseo-pro').'</th>
				<td>
					<div>
						<label>
							<input type="text" id="siteseo_breadcrumbs_prefix" name="siteseo_pro_options[breadcrumb_prefix]" placeholder="'.esc_attr__('Breadcrumb Prefix', 'siteseo-pro'). '" value="'.esc_attr($prefix).'"/>
						</label>
					</div>
				</td>
			</tr>
		</table><input type="hidden" name="breadcrumbs_tab" value="1"/>';

	}
	
	static function robots(){

		echo '<h3 class="siteseo-tabs">'.esc_html__('robots.txt','siteseo-pro').'</h3><p>'. esc_html__('Manage your robots.txt file here. Adjust settings according to your SEO requirements.', 'siteseo-pro') . '</p>';
		echo '<table class="form-table">';

		if(!file_exists(ABSPATH . 'robots.txt')){
			echo '<tr><td colspan="2"><button class="btn btnSecondary" id="siteseo-create-robots">'.esc_html__('Create robots.txt', 'siteseo-pro').'</button><span class="spinner"></span></td></tr>';
		}else{
			echo '<tr><th class="row">'.esc_html__('Preview', 'siteseo-pro').'</th><td colspan="2"><a href="'.esc_url(get_home_url()).'/robots.txt" class="btn btnSecondary" style="text-decoration:none;" target="_blank">'.esc_html__('View Robots.txt', 'siteseo-pro').'</a></td></tr>';
		}

		if(!file_exists(ABSPATH . 'robots.txt')){
			echo '</table>';
			return;
		}

		$robots_txt = file_exists(ABSPATH . 'robots.txt') ? file_get_contents(ABSPATH . 'robots.txt') : '';

			echo '<tr>
				<th class="row">'.esc_html__('robots.txt File', 'siteseo-pro').'</th>
					<td colspan="2">
						<textarea id="siteseo_robots_file_content" placeholder="'.esc_attr__('Enter your robots.txt rules here', 'siteseo-pro').'" rows="15" cols="50">'.esc_textarea($robots_txt).'</textarea>
					</td>
				</tr>
			<tr>
			<th></th>
				<td colspan="2">
					<button  class="btn btnSecondary" id="siteseo-update-robots">'.esc_html__('Update robots.txt', 'siteseo-pro').'</button>
					<span class="spinner"></span>
				</td>
		</tr>	
		</table>';
	}
	
	static function htaccess(){
		global $siteseo;

		$home_path = get_home_path();
		$htaccess_file = $home_path . '.htaccess';

		if(!empty($_POST['submit'])){
			self::save_settings();
		}

		echo '<h3 class="siteseo-tabs">'.esc_html__('htaccess','siteseo-pro').'</h3>
		<p class="description">'.esc_html__('Edit your .htaccess file to configure advanced settings for your site','siteseo-pro').'</p>';


		if(!file_exists($htaccess_file) || !is_writable($htaccess_file)){
			echo '<table class="siteseo-notice-table">
					<tr>
						<td class="siteseo-notice is-error"><p>'.esc_html__('The .htaccess file does not exist or You do not have permission to edit the .htaccess file', 'siteseo-pro').'</p>
						</td>
					</tr>
				</table>';
			return;
		}

		echo '<table class="siteseo-notice-table" style="width: 82%;padding-left:42%">
				<tr>
					<th class="row"></th>
						<td colspan="2" class="siteseo-notice is-error">
							<p>'.esc_html__('Be careful editing this file. If any incorrect edits are made, your site could go down. You can restore the htaccess file by replacing it with the backup copy created by SiteSEO with name .htaccess_backup.siteseo', 'siteseo-pro').'
							<br/><input type="checkbox" value="1" id="siteseo_htaccess_enable"/><strong>'.esc_html__('I understand the risk and I want to edit this file','siteseo-pro').'</strong>
							</p>
							
						</td>
				</tr>
			</table>';

		$htaccess_code = file_get_contents($htaccess_file);

		echo '<table class="form-table" style="width: 100%;">
			<tr>
				<th class="row">'.esc_html__('Edit your htaccess file','siteseo-pro').'</th>
				<td>
					<textarea id="siteseo_htaccess_file" name="siteseo_advanced_option_names[htaccess_code]" rows="22" style="width: 100%;">'.esc_textarea($htaccess_code).'</textarea>
				</td>
			</tr>
			<tr>
				<th class="row">
					<td style="padding-top: 10px;">
						<div style="display: flex; align-items: center;">
							<button id="siteseo_htaccess_btn" class="btn btnSecondary">'.esc_html__('Update htaccess.txt', 'siteseo-pro').'</button>
							<span class="spinner" style="margin-left: 10px;"></span>
						</div>
					</td>
				</th>
			</tr>
		</table>';
	}
	
	static function redirect_monitoring(){
		global $siteseo;
		
		if(!empty($_POST['submit'])){
			self::save_settings();
		}
		
		$options = $siteseo->pro;
		
		$enable_404 = isset($options['enable_404_log']) ? $options['enable_404_log'] : '';
		$clean_logs = isset($options['clean_404_logs']) ? $options['clean_404_logs'] : '';
		$set_log_limit = isset($options['log_limits']) ? $options['log_limits'] : '100';
		$redirect_type = isset($options['redirect_type']) ? $options['redirect_type'] : '';
		$custom_redirect_url = isset($options['custom_redirect_url']) ? $options['custom_redirect_url'] : '';
		$disable_guess_redirect = isset($options['guess_redirect']) ? $options['guess_redirect'] : '';
		$enable_email_notify = isset($options['email_notify']) ? $options['email_notify'] : '';
		$email_id = isset($options['send_email_to']) ? $options['send_email_to'] : '';
		$disable_ip_logging = isset($options['disable_ip_logging']) ? $options['disable_ip_logging'] : '';
		$redirect_code = isset($options['status_code']) ? $options['status_code'] : '';
		$toggle_state_redirect = !empty($options['toggle_state_redirect_monitoring']) ? $options['toggle_state_redirect_monitoring'] : '';
		$nonce = wp_create_nonce('siteseo_pro_toggle_nonce');
		
		$default_email_id =  get_option('admin_email');
		
		if(!empty($toggle_state_redirect) && !empty($enable_404)){
			$logs_data = Util::get_logs();
		}
		
		echo'<h3 class="siteseo-tabs">'.esc_html__('Redirections / 404 monitoring', 'siteseo-pro').'</h3>
		<p>'.esc_html__('Optimize Your Site with Smart Redirects & 404 Monitoring', 'siteseo-pro').'</p>';
		
		Util::render_toggle('404_monitoring', $toggle_state_redirect, $nonce);
		
		echo'<table class="form-table">
			<tbody>
				<tr>'.
					'<th scope="row" style="user-select: auto;">'.esc_html__('404 Log', 'siteseo-pro').'</th>'.
					'<td><label>'.
						'<input name="siteseo_pro_options[404_log]" type="checkbox" ' .(!empty($enable_404) ? 'checked="yes"' : '') . ' value="1"/>'.esc_html__('Enable 404 monitoring', 'siteseo-pro') .
						'</label>
					</td>
				</tr>
				
				<tr>
					<th scope="row">'.esc_html__('404 Cleaning', 'siteseo-pro').'</th>
					<td><label>
						<input name="siteseo_pro_options[clean_404_logs]" type="checkbox" '.(!empty($clean_logs) ? 'checked="yes"' : '').' value="1"/>'.
							esc_html__('Automatically delete 404 after 30 days (useful if you have a lot of 404)','siteseo-pro')
						.'</label>
					</td>
				</tr>
				
				<tr>
					<th scope="row">'.esc_html__('Log Limits').'</th>
					<td><label>
						<input type="number" name="siteseo_pro_options[log_limits]" value="'.esc_attr($set_log_limit).'"/>
					</label>
					</td>
				<tr>
					<th scope="row">'.esc_html__('Redirect 404 to','siteseo-pro').'</th>
					<td>
						<select name="siteseo_pro_options[redirect_to]">
							<option value="homepage" '.selected($redirect_type, 'Homepage', false).'>'.esc_html__('Homepage','siteseo-pro').'</option>
							<option value="CustomURL" '.selected($redirect_type, 'CustomURL', false).'>'.esc_html__('Custom URL','siteseo-pro').'</option>
						</select>
					</td>
				</tr>
				
				<tr>
					<th scope="row">'.esc_html__('Redirect to specific URL	','siteseo-pro').'</th>
					<td><label>
							<input name="siteseo_pro_options[redirect_url]" type="text" value="'.esc_attr($custom_redirect_url).'" placeholder="Enter your custom URL"/>
						</label>
					</td>
				</tr>
				
				<tr>
					<th scope="row">'.esc_html__('Status code of redirection','siteseo-pro').'</th>
					<td><label>
							<select name="siteseo_pro_options[status_code]">
								<option value="301redirect" '.selected($redirect_code, '301redirect', false).'>'.esc_html__('301 redirect','siteseo-pro').'</option>
								<option value="302redirect" '.selected($redirect_code, '302redirect', false).'>'.esc_html__('302 redirect','siteseo-pro').'</option>
								<option value="307redirect" '.selected($redirect_code, '307redirect', false).'>'.esc_html__('307 redirect','siteseo-pro').'</option>
							</select>
						</label>
					</td>
				</tr>
				
				<tr>
					<th scope="row">'.esc_html__('Enable email notification', 'siteseo-pro').'</th>
					<td>
					<input name="siteseo_pro_options[email_notify]" type="checkbox" ' .(!empty($enable_email_notify) ? 'checked="yes"' : '').' value="1"/>'.esc_html__('1 email per week with the top 404 errors, and the latest logged (within a limit of 10)', 'siteseo-pro') .
						'</label>
					</td>
				</tr>
				
				<tr>
					<th scope="row">'.esc_html__('Send email to', 'siteseo-pro').'</th>
					<td>
						<input name="siteseo_pro_options[email_id]" type="text" value="'.esc_attr($email_id).'" placeholder="Enter your email"/>
						<p>'.esc_html__('If you put empty it send default admin email', 'siteseo-pro').'</p>
					</td>
				</tr>
				
				<tr>
					<th scope="row">'.esc_html__('Disable guess redirect url for 404','siteseo-pro').'</th>
					<td>
						<input name="siteseo_pro_options[eanble_guess_redirect]" type="checkbox" '.(!empty($disable_guess_redirect) ? 'checked="yes"' : '').' value="1"/>'. esc_html__('Stop WordPress to attempt to guess a redirect URL for a 404 request', 'siteseo-pro') .'
					</td>
				</tr>
				
				<tr>
					<th scope="row">'.esc_html__('Disable ip logging','siteseo-pro').'</th>
					<td>
						<select name="siteseo_pro_options[disable_ip_logging]">
							<option value="no_ip_logging" '.selected($disable_ip_logging, 'no_ip_logging', false).'>'.esc_html__('No IP logging', 'siteseo-pro').'</option>
							<option value="full_ip_logging" '.selected($disable_ip_logging, 'full_ip_logging', false).'>'.esc_html__('Full IP logging', 'siteseo-pro').'</option>
							<option value="anonymize_the_last_part" '.selected($disable_ip_logging, 'anonymize_the_last_part', false).'>'.esc_html__('Anonymize the last part', 'siteseo-pro').'</option>
					</td>
				
				</tr>';
				
					if(!empty($enable_404)){
				
						echo'<tr>
						<th scope="row">'.esc_html__('Redirections logs', 'siteseo-pro').'</th>
						<table class="wp-list-table widefat fixed striped">
							<thead>
								<tr>
									<th style="width: 30px; text-align: center;"><input type="checkbox" id="select-all-logs"></th>
									<th>'.esc_html__('URL', 'siteseo-pro').'</th>
									<th>'.esc_html__('IP Address', 'siteseo-pro').'</th>
									<th>'.esc_html__('Time', 'siteseo-pro').'</th>
									<th>'.esc_html__('User Agent', 'siteseo-pro').'</th>
									<th>'.esc_html__('Referer', 'siteseo-pro').'</th>
									<th>'.esc_html__('Hit count', 'siteseo-pro').'</th>
								</tr>
							</thead>
							
							<tbody>';
								if(!empty($logs_data['items'])){
									foreach($logs_data['items'] as $log){
										 echo'<tr>
											<td><input type="checkbox" class="log-selector" value="'.esc_attr($log->id).'"></td>
											<td>'.esc_html($log->url).'</td>
											<td>'.esc_html($log->ip_address).'</td>
											<td>'.esc_html($log->timestamp).'</td>
											<td>'.esc_html($log->user_agent).'</td>
											<td>'.esc_html($log->referer).'</td>
											<td>'.esc_html($log->hit_count).'</td>
										</tr>';
									}
								}
							echo'</tbody>
						</table>
				</tr></br/>
					<th sope="row">
						<button type="button" id="siteseo-remove-selected-log" class="siteseo-request-page-speed btn btnPrimary">'.
						esc_html__('Remove From Logs', 'siteseo-pro').'</button>
						<button type="button" id="siteseo_redirect_all_logs"  class="siteseo-request-page-speed btn btnPrimary">'.
						esc_html__('Clear All Logs', 'siteseo-pro').'</button>
						<button type="button" id="siteseo-export-csv" class="btn btnTertiary">'.esc_html__('Export CSV', 'siteseo-pro').'</button>
						
					</th>';
					}
			echo'</tbody>
		</table>
		<br/><br/><input type="hidden" name="404_monitoring" value="1"/>';		
	}
	
	static function google_news(){
		global $siteseo;
		
		if(!empty($_POST['submit'])){
			self::save_settings();
		}
		
		$settings = $siteseo->pro;
		$toggle_state_google_news = !empty($settings['toggle_state_google_news']) ? $settings['toggle_state_google_news'] : '';
		$nonce = wp_create_nonce('siteseo_pro_toggle_nonce');
		$enable_google_news = isset($settings['google_news']) ? $settings['google_news'] : '';
		$publication_name = isset($settings['publication_name']) ? $settings['publication_name'] : '';
		
		echo'<h3 class="siteseo-tabs">'.esc_html__('Google News','siteseo-pro').'</h3>
		<p>'.esc_html__('Enable your google News Sitemap','siteseo-pro').'</p>';
		
		util::render_toggle('google_news', $toggle_state_google_news, $nonce);
		
		echo'<div class="siteseo-styles pre"><pre><span class="dashicons dashicons-external"></span><a href="'.esc_url(get_option('home')).'/news.xml" target="_blank">' . esc_url(get_option('home')) . '/news.xml</a></pre></div>
		
		<table class="form-table">
			<div class="siteseo-notice">
				<span id="siteseo-dash-icon" class="dashicons dashicons-info"></span>
                <p>'.wp_kses_post('If you have not enabled sitemap settings, this feature will not be useful. <a href="?page=siteseo-sitemaps">Click here</a> to configure the settings.', 'siteseo-pro').'</p>
			</div>
				<tbody>
					<tr>
						<th scope="row">'.esc_html__('Enable google news', 'siteseo-pro').'</th>
						<td>
							<label>
							<input type="checkbox" name="siteseo_pro_options[google_news]" '.(!empty($enable_google_news) ? 'checked="yes"' : '') . ' value="1"/>'.esc_html__('Enable Google News sitemap', 'siteseo-pro') .
							'</label>
						</td>
					</tr>
					
					<tr>
						<th scope="row">'.esc_html__('Enter publication name', 'siteseo-pro').'</th>
						<td>
							<input type="text" placeholder="Enter your google news publication name" name="siteseo_pro_options[publication_name]" value="'.esc_attr($publication_name).'" />
						</td>
					</tr>
					
					<tr>
						<th scope="row">'.esc_html__('Select post types','siteseo-pro').'</th>
						<td>';
							$post_types = siteseo_post_types();
							$selected_types = isset($settings['post_types']) && is_array($settings['post_types']) ? $settings['post_types'] : [];
							foreach($post_types as $post){
								$post_name = $post->name;
								$post_label = $post->label;
								$is_checked = in_array($post->name, $selected_types) ? 'checked' : '';
									
								echo'<input type="checkbox" id="post_type_'.esc_attr($post_name).'" name="siteseo_pro_options[post_types][]" value="'.esc_attr($post_name).'" ' . esc_attr($is_checked).'/>';
								echo'<label for="post_type_'.esc_attr($post_name).'">'.esc_html($post_label).'</label><br /><br />';
							}
						echo'</td>
					</tr>
				</tbody>
			</table><input type="hidden" name="google_news_tab" value="1"/>';
	}
	
	// save settings fun
	static function save_settings(){
		global $siteseo;
		
		check_admin_referer('sitseo_pro_settings');

		if(!current_user_can('manage_options') || !is_admin()){
			return;
		}

		$options = $siteseo->pro;

		if(empty($_POST['siteseo_pro_options'])){
			return;
		}

		// WooCommerce tab
		if(isset($_POST['woocommerce_settings'])){
			
			$options['woocommerce_cart_page_no_index'] = isset($_POST['siteseo_pro_options']['woocommerce_cart_page_no_index']);
			$options['woocommerce_checkout_page_no_index'] = isset($_POST['siteseo_pro_options']['woocommerce_checkout_page_no_index']);
			$options['woocommerce_customer_account_page_no_index'] = isset($_POST['siteseo_pro_options']['woocommerce_customer_account_page_no_index']);
			$options['woocommerce_product_og_price'] = isset($_POST['siteseo_pro_options']['woocommerce_product_og_price']);
			$options['woocommerce_product_og_currency'] = isset($_POST['siteseo_pro_options']['woocommerce_product_og_currency']);
			$options['woocommerce_meta_generator'] = isset($_POST['siteseo_pro_options']['woocommerce_meta_generator']);
			$options['woocommerce_schema_output'] = isset($_POST['siteseo_pro_options']['woocommerce_schema_output']);
			$options['woocommerce_schema_breadcrumbs_output'] = isset($_POST['siteseo_pro_options']['woocommerce_schema_breadcrumbs_output']);
		}

		// Dublin Core settings
		if(isset($_POST['dublin_code_settings'])){
			
			$options['dublin_core_enable'] = isset($_POST['siteseo_pro_options']['dublin_core_enable']);
		}

		// Easy Digital Downloads
		if(isset($_POST['digital_download_settings'])){

			$options['edd_product_og_price'] = isset($_POST['siteseo_pro_options']['edd_product_og_price']);

			$options['edd_product_og_currency'] = isset($_POST['siteseo_pro_options']['edd_product_og_currency']);

			$options['edd_meta_generator'] = isset($_POST['siteseo_pro_options']['edd_meta_generator']);
		}

		// PageSpeed Settings
		if(isset($_POST['pagespeed_settings'])){
			$options['ps_api_key'] = !empty($_POST['siteseo_pro_options']['ps_api_key']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['ps_api_key'])) : '';
		}
		
		//local Business settings
		if(isset($_POST['local_business_settings'])){

			$options['local_business_display_schema'] = !empty($_POST['siteseo_pro_options']['local_business_display_schema']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']
				['local_business_display_schema'])) : '';

			$options['street_address'] = !empty($_POST['siteseo_pro_options']['street_address']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['street_address'])) : '';

			$options['city'] = !empty($_POST['siteseo_pro_options']['city']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['city'])) : '';

			$options['state'] = !empty($_POST['siteseo_pro_options']['state']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['state'])) : '';

			$options['postal_code'] = !empty($_POST['siteseo_pro_options']['postal_code']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['postal_code'])) : '';

			$options['country'] = !empty($_POST['siteseo_pro_options']['country']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['country'])) : '';

			$options['latitude'] = !empty($_POST['siteseo_pro_options']['latitude']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['latitude'])) : '';

			$options['longitude'] = !empty($_POST['siteseo_pro_options']['longitude']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['longitude'])) : '';

			$options['place_id'] = !empty($_POST['siteseo_pro_options']['place_id']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['place_id'])) : '';

			$options['url'] = !empty($_POST['siteseo_pro_options']['url']) ? sanitize_url(wp_unslash($_POST['siteseo_pro_options']['url'])) : '';

			$options['telephone'] = !empty($_POST['siteseo_pro_options']['telephone']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['telephone'])) : '';

			$options['price_range'] = !empty($_POST['siteseo_pro_options']['price_range']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['price_range'])) : '';

			$options['cuisine_served'] = !empty($_POST['siteseo_pro_options']['cuisine_served']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['cuisine_served'])) : '';

			$options['accepts_reser'] = !empty($_POST['siteseo_pro_options']['accepts_reser']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['accepts_reser'])) : '';
			
			// business type
			if(!empty($_POST['siteseo_pro_options']['business_type'])){
				$options['business_type'] = sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['business_type']));
			}

			// opening hours
			if(!empty($_POST['siteseo_pro_options']['opening_hours'])){
				$opening_hours = [];
				foreach($_POST['siteseo_pro_options']['opening_hours'] as $day => $hours){
					$opening_hours[$day] = [
						'closed' => !empty($hours['closed']),
						'open_morning' => !empty($hours['open_morning']),
						'open_morning_start_hour' => sanitize_text_field($hours['open_morning_start_hour']),
						'open_morning_start_min' => sanitize_text_field($hours['open_morning_start_min']),
						'open_morning_end_hour' => sanitize_text_field($hours['open_morning_end_hour']),
						'open_morning_end_min' => sanitize_text_field($hours['open_morning_end_min']),
						'open_afternoon' => !empty($hours['open_afternoon']) ? true : false,
						'open_afternoon_start_hour' => sanitize_text_field($hours['open_afternoon_start_hour']),
						'open_afternoon_start_min' => sanitize_text_field($hours['open_afternoon_start_min']),
						'open_afternoon_end_hour' => sanitize_text_field($hours['open_afternoon_end_hour']),
						'open_afternoon_end_min' => sanitize_text_field($hours['open_afternoon_end_min'])
					];
				}
				$options['opening_hours'] = $opening_hours;
			}
		}

		// Strutured data settings
		if(isset($_POST['structured_data_settings'])){
			
			$options['enable_structured_data'] = !empty($_POST['siteseo_pro_options']['enable_structured_data']);

			$options['structured_data_image_url'] = !empty($_POST['siteseo_pro_options']['structured_data_image_url']) ? sanitize_url(wp_unslash($_POST['siteseo_pro_options']['structured_data_image_url'])) : '';

			$options['org_desciption'] = !empty($_POST['siteseo_pro_options']['org_desciption']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['org_desciption'])) : '';

			$options['org_email'] = !empty($_POST['siteseo_pro_options']['org_email']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['org_email'])) : '';

			$options['org_phone_no'] = !empty($_POST['siteseo_pro_options']['org_phone_no']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['org_phone_no'])) : '';

			$options['org_legal'] = !empty($_POST['siteseo_pro_options']['org_legal']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['org_legal'])) : '';

			$options['establish_date'] = !empty($_POST['siteseo_pro_options']['establish_date']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['establish_date'])) : '';
		
			$options['number_emp'] = !empty($_POST['siteseo_pro_options']['number_emp']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['number_emp'])) : '';
			
			$options['vat_id'] = !empty($_POST['siteseo_pro_options']['vat_id']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['vat_id'])) : '';

			$options['tax_id'] = !empty($_POST['siteseo_pro_options']['tax_id']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['tax_id'])) : '';

			$options['iso_code'] = !empty($_POST['siteseo_pro_options']['iso_code']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['iso_code'])) : '';

			$options['let_code'] = !empty($_POST['siteseo_pro_options']['let_code']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['let_code'])) : '';

			$options['duns_number'] = !empty($_POST['siteseo_pro_options']['duns_number']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['duns_number'])) : '';

			$options['naics_code'] = !empty($_POST['siteseo_pro_options']['naics_code']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['naics_code'])) : '';
		}
		
		if(isset($_POST['breadcrumbs_tab'])){
			$options['breadcrumbs_enable'] = isset($_POST['siteseo_pro_options']['breadcrumbs_enable']);
			$options['breadcrumbs_seperator'] = isset($_POST['siteseo_pro_options']['breadcrumbs_seperator']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['breadcrumbs_seperator'])) : '';
			$options['breadcrumbs_custom_seperator'] = isset($_POST['siteseo_pro_options']['breadcrumbs_custom_seperator']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['breadcrumbs_custom_seperator'])) : '';
			$options['breadcrumbs_home'] = isset($_POST['siteseo_pro_options']['breadcrumbs_home']);
			$options['breadcrumb_home_label'] = isset($_POST['siteseo_pro_options']['breadcrumb_home_label']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['breadcrumb_home_label'])) : '';
			$options['breadcrumb_prefix'] = isset($_POST['siteseo_pro_options']['breadcrumb_prefix']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['breadcrumb_prefix'])) : '';
			
		}
		
		if(isset($_POST['404_monitoring'])){
			$options['enable_404_log'] = isset($_POST['siteseo_pro_options']['404_log']);
			$options['clean_404_logs'] = isset($_POST['siteseo_pro_options']['clean_404_logs']);
			$options['log_limits'] = isset($_POST['siteseo_pro_options']['log_limits']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['log_limits'])) : '';
			$options['email_notify'] = isset($_POST['siteseo_pro_options']['email_notify']);
			$options['send_email_to'] = isset($_POST['siteseo_pro_options']['email_id']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['email_id'])) : '';
			$options['guess_redirect'] = isset($_POST['siteseo_pro_options']['eanble_guess_redirect']);
			$options['custom_redirect_url'] = isset($_POST['siteseo_pro_options']['redirect_url']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['redirect_url'])) : '';
			$options['redirect_type'] = isset($_POST['siteseo_pro_options']['redirect_to']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['redirect_to'])) : '';
			$options['disable_ip_logging'] = isset($_POST['siteseo_pro_options']['disable_ip_logging']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['disable_ip_logging'])) : '';
			$options['status_code'] = isset($_POST['siteseo_pro_options']['status_code']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['status_code'])) : '';
			
			if(!empty($options['clean_404_logs'])){
				// Enabling cron for cleanup
				if(!wp_next_scheduled('siteseo_404_cleanup')){
					wp_schedule_event(time(), 'daily', 'siteseo_404_cleanup');
				}
			} else {
				wp_clear_scheduled_hook('siteseo_404_cleanup');
			}
		}

		if(isset($_POST['google_news_tab'])){
			$options['google_news'] = isset($_POST['siteseo_pro_options']['google_news']);
			$options['publication_name'] = isset($_POST['siteseo_pro_options']['publication_name']) ? sanitize_text_field(wp_unslash($_POST['siteseo_pro_options']['publication_name'])) : '';
			if(isset($_POST['siteseo_pro_options']['post_types'])){
				$options['post_types'] = map_deep(wp_unslash($_POST['siteseo_pro_options']['post_types']), 'sanitize_text_field');
			} else{
				$options['post_types'] = [];
			}
		}

		$siteseo->pro = $options; // Updates the global variable
		update_option('siteseo_pro_options', $options);
	}
}
main/settings/pagespeed.php000064400000021745151545124140012011 0ustar00<?php

namespace SiteSEOPro\Settings;

if(!defined('ABSPATH')){
	die('HACKING ATTEMPT');
}

class PageSpeed{

	static function analysis(){
		$active_tab = isset($_POST['tab']) ? 'desktop' : 'mobile';
		$page_speed = get_option('siteseo_pro_page_speed');

		echo '<div class="siteseo-flex siteseo-justify-center siteseo-metabox-subtabs" style="margin:10px 0">
				<input type="radio" name="ps_device_type" id="siteseo-ps-mobile-tab" value="mobile" checked/>
				<label for="siteseo-ps-mobile-tab" class="siteseo-ps-device-toggle">
					<span style="font-size:30px;display:flex;align-items:center; justify-content:center;"  class="dashicons dashicons-smartphone"></span>
					<span style="padding:10px;font-weight:500;font-size:1.05em;padding-left:1px;">Mobile</span>
				</label>
				
				<input type="radio" name="ps_device_type" id="siteseo-ps-desktop-tab" value="desktop"/>
				<label for="siteseo-ps-desktop-tab" class="siteseo-ps-device-toggle">
					<span style="font-size:30px;display:flex; align-items:center; justify-content:center;" class="dashicons dashicons-desktop"></span>
					<span style="padding:10px;font-weight:500;font-size:1.05em;padding-left:5px;">Desktop</span>
				</label>
		</div>';
		echo'<div id="siteseo-ps-mobile" class="siteseo-flex siteseo-direction-column tab-content">';

		if(!empty($page_speed['mobile'])){
			
			self::score_graph($page_speed, 'mobile');

			echo '<div style="margin-top:1%;" class="siteseo-metabox-subtabs">
				<div class="siteseo-metabox-tab-label siteseo-metabox-tab-label-active" data-tab="siteseopro_audits_tab">' . esc_html__('Audits', 'siteseo-pro') . '</div>
				<div class="siteseo-metabox-tab-label" data-tab="siteseopro_opportunities_tab">' . esc_html__('Opportunities', 'siteseo-pro') . '</div>
				<div class="siteseo-metabox-tab-label" data-tab="siteseopro_diagnostics_tab">' . esc_html__('Diagnostics', 'siteseo-pro') . '</div>
			</div>';
			
			self::audit_tabs($page_speed, 'mobile');
		}

	echo'</div>';
	echo'<div id="siteseo-ps-desktop" class="siteseo-direction-column tab-content">';

		if(!empty($page_speed['desktop'])){
			self::score_graph($page_speed, 'desktop');

			echo '<div style="margin-top:1%;" class="siteseo-metabox-subtabs">
				<div class="siteseo-metabox-tab-label siteseo-metabox-tab-label-active" data-tab="siteseopro_audits_tab">' . esc_html__('Audits', 'siteseo-pro') . '</div>
				<div class="siteseo-metabox-tab-label" data-tab="siteseopro_opportunities_tab">' . esc_html__('Opportunities', 'siteseo-pro') . '</div>
				<div class="siteseo-metabox-tab-label" data-tab="siteseopro_diagnostics_tab">' . esc_html__('Diagnostics', 'siteseo-pro') . '</div>
			</div>';
				
			self::audit_tabs($page_speed, 'desktop');
		}
		echo'</div>';

	}
	
	static function score_graph(&$page_speed, $device){
		// Score show for mobile
		$score = isset($page_speed[$device]['score']) ? $page_speed[$device]['score'] : null;
		$pagespeed_score = $score * 100;

		$pagespeed_color = self::set_status_color($pagespeed_score);
		
		echo '<div class="siteseopro-flex-wrapper">
			  <div class="siteseo-single-chart">
				<svg viewBox="0 0 36 36" class="siteseo-circular-chart orange">
					<path class="siteseo-circle-bg" d="M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"/>
					<path class="siteseo-circle" style="stroke:' . esc_attr($pagespeed_color) . '"
					stroke-dasharray="' . esc_attr($pagespeed_score) . ', 100" d="M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"/>
					<text x="18" y="20.35" class="siteseo-percentage">' . esc_html($pagespeed_score) . '%</text>
				</svg>
			</div>
		</div>';

		echo '<div class="siteseo-pro-details">
				<span style="color:#008000" class="dashicons dashicons-yes"></span>Good&nbsp&nbsp
				<span style="color:#ffA500" class="dashicons dashicons-warning"></span>Warning&nbsp&nbsp
				<span style="color:#ff0000" class="dashicons dashicons-no"></span>Errors
			  </div>';

		if(!empty($page_speed['mobile']['fetchTime'])){
			$fetch_time = $page_speed['mobile']['fetchTime'];
			$fetch_date = date_i18n(get_option('date_format'), strtotime($fetch_time));
			$fetch_time = date('H:i', strtotime($fetch_time));

			echo '<div class="siteseo-pro-fechtime"><span>' . esc_html__('Captured at ', 'siteseo-pro') . esc_html($fetch_date) . ', ' . esc_html($fetch_time) . ' UTC</span></div>';
		}
	}
	
	static function audit_tabs(&$page_speed, $device){
		echo '<div class="siteseo-audit-tabs siteseopro_audits_tab siteseo-metabox-tab" style="display:' . ($device == 'mobile' ? 'block' : 'none') . ';">';

		foreach($page_speed[$device] as $key => $audit){
			if(isset($audit['title'])){
				$get_icons_audit = self::set_dash_icons($audit['score']);
				$title_icon_audit = $get_icons_audit['title'];
				$description_icon_audit = $get_icons_audit['description'];

				echo '<div class="audit-item">';
				echo '<div class="siteseo-audit-title">';
				echo $title_icon_audit . esc_html($audit['title']) . '<span style="position: absolute; right: 0;" class="toggle-icon dashicons dashicons-arrow-up-alt2"></span></div>';
				if(isset($audit['description'])){
					echo '<div class="description"><hr>';
					echo $description_icon_audit . wp_kses_post(self::description_handle_with_url($audit['description'])) . '</div>';
				}
				echo '</div>';
			}
		}
		echo '</div>';

		echo '<div class="siteseo-audit-tabs siteseopro_opportunities_tab siteseo-metabox-tab" style="display:none;">';
		foreach($page_speed[$device]['opportunities'] as $opportunity){
			if(isset($opportunity['title'])){
				$icons_opportunity = self::set_dash_icons($opportunity['score']);
				$title_icon_opportunity = $icons_opportunity['title'];
				$description_icon_opportunity = $icons_opportunity['description'];
			
				echo '<div class="audit-item">';
				echo '<div class="siteseo-audit-title">';
				echo $title_icon_opportunity . esc_html($opportunity['title']) . '<span style="position: absolute; right: 0;" class="toggle-icon dashicons dashicons-arrow-up-alt2"></span></div>';
				if (isset($opportunity['description'])) {
					echo '<div class="description"><hr>';
					echo $description_icon_opportunity . wp_kses_post(self::description_handle_with_url($opportunity['description'])) . '</div>';
					
				}
				echo '</div>';
			}
		}
		echo '</div>';

		echo '<div class="siteseo-audit-tabs siteseopro_diagnostics_tab siteseo-metabox-tab" style="display:none;">';
		if(empty($page_speed['desktop']['diagnostics'])){
			echo '<table style="margin-left:30%;"  class="siteseo-notice-table"><tr><td class="siteseo-notice is-success"><p>'.esc_html__('No Diagnostics Available', 'siteseo-pro').'</p></td></tr></table>';
		}else{
			foreach($page_speed['desktop']['diagnostics'] as $diagnostic){
				if(isset($diagnostic['title'])){
					$icons_diagnostic = self::set_dash_icons($diagnostic['score']);
					$title_icon_diagnostic = $icons_diagnostic['title'];
					$description_icon_diagnostic = $icons_diagnostic['description'];

					echo '<div class="audit-item">';
					echo '<div class="siteseo-audit-title">';
					echo $title_icon_diagnostic . esc_html($diagnostic['title']) . '<span style="position:absolute; right:0;" class="toggle-icon dashicons dashicons-arrow-up-alt2"></span></div>';
					if(isset($diagnostic['description'])){
						echo '<div class="description"><hr>';
						echo $description_icon_diagnostic . wp_kses_post(self::description_handle_with_url($diagnostic['description'])) . '</div>';
					}
					echo '</div>';
				}
			}
		}
		echo '</div>';
	}
 
	static function set_status_color($score){

		if($score >= 0 && $score < 49){
			$status_color = '#ff0000;';
		} elseif($score >= 50 && $score < 90){
			$status_color = '#ffA500';
		} elseif($score >= 90 && $score <= 100){
			$status_color = '#008000';
		} else{
			$status_color = 'grey';
		}

		return $status_color;
	}

	static function set_dash_icons($title_score){

		$dashicons_title = '';
		$dashicons_desc = '';

		if($title_score > 0.90){
			$title_icon = '<span style="color:#008000" class="dashicons dashicons-yes"></span>';
			$desc_icon = '<span style="color:#008000" class="dashicons dashicons-thumbs-up"></span>';
		} else if($title_score >= 0.50 && $title_score <= 0.89){
			$title_icon = '<span style="color:#ffA500" class="dashicons dashicons-warning"></span>';
			$desc_icon = '<span style="color:#ffA500" class="dashicons dashicons-thumbs-down"></span>';
		} else{
			$title_icon = '<span style="color:#ff0000" class="dashicons dashicons-no"></span>';
			$desc_icon = '<span style="color:#ff0000" class="dashicons dashicons-thumbs-down"></span>';
		}

		return ['title' => $title_icon, 'description' => $desc_icon];
	}

	static function description_handle_with_url($description){
		preg_match('/\((https?.*)\)/', trim($description), $matches);

		if(empty($matches[0]) || empty($matches[1])){
			return $description;
		}

		$url = $matches[1];
		$description = str_replace($matches[0], '', $description);

		$description = preg_replace_callback('/\[(.*?)\]/', function($matches) use ($url){
			return '<a href="' . esc_url($url) . '" target="_blank">' . esc_html($matches[1]) . '</a>';
		}, $description);

		return $description;
	}
}main/admin.php000064400000011007151545124260007275 0ustar00<?php
/*
* SITESEO
* https://siteseo.io
* (c) SITSEO Team
*/

namespace SiteSEOPro;

if(!defined('ABSPATH')){
	die('HACKING ATTEMPT!');
}

class Admin{
	
	static function init(){
		
		add_action('admin_enqueue_scripts', '\SiteSEOPro\Admin::enqueue_script');
		add_action('admin_menu', '\SiteSEOPro\Admin::add_menu', 100);
		add_action('init', '\SiteSEOPro\RedirectManager::setup_log_scheduled');
		add_action('siteseo_structured_data_types_enqueue', '\SiteSEOPro\StructuredData::enqueue_metabox');
		add_action('siteseo_display_structured_data_types', '\SiteSEOPro\StructuredData::display_metabox');
		add_action('admin_notices', '\SiteSEOPro\Admin::free_version_nag');
		
	}
	
	static function enqueue_script(){
		
		if(empty($_GET['page']) || strpos($_GET['page'], 'siteseo') === FALSE){
			return;
		}

		wp_enqueue_media();
		
		wp_enqueue_script('siteseo-pro-admin', SITESEO_PRO_URL.'assets/js/admin.js', ['jquery'], SITESEO_PRO_VERSION, true);

		wp_localize_script('siteseo-pro-admin', 'siteseo_pro', [
			'ajax_url' => admin_url('admin-ajax.php'),
			'nonce' => wp_create_nonce('siteseo_pro_nonce'),
		]);

		wp_enqueue_style('siteseo-pro-admin', SITESEO_PRO_URL . 'assets/css/admin.css');

		
	}
	
	static function add_menu(){
		$capability = 'manage_options';

		add_submenu_page('siteseo', __('PRO', 'siteseo-pro'), __('PRO', 'siteseo-pro'), $capability, 'siteseo-pro-page', '\SiteSEOPro\Settings\Pro::home');

		add_submenu_page('siteseo', __('License', 'siteseo-pro'), __('License', 'siteseo-pro'), $capability, 'siteseo-license', '\SiteSEOPro\Settings\License::template');
	}
	

	static function local_business_block(){

		wp_register_script('local-business-block-script',SITESEO_PRO_URL . 'assets/js/block.js', array('wp-blocks', 'wp-element', 'wp-editor'), filemtime(SITESEO_PRO_DIR . 'assets/js/block.js'));
		
		$data = \SiteSEOPro\Tags::local_business();
		
		// Localize
		wp_localize_script('local-business-block-script', 'siteseoProLocalBusiness', array(
			'previewData' => $data,
		));

		register_block_type('siteseo-pro/local-business', array(
			'editor_script' => 'local-business-block-script',
			'render_callback' => '\SiteSEOPro\Tags::load_data_local_business'
		));
	}
	
	// Nag when plugins dont have same version.
	static function free_version_nag(){

		if(!defined('SITESEO_VERSION')){
			return;
		}

		$dismissed_free = (int) get_option('siteseo_version_free_nag');
		$dismissed_pro = (int) get_option('siteseo_version_pro_nag');

		// Checking if time has passed since the dismiss.
		if(!empty($dismissed_free) && time() < $dismissed_pro && !empty($dismissed_pro) && time() < $dismissed_pro){
			return;
		}

		$showing_error = false;
		if(version_compare(SITESEO_VERSION, SITESEO_PRO_VERSION) > 0 && (empty($dismissed_pro) || time() > $dismissed_pro)){
			$showing_error = true;

			echo '<div class="notice notice-warning is-dismissible" id="siteseo-pro-version-notice" onclick="siteseo_pro_dismiss_notice(event)" data-type="pro">
			<p style="font-size:16px;">'.esc_html__('You are using an older version of SiteSEO Pro. We recommend updating to the latest version to ensure seamless and uninterrupted use of the application.', 'siteseo-pro').'</p>
		</div>';
		}elseif(version_compare(SITESEO_VERSION, SITESEO_PRO_VERSION) < 0 && (empty($dismissed_free) || time() > $dismissed_free)){
			$showing_error = true;

			echo '<div class="notice notice-warning is-dismissible" id="siteseo-pro-version-notice" onclick="siteseo_pro_dismiss_notice(event)" data-type="free">
			<p style="font-size:16px;">'.esc_html__('You are using an older version of SiteSEO. We recommend updating to the latest free version to ensure smooth and uninterrupted use of the application.', 'siteseo-pro').'</p>
		</div>';
		}
		
		if(!empty($showing_error)){
			wp_register_script('siteseo-pro-version-notice', '', ['jquery'], SITESEO_PRO_VERSION, true );
			wp_enqueue_script('siteseo-pro-version-notice');
			wp_add_inline_script('siteseo-pro-version-notice', '
		function siteseo_pro_dismiss_notice(e){
			e.preventDefault();
			let target = jQuery(e.target);

			if(!target.hasClass("notice-dismiss")){
				return;
			}

			let jEle = target.closest("#siteseo-pro-version-notice"),
			type = jEle.data("type");

			jEle.slideUp();

			jQuery.post("'.admin_url('admin-ajax.php').'", {
				security : "'.wp_create_nonce('siteseo_version_notice').'",
				action: "siteseo_pro_version_notice",
				type: type
			}, function(res){
				if(!res["success"]){
					alert(res["data"]);
				}
			}).fail(function(data){
				alert("There seems to be some issue dismissing this alert");
			});
		}');
		}
	}
}
main/install.php000064400000001312151545124340007650 0ustar00<?php
/*
* SITESEO
* https://siteseo.io
* (c) SiteSEO Team
*/

namespace SiteSEOPro;

if(!defined('ABSPATH')){
    die('HACKING ATTEMPT!');
}


class Install{

	static function activate(){
		update_option('siteseo_pro_version', SITESEO_PRO_VERSION);
	}
	
	static function deactivate(){
		global $wpdb;

		wp_clear_scheduled_hook('siteseo_send_404_report_email');
		wp_clear_scheduled_hook('siteseo_404_cleanup');
	}
	
	static function uninstall(){
		global $wpdb;
		
		$wpdb->query("DROP TABLE IF EXISTS `".$wpdb->prefix."siteseo_redirect_logs`");

		delete_option('siteseo_pro_version');
		delete_option('siteseo_pro_options');
		delete_option('siteseo_pro_page_speed');
		delete_option('siteseo_license');
	}
	
}main/ajax.php000064400000030371151545124460007137 0ustar00<?php
/*
* SITESEO
* https://siteseo.io
* (c) SITSEO Team
*/

namespace SiteSEOPro;

if(!defined('ABSPATH')){
	die('HACKING ATTEMPT!');
}

class Ajax{

	static function hooks(){
		add_action('wp_ajax_siteseo_pro_get_pagespeed_insights', '\SiteSEOPro\Ajax::get_pagespeed');
		add_action('wp_ajax_siteseo_pro_pagespeed_insights_remove_results', '\SiteSEOPro\Ajax::delete_speed_scores');

		//toogle option pro
		add_action('wp_ajax_siteseo_pro_save_woocommerce', '\SiteSEOPro\Ajax::save_toggle');
		add_action('wp_ajax_siteseo_pro_save_edd', '\SiteSEOPro\Ajax::save_toggle');
		add_action('wp_ajax_siteseo_pro_save_dublin', '\SiteSEOPro\Ajax::save_toggle');
		add_action('wp_ajax_siteseo_pro_save_local', '\SiteSEOPro\Ajax::save_toggle');
		add_action('wp_ajax_siteseo_pro_save_structured' , '\SiteSEOPro\Ajax::save_toggle');
		add_action('wp_ajax_siteseo_pro_save_404_monitoring', '\SiteSEOPro\Ajax::save_toggle');
		add_action('wp_ajax_siteseo_pro_save_google_news', '\SiteSEOPro\Ajax::save_toggle');
		add_action('wp_ajax_siteseo_pro_update_htaccess', '\SiteSEOPro\Ajax::update_htaccess');
		add_action('wp_ajax_siteseo_pro_create_robots', '\SiteSEOPro\Ajax::create_robots');
		add_action('wp_ajax_siteseo_pro_update_robots', '\SiteSEOPro\Ajax::update_robots');
		add_action('wp_ajax_siteseo_pro_export_redirect_csv', '\SiteSEOPro\Ajax::export_csv_redirect_logs');
		add_action('wp_ajax_siteseo_pro_clear_all_logs', '\SiteSEOPro\Ajax::redirect_clear_all_logs');
		add_action('wp_ajax_siteseo_pro_remove_selected_logs', '\SiteSEOPro\Ajax::delete_selected_log');
		add_action('wp_ajax_siteseo_pro_version_notice', '\SiteSEOPro\Ajax::version_notice');
	}

	static function save_toggle(){

		check_ajax_referer('siteseo_pro_toggle_nonce', 'nonce');

		$action = sanitize_text_field(wp_unslash($_POST['action']));
		switch($action){
			case 'siteseo_pro_save_woocommerce':
				$toggle_key = 'toggle_state_woocommerce';
				break;
			case 'siteseo_pro_save_edd':
				$toggle_key = 'toggle_state_easy_digital';
				break;
			case 'siteseo_pro_save_dublin':
				$toggle_key = 'toggle_state_dublin_core';
				break;
			case 'siteseo_pro_save_local':
				$toggle_key = 'toggle_state_local_buz';		
				break;
			case 'siteseo_pro_save_structured':
				$toggle_key = 'toggle_state_stru_data';
				break;
			case 'siteseo_pro_save_404_monitoring':
				$toggle_key = 'toggle_state_redirect_monitoring';
				break;
			case 'siteseo_pro_save_google_news':
				$toggle_key = 'toggle_state_google_news';
				break;
			default:
				wp_send_json_error(['message' => 'Invalid action']);
				return;
		}

		$toggle_value = isset($_POST['toggle_value']) ? sanitize_text_field(wp_unslash($_POST['toggle_value'])) : '0';

		$options = get_option('siteseo_pro_options', []);
		$options[$toggle_key] = $toggle_value;
		
		if($toggle_key == 'toggle_state_redirect_monitoring'){
			\SiteSEOPro\Settings\Util::maybe_create_404_table();
		}
		
		
		$updated = update_option('siteseo_pro_options', $options);

		if($updated){
			wp_send_json_success([
				'message' => ucfirst($toggle_key) . ' toggle state saved successfully',
				'value' => $toggle_value
			]);
		} else{
			wp_send_json_error(['message' => 'Failed to save toggle state']);
		}
	
	}
	
	static function get_pagespeed(){
		check_ajax_referer('siteseo_pro_nonce', 'nonce');
		
		if(!current_user_can('manage_options')){
			wp_send_json_error(__('You do not have enough privilege to use this feature', 'siteseo-pro'));
		}

		global $siteseo;

		$api_url = 'https://www.googleapis.com/pagespeedonline/v5/runPagespeed';
		$api_key = $siteseo->pro['ps_api_key'];
		$site_url = isset($_POST['test_url']) ? sanitize_url($_POST['test_url']) : site_url();
		
		if(empty($api_key)){
			wp_send_json_error(__('You have not saved the API key', 'siteseo-pro'));
		}
		
		if(empty($site_url)){
			wp_send_json_error(__('The URL you have provided is not valid', 'siteseo-pro'));
		}
		
		$device = (!empty($_REQUEST['is_mobile']) && $_REQUEST['is_mobile'] != 'false') ? 'mobile' : 'desktop';
		$request_url = $api_url . '?url=' . urlencode($site_url) . '&strategy='.$device.'&key='.$api_key;

		$response = wp_remote_get($request_url, array('timeout' => 60)); // 60 sec wait time 

		if(is_wp_error($response)){
			$error_message = is_wp_error($response) ? $response->get_error_message() : $response->get_error_message();

			wp_send_json_error($error_message);
		}

		$body = wp_remote_retrieve_body($response);

		if(empty($body)){
			wp_send_json_error(__('Response body is empty', 'siteseo-pro'));
		}

		$result = json_decode($body, true);
		
		$page_speed = get_option('siteseo_pro_page_speed', []);

		// Handling Pagespeed insight result.
		foreach($result['lighthouseResult']['audits'] as $key => $audit){

			if(isset($audit['title']) && isset($audit['description']) && !isset($audit['details']['type'])){
				$page_speed[$device][$key] = [
					'id' => $audit['id'],
					'score' => $audit['score'],
					'title' => $audit['title'],
					'description' => $audit['description']
				];
			}

			if(isset($audit['details']['type']) && $audit['details']['type'] === 'opportunity'){
				$page_speed[$device]['opportunities'][] = [
					'title' => $audit['title'],
					'description' => $audit['description'],
					'score' => isset($audit['score']) ? $audit['score'] : null
				];
			}

			if(!isset($page_speed[$device]['diagnostics'])){
				$page_speed[$device]['diagnostics'] = [];
			}

			if(isset($audit['score']) && isset($audit['details']['type']) && $audit['score'] <= 0.89 && $audit['details']['type'] != 'opportunity'){
				$page_speed[$device]['diagnostics'][] = [
					'title' => $audit['title'],
					'description' => $audit['description'],
					'score' => isset($audit['score']) ? $audit['score'] : null
				];
			}
		}

		$page_speed[$device]['fetchTime'] = $result['lighthouseResult']['fetchTime'];
		$page_speed[$device]['score'] = $result['lighthouseResult']['categories']['performance']['score'];
		
		update_option('siteseo_pro_page_speed', $page_speed);
		
		wp_send_json_success();
	}
	
	static function delete_speed_scores(){
		check_ajax_referer('siteseo_pro_nonce', 'nonce');
		
		if(!current_user_can('manage_options')){
			wp_send_json_error(__('You do not have enough privilege to use this feature', 'siteseo-pro'));
		}
		
		delete_option('siteseo_pro_page_speed');
		wp_send_json_success();
	}

	static function update_htaccess(){
		check_ajax_referer('siteseo_pro_nonce', 'nonce');
		
		if(!current_user_can('manage_options')){
			wp_send_json_error(__('You do not have required permission to edit this file.', 'siteseo-pro'));
		}

		$htaccess_enable = isset($_POST['htaccess_enable']) ? intval(sanitize_text_field(wp_unslash($_POST['htaccess_enable']))) : 0;
		$htaccess_rules = isset($_POST['htaccess_code']) ? sanitize_textarea_field(wp_unslash($_POST['htaccess_code'])) : '';

		if(empty($htaccess_enable)){
			wp_send_json_error(__('Please accept the warning first before proceeding with saving the htaccess', 'siteseo-pro'));
		}

		$htaccess_file = ABSPATH . '.htaccess';
		$backup_file = ABSPATH . '.htaccess_backup.siteseo';

		if(!is_writable($htaccess_file)){
			wp_send_json_error(__('.htaccess file is not writable so the ', 'siteseo-pro'));
		}

		// Backup .htaccess file
		if(!copy($htaccess_file, $backup_file)){
			wp_send_json_error(__('Failed to create backup of .htaccess file.', 'siteseo-pro'));
		}

		// Update the .htaccess file
		if(file_put_contents($htaccess_file, $htaccess_rules) === false){
			wp_send_json_error(__('Failed to update .htaccess file.', 'siteseo-pro'));
		}

		$response = wp_remote_get(site_url());
		$response_code = wp_remote_retrieve_response_code($response);
		
		// Restore the backup if something goes wrong.
		if($response_code > 299){
			copy($backup_file, $htaccess_file);
			wp_send_json_error(__('There was a syntax error in the htaccess rules you provided as the response to your website with the new htaccess gave response code of', 'siteseo-pro') . ' ' . $response_code);
		}

		wp_send_json_success(__('Successfully updated .htaccess file', 'siteseo-pro'));
	}

	static function create_robots(){
		
		check_ajax_referer('siteseo_pro_nonce', 'nonce');
		
		if(!current_user_can('manage_options')){
			wp_send_json_error(__('You do not have required permission to create robots.txt file.', 'siteseo-pro'));
		}
		
		ob_start();
		do_robots();
		$robots_txt = ob_get_clean();
		
		if(file_put_contents(ABSPATH . 'robots.txt', $robots_txt)){
			wp_send_json_success(__('Successfully create the robots.txt file', 'siteseo-pro'));
		}

		wp_send_json_error();
		
	}

	static function update_robots(){
		check_ajax_referer('siteseo_pro_nonce', 'nonce');
		
		if(!current_user_can('manage_options')){
			wp_send_json_error(__('You do not have required permission to edit this file.', 'siteseo-pro'));
		}
		
		$robots_txt = '';
		if(!empty($_POST['robots'])){
			$robots_txt = sanitize_textarea_field(wp_unslash($_POST['robots']));
		}

		if(empty($robots_txt)){
			wp_send_json_error(__('You have supplied empty robots rules', 'siteseo-pro'));
		}
		
		if(!is_writable(ABSPATH . 'robots.txt')){
			wp_send_json_error(__('robots.txt file is not writable', 'siteseo-pro'));
		}
		
		if(file_put_contents(ABSPATH . 'robots.txt', $robots_txt)){
			wp_send_json_success(__('Successfully update the robots.txt file', 'siteseo-pro'));
		}

		wp_send_json_error(__('Unable to update the robots.txt file', 'siteseo-pro'));
		
	}
	
	static function export_csv_redirect_logs(){
		
		check_ajax_referer('siteseo_pro_nonce', 'nonce');
		
		if(!current_user_can('manage_options')){
			wp_send_json_error(__('You do not have required permission to edit this file.', 'siteseo-pro'));
		}
		
		$file_name = 'siteseo-redirect-data-' . current_time('Y-m-d') . '.csv';
		
		global $wpdb;

		$results = $wpdb->get_results("SELECT url, ip_address, timestamp, user_agent, referer, hit_count FROM {$wpdb->prefix}siteseo_redirect_logs ORDER BY timestamp DESC", ARRAY_A);
		
		if(empty($results)){
			wp_send_json_error('No data found');
			exit;
		}
		
		header('Content-Type: text/csv');
		header('Content-Disposition: attachment; filename="' . $file_name . '"');
		header('Pragma: no-cache');
		header('Expires: 0');
		
		$output = fopen('php://output', 'w');
		
		// Add headers
		fputcsv($output, array('URL', 'IP Address', 'Timestamp', 'User Agent', 'Referer', 'Hit Count'));
		
		foreach($results as $row){
			fputcsv($output, $row);
		}
		
		fclose($output);
		exit;
	}
	
	static function redirect_clear_all_logs(){
		
		check_ajax_referer('siteseo_pro_nonce', 'nonce');
		
		if(!current_user_can('manage_options')){
			wp_send_json_error(__('You do not have permission to clear logs.', 'siteseo-pro'));
		}
		
		global $wpdb;
		$table_name = $wpdb->prefix . "siteseo_redirect_logs";
		
		$result = $wpdb->query("TRUNCATE TABLE $table_name");

		if($result !== false){
			wp_send_json_success(__('All logs have been cleared.', 'siteseo-pro'));
		}
		
		wp_send_json_error(__('Failed to clear logs.', 'siteseo-pro'));
	}
	
	static function delete_selected_log(){
		global $wpdb;
		
		check_ajax_referer('siteseo_pro_nonce', 'nonce');
		
		if(!current_user_can('manage_options')){
			wp_send_json_error(__('You do not have permission to clear logs.', 'siteseo-pro'));
		}
		
		$selected_ids = isset($_POST['ids']) ? array_map('intval', $_POST['ids']) : array();
		
		if(empty($selected_ids)){
			wp_send_json_error('No logs selected');
			return;
		}
		
		$placeholders = array_fill(0, count($selected_ids), '%d');
		$placeholders_string = implode(',', $placeholders);
				
		// Delete
		$result = $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}siteseo_redirect_logs WHERE id IN ($placeholders_string)", $selected_ids));
		
		if($result !== false){
			wp_send_json_success(array(
				'message' => 'Selected logs deleted successfully',
				'deleted_count' => $result
			));
		} else{
			wp_send_json_error('Failed to delete logs');
		}
	}
	
	// Version nag ajax
	static function version_notice(){
		check_admin_referer('siteseo_version_notice', 'security');

		if(!current_user_can('activate_plugins')){
			wp_send_json_error(__('You do not have required access to do this action', 'siteseo-pro'));
		}
		
		$type = '';
		if(!empty($_REQUEST['type'])){
			$type = sanitize_text_field(wp_unslash($_REQUEST['type']));
		}

		if(empty($type)){
			wp_send_json_error(__('Unknown version difference type', 'siteseo-pro'));
		}
		
		update_option('siteseo_version_'. $type .'_nag', time() + WEEK_IN_SECONDS);
		wp_send_json_success();
	}
}
main/breadcrumbs.php000064400000016053151545124530010504 0ustar00<?php
/*
* SITESEO
* https://siteseo.io
* (c) SiteSEO Team
*/

namespace SiteSEOPro;

if(!defined('ABSPATH')){
	die('HACKING ATTEMPT!');
}

class Breadcrumbs{

	static function enable_breadcrumbs(){
		global $siteseo;
		
		$settings = $siteseo->pro;
		$advanced_option = get_option('siteseo_advanced_option_name');
		$settings = isset($settings['breadcrumbs_enable']) ? $settings : $advanced_option;

		if(!empty($settings['breadcrumbs_enable'])){
			add_shortcode('siteseo_breadcrumbs', '\SiteSEOPro\Breadcrumbs::render');
		}
	}

	static function render(){
		global $post,$siteseo;
		
		$settings = $siteseo->pro;
		$advanced_option = get_option('siteseo_advanced_option_name');
		$settings = isset($settings['breadcrumbs_enable']) ? $settings : $advanced_option;
		
		$breadcrumbs = [];

		$seperator = !empty($settings['breadcrumbs_seperator']) ? $settings['breadcrumbs_seperator'] : '/';
		$prefix = !empty($settings['breadcrumb_prefix']) ? $settings['breadcrumb_prefix'] : '';

		if(!empty($prefix)){
			$breadcrumbs[] = ['title' => $prefix, 'link' => ''];
		}

		if(!empty($settings['breadcrumbs_custom_seperator'])){
			$seperator = $settings['breadcrumbs_custom_seperator'];
		}

		if(is_home()){
			$breadcrumbs[] = single_post_title('', false);
		} elseif(empty($settings['breadcrumbs_home'])){
			$breadcrumbs[] = ['title' => __('Home', 'siteseo-pro'), 'link' => get_site_url()];
		}

		if(is_search()){
			$breadcrumbs[] = ['title' => __('Search Result for ', 'siteseo-pro') . get_search_query(), 'link' => ''];
		}

		if(is_404()){
			$breadcrumbs[] = ['title' => __('404 Page Not found', 'siteseo-pro'), 'link' => ''];
		}

		if(is_attachment()){
			$breadcrumbs[] = ['title' => $post->post_parent, 'link' => get_permalink($post->post_parent)];
			$breadcrumbs[] = ['title' => get_the_title(), 'link' => get_permalink()];
		}

		if(function_exists('is_shop') && function_exists('is_product') && function_exists('is_product_category') && function_exists('is_product_tag')
			&& (is_shop() || is_product() || is_product_category() || is_product_tag()) && function_exists('wc_get_page_id')){
			$shop_id = wc_get_page_id('shop');
			
			// If shop ID is same as the home id that means, the hope page is being used as the shop page,
			// So adding a Shop page crumb will make it redundent.
			if(isset($shop_id) && get_option('page_on_front') != $shop_id){
				$breadcrumbs[] = ['title' => get_the_title($shop_id), 'link' => get_permalink($shop_id)];
			}

			if(is_product_category()){
				$term = $GLOBALS['wp_query']->get_queried_object();

				if(!empty($term)){
					$term_trail = get_term_ansestors($term);
					if(!empty($term_trail)){
						$breadcrumbs = array_merge($breadcrumbs, $term_trail);
					}
				}
			}

			if(is_product_tag()){
				$term = $GLOBALS['wp_query']->get_queried_object();

				if(!empty($term)){
					$breadcrumbs[] = ['title' => $term->name, 'link' => ''];
				}
			}

			if(is_product()){
				// Getting Product category and its ansestors if any.
				$categories = get_the_terms($post->ID, 'product_cat');

				if(!empty($categories)){
					foreach($categories as $category){
						if(!empty($category) && $category instanceof WP_Term){
							$category_trail = get_term_ansestors($category);
							if(!empty($category_trail)){
								$breadcrumbs = array_merge($breadcrumbs, $category_trail);
							}

							$breadcrumbs[] = ['title' => $category->name, 'link' => get_term_link($category)];
							break;
						}
					}
				}

				$breadcrumbs[] = ['title' => get_the_title($post), 'link' => ''];
			}
		}

		if(is_singular() && !is_archive() && (!function_exists('is_product') || !is_product())){

			// handle custom post types
			$post_type = get_post_type();

			if($post_type && !in_array($post_type,['post', 'page']) && get_post_type_archive_link($post_type)){
				$post_type_obj = get_post_type_object($post_type);

				if(!empty($post_type_obj)){		
					$breadcrumbs[] = [
						'title' => $post_type_obj->labels->name,
						'link' => get_post_type_archive_link($post_type),
					];
				}
			}

			// Handle categories
			$categories = get_the_category();
			if(!empty($categories)){
				foreach($categories as $category){
					if(!empty($category) && $category instanceof WP_Term){
						$category_trail = self::get_term_ansestors($category);
						if(!empty($category_trail)){
							$breadcrumbs = array_merge($breadcrumbs, $category_trail);
						}

						$breadcrumbs[] = ['title' => $category->name, 'link' => get_term_link($category)];
						break;
					}
				}
			}

			$breadcrumbs[] = ['title' => get_the_title(), 'link' => ''];
		}

		if(is_archive()){
			if(is_category() || is_tax() || is_tag()){
				$term = $GLOBALS['wp_query']->get_queried_object();

				if(!is_tag() && !empty($term) && $term instanceof WP_Term){
					// Adding Term ansestor if any
					if(!is_tag()){
						$term_trail = self::get_term_ansestors($term);
						if(!empty($term_trail)){
							$breadcrumbs = array_merge($breadcrumbs, $term_trail);
						}
					}

					$breadcrumbs[] = ['title' => $term->name, 'link' => ''];
				}
			}

			if(is_author()){
				global $author;

				$author_data = get_userdata($author);
				$breadcrumbs[] = ['title' => $author_data->display_name, 'link' => get_author_posts_url($author_data->ID)];
			}
		}

		$html ='<style>.siteseo-breadcrumbs{display:flex;list-style-type:none;margin:0;padding:0}.siteseo-breadcrumbs-seperator{margin:0 5px;padding:0}</style><div class="siteseo-breadcrumbs-wrap">
		<ul class="siteseo-breadcrumbs">';

		foreach($breadcrumbs as $i => $breadcrumb){
			if(empty($breadcrumb['title'])){
				continue;
			}
			
			$html .= '<li>'.(!empty($breadcrumb['link']) ? '<a href="'.esc_url($breadcrumb['link']).'" title="'.esc_attr($breadcrumb['title']).'">'.esc_html($breadcrumb['title']).'</a>' : esc_html($breadcrumb['title'])).'</li>';

			if(count($breadcrumbs) - 1 != $i){
				$html .= '<div class="siteseo-breadcrumbs-seperator"><span>'.esc_html($seperator).'</span></div>';
			}
		}
		$html .= '</ul></div>';
		
		return $html;
	}

	static function seperator(){
		global $siteseo;
		
		$settings = $siteseo->pro;
		$advanced_option = get_option('siteseo_advanced_option_name');
		$settings = isset($settings['breadcrumbs_enable']) ? $settings : $advanced_option;
		
		$seperator = '/';

		if(!empty($settings)){
			$seperator = !empty($settings['breadcrumbs_seperator']) ? $settings['breadcrumbs_seperator'] : '/';

			if(!empty($settings['breadcrumbs_custom_seperator'])){
				$seperator = $settings['breadcrumbs_custom_seperator'];
			}
		}

		return $seperator;
	}

	static function get_term_ansestors($term){
		$ansestors = get_ancestors($term->term_id, $term->taxonomy);
		$ansestors = array_reverse($ansestors);
		$ansestors_res = [];

		foreach($ansestors as $ansestor){
			$ansestor = get_term($ansestor, $term->taxonomy);
			if(empty($ansestor) || is_wp_error($ansestor) || !is_a($ansestor, 'WP_Term')){
				continue;
			}

			$ansestors_res[] = ['title' => $ansestor->name, 'link' => get_term_link($ansestor)];
		}

		return $ansestors_res;
	}
	
	static function render_block(){
		return sprintf('<div %s>%s</div>', get_block_wrapper_attributes(), \SiteSEOPro\Breadcrumbs::render());
	}


}main/structureddata.php000064400000031655151545124600011254 0ustar00<?php
/*
* SITESEO
* https://siteseo.io
* (c) SITSEO Team
*/

namespace SiteSEOPro;

if(!defined('ABSPATH')){
	die('Hacking Attempt !');
}

class StructuredData{
	
	static function enqueue_metabox(){	
		$post_id = get_the_ID();

		wp_enqueue_style('siteseo-structured-data-metabox', SITESEO_PRO_ASSETS_URL.'/css/metabox.css');
		wp_enqueue_script('siteseo-index-highlight', SITESEO_PRO_ASSETS_URL.'/js/index-highlight.js', ['jquery'], SITESEO_PRO_VERSION);
		wp_enqueue_script('siteseo-structured-data-metabox', SITESEO_PRO_ASSETS_URL.'/js/metabox.js', ['jquery'], SITESEO_PRO_VERSION);

		wp_localize_script('siteseo-structured-data-metabox', 'structuredDataMetabox', [
			'propertyTemplates' => \SiteSEOPro\StructuredData::get_schema_properties(),
			'currentPostUrl' => get_permalink($post_id)
		]);
	}

	static function display_metabox(){
		global $post;
		
		if(is_front_page() || is_home()){
			$post_id = get_option('page_on_front');

			if(!$post_id && is_home()){
				$post_id = get_option('page_for_posts');
			}
			
		} else{
			$post_id = $post ? $post->ID : 0;
		}
		
		if(!empty($post_id)){
			$schema_type = !empty(get_post_meta($post_id, '_siteseo_structured_data_type', true)) ? get_post_meta($post_id, '_siteseo_structured_data_type', true) : '';
			$schema_properties = !empty(get_post_meta($post_id, '_siteseo_structured_data_properties', true)) ? get_post_meta($post_id, '_siteseo_structured_data_properties', true) : '';
			$custom_schema = !empty(get_post_meta($post_id, '_siteseo_structured_data_custom', true)) ? get_post_meta($post_id, '_siteseo_structured_data_custom', true) : '';
		}
		
		$schema_types['Article'] = 'Article';
		$schema_types['NewsArticle'] = 'News Article';
		$schema_types['Blogposting'] = 'Blog post';
		$schema_types['Product'] = 'Product';
		$schema_types['Recipe'] = 'Recipe';
		$schema_types['Restaurant'] = 'Restaurant';
		$schema_types['Course'] = 'Course';
		$schema_types['LocalBusiness'] = 'Local Business';
		$schema_types['Person'] = 'Person';
		$schema_types['Organization'] = 'Organization';
		$schema_types['Book'] = 'Book Recording';
		$schema_types['MusicRecording'] = 'Music Album';
		$schema_types['SoftwareApplication'] = 'Software Application';
		$schema_types['VideoObject'] = 'Video';
		$schema_types['Event'] = 'Event';
		$schema_types['JobPosting'] = 'Job Posting';
		$schema_types['CustomSchema'] = 'Custom Schema';
		
		
		$custom_schema_placeholder = json_encode([
			'type' => 'object',
			'properties' => [
				'placeholder' => ['type' => 'string'],
				'description' => ['type' => 'integer']
			]
		], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
		
		echo'<div class="siteseo-metabox-option-wrap">
			<div class="siteseo-metabox-label-wrap">
				<label for="siteseo_structured_data_type">'.esc_html__('Select Schema Types','siteseo-pro').'</label>
			</div>
			<div class="siteseo-metabox-input-wrap">
				<select name="siteseo_structured_data_type" class="siteseo_structured_data_type" id="siteseo_structured_data_type">
					<option value="">'.esc_html__('None').'</option>';
					foreach($schema_types as $type => $label){
						echo '<option value="'.esc_attr($type).'" '.selected($schema_type, $type, false).'>'.esc_html($label).'</option>';
					}
				echo'</select>
				</input>
			</div>
		</div>';
		
		$schema_template = self::get_schema_properties();
		
		echo'<div class="siteseo-metabox-schema">
				<div id="siteseo_schema_properties_container" class="'.(empty($schema_type) || $schema_type === 'CustomSchema' ? 'hidden' : '').'">
					<div class="siteseo-schema-properties">';

					if(!empty($schema_type) && isset($schema_template[$schema_type]) && $schema_type !== 'CustomSchema'){
						
						$is_textarea = ['description', 'instructions', 'reviewBody', 'questions', 'step', 'ingredients', 'recipeInstructions', 'courseDescription', 'bookDescription', 'softwareRequirements', 'menu', 'name'];
						
						$is_date_type = ['datePublished', 'dateModified', 'uploadDate', 'startDate', 'endDate', 'foundingDate', 'releaseDate'];
						
						foreach($schema_template[$schema_type] as $property => $default){
							echo '<p><h4 for="siteseo_schema_property_'.esc_attr($property).'">'.esc_html(ucfirst(preg_replace('/([a-z])([A-Z])/', '$1 $2', $property))).':</h4>';

							if(in_array($property, $is_textarea)){
								echo '<textarea name="schema_properties['.esc_attr($property).']" id="siteseo_schema_property_' .esc_attr($property).'" rows="3" class="widefat">'.esc_textarea(isset($schema_properties[$property]) ? $schema_properties[$property] : '').'</textarea>';
							} else if(in_array($property, $is_date_type)){
								echo '<input type="datetime-local" name="schema_properties['.esc_attr($property).']" id="siteseo_schema_property_'.esc_attr($property).'" value="' .esc_attr(isset($schema_properties[$property]) ? $schema_properties[$property] : '').'" class="widefat">';
							} else {
								echo '<input type="text" name="schema_properties['.esc_attr($property).']" id="siteseo_schema_property_'.esc_attr($property).'" value="' .esc_attr(isset($schema_properties[$property]) ? $schema_properties[$property] : '').'" class="widefat">';
							}

							echo '</p>';
						}
					}
		
				echo '</div>
			</div>
		</div>
		
		<div class="siteseo-metabox-schema">
			<div id="siteseo_custom_schema_container" class="'.($schema_type !== 'CustomSchema' ? 'hidden' : '').'">
			<h4>'.esc_html__('Custom Schema', 'siteseo-pro').'</h4>
				<p>
					<textarea name="siteseo_structured_data_custom" placeholder="'.esc_attr($custom_schema_placeholder).'" rows="10" class="siteseo_structured_data_custom widefat code">'.
					esc_textarea($custom_schema).'</textarea>
				</p>
				<p class="description">'.sprintf(esc_html__('Create your custom schema as per guidelines. %sRead here%s.', 'siteseo-pro'),'<a href="https://schema.org/docs/schemas.html" target="_blank" rel="noopener noreferrer">','</a>').'</p>
			</div>
		</div>
		
		<div class="siteseo-metabox-option-wrap">
			<div class="siteseo-schema-preview">
				<h4>'.esc_html__('JSON-LD Preview', 'siteseo-pro').'</h4>
				<a class="button" id="siteseo_validate_schema">'.esc_html__('Google Validation','siteseo-pro').'</a>
				
				<pre id="siteseo_schema_preview">';
				if($schema_type === 'CustomSchema' && !empty($custom_schema)){
					echo '<div id="siteseo_highlighter">'.esc_html($custom_schema).'</div>';
				} elseif (!empty($schema_type) && !empty($schema_properties)){
					$schema_data = array(
						'@context' => 'https://schema.org',
						'@type' => $schema_type
					);

					foreach($schema_properties as $key => $value){
						if(!empty($value)){
							$schema_data[$key] = $value;
						}
					}
					
					echo'<div id="siteseo_highlighter">'.esc_html(json_encode($schema_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)).'</div>';
				} else{
					echo'<div>'.esc_html__('No schema has been selected.').'</div>';
				}
				echo'</pre>
			</div>
		</div>';		
	}
	
	static function get_schema_properties(){
		
		return [
			'Article'=> [
				'headline' => '',
				'author' => '',
				'datePublished' => '',
				'dateModified' => '',
				'publisher' => '',
				'description' => '',
			],
			'Blogposting' => [
				'headline' => '',
				'author' => '',
				'datePublished' => '',
				'dateModified' => '',
				'publisher' => '',
				'description' => '',
			],
			'Course' => [
				'name' => '',
				'Description' => '',
				'provider' => '',
				'availableLanguage' => '',
				'coursePrerequisites' =>'',
				'courseCode' => '',
				'hasCourseInstance' => '',
				'timeRequired' => '',
				'educationalCredentialAwarded' => '',
			],
			'MusicRecording' => [
				'name' => '',
				'byArtist' => '',
				'duration' => '',
				'recordingOf' => '',
				'inAlbum' => '',
				'datePublished' => '',
				'releasedEvent' => '',
				'abstract' => '',
			],
			'Book' => [
				'name' => '',
				'author' => '',
				'bookEdition' => '',
				'isbn' => '',
				'publisher' => '',
				'datePublished' => '',
				'abstract' => '',
				'inLanguage' => '',
			],
			'Restaurant' => [
				'name' => '',
				'address' => '',
				'hasMenu' => '',
				'telephone' => '',
				'priceRange' => '',
				'openingHours' => '',
			],
			'SoftwareApplication' => [
				'name' => '',
				'applicationCategory' => '',
				'applicationSubCategory' => '',
				'availableOnDevice' => '',
				'operatingSystem' => '',
				'softwareVersion' => '',
				'softwareRequirements' => '',
				'downloadUrl' => '',
			],
			'VideoObject' => [
				'name' => '',
				'description' => '',
				'thumbnailUrl' => '',
				'uploadDate' => '',
				'embedUrl' => '',
				'publisher' =>'',
				'creator' => '',
			],
			'Event' => [
				'name' => '',
				'startDate' => '',
				'endDate' => '',
				'location' => '',
				'description' => '',
				'offers' => '',
				'organizer' => '',
				'performer' => '',
			],
			'Recipe' => [
				'name' => '',
				'author' => '',
				'description' => '',
				'cookTime' => '',
				'cookingMethod' => '',
				'prepTime' => '',
				'totalTime' => '',
				'recipeYield' => '',
				'recipeCategory' => '',
				'recipeCuisine' => '',
				'recipeInstructions' => '',
			],
			'Person' =>[
				'name' => '',
				'jobTitle' => '',
				'email' => '',
				'telephone' => '',
				'address' => '',
			],
			'Organization' => [
				'name' => '',
				'url' =>'',
				'description' => '',
				'email' => '',
				'founder' => '',
				'foundingDate' => '',
				'numberOfEmployees' => '',
				'location' => '',
			],
			'JobPosting' =>[
				'name' => '',
				'industry' => '',
				'title' => '',
				'totalJobOpenings' => '',
				'skills' => '',
				'jobBenefits' => '',
				'jobLocationType' => '',
			],
			'NewsArticle' =>[
				'headline' => '',
				'author' => '',
				'datePublished' => '',
				'dateModified' => '',
				'publisher' => '',
				'description' => '',
			],
			'Product' =>[
				'name' => '',
				'description' => '',
				'brand' => '',
				'category' => '',
				'releaseDate' => '',
				'size' => '',	
			],

			'LocalBusiness' =>[
				'legalName' => '',
				'founder' => '',
				'address' => '',
				'email' => '',
				'numberOfEmployees' => '',
				'telephone' => '',
				'taxID' => '',
				'vatID' => '',
			],
		]; 
	}
	
	static function save_metabox($post_id, $post){
		
		// Security Check
		if(!isset($_POST['siteseo_metabox_nonce']) || !wp_verify_nonce(sanitize_text_field($_POST['siteseo_metabox_nonce']), 'siteseo_metabox_nonce')){
			return $post_id;
		}

		//Post type object
		$post_type = get_post_type_object($post->post_type);

		//Check permission
		if(!current_user_can($post_type->cap->edit_post, $post_id)){
			return $post_id;
		}
		
		if(isset($_POST['siteseo_structured_data_type'])){
			update_post_meta($post_id, '_siteseo_structured_data_type', sanitize_text_field($_POST['siteseo_structured_data_type']));
		} else{
			delete_post_meta($post_id, '_siteseo_structured_data_type');
		}
		
		if(isset($_POST['siteseo_structured_data_custom'])){
			update_post_meta($post_id, '_siteseo_structured_data_custom', wp_kses_post($_POST['siteseo_structured_data_custom']));
		} else{
			delete_post_meta($post_id, '_siteseo_structured_data_custom');
		}
		
		if(isset($_POST['schema_properties']) && is_array($_POST['schema_properties'])){
			
			$properties = array();
			$text_area_fields = array('description', 'instructions', 'reviewBody', 'questions', 'step', 'ingredients','recipeInstructions', 'courseDescription', 'bookDescription', 'softwareRequirements', 'menu');
			
			foreach($_POST['schema_properties'] as $key => $value){
				if(in_array($key, $text_area_fields)){
					$properties[$key] = sanitize_textarea_field($value);
				} else{
					$properties[$key] = sanitize_text_field($value);
				}
			}
			
			update_post_meta($post_id, '_siteseo_structured_data_properties', $properties);
		} else{
			delete_post_meta($post_id, '_siteseo_structured_data_properties');
		}
	}
	
	static function render(){
		global $siteseo, $post;
		
		if(empty($siteseo->pro['enable_structured_data']) || empty($siteseo->pro['toggle_state_stru_data'])){
			return; // disable
		}
		
		if(!is_singular()){
			return;
		}

		$schema_type = !empty(get_post_meta($post->ID , '_siteseo_structured_data_type', true)) ? get_post_meta($post->ID, '_siteseo_structured_data_type', true) : '';
		
		if($schema_type === 'CustomSchema'){
			$custom_schema = !empty(get_post_meta($post->ID , '_siteseo_structured_data_custom', true)) ? get_post_meta($post->ID, '_siteseo_structured_data_custom', true) : '';
			if(!empty($custom_schema)){
				echo'<script type="application/ld+json">'.$custom_schema.'</script>' . "\n";
			}

		} else {
			
			$schema_properties = !empty(get_post_meta($post->ID, '_siteseo_structured_data_properties', true)) ? get_post_meta($post->ID, '_siteseo_structured_data_properties', true) : '';
			
			if(!empty($schema_type) && is_array($schema_properties)){
				$schema_data = array(
					'@context' => 'https://schema.org',
					'@type' => $schema_type
				);
				
				foreach($schema_properties as $key => $value){
					if(!empty($value)){
						$schema_data[$key] = $value;
					}
				}
				
				echo'<script type="application/ld+json">'.json_encode($schema_data, JSON_UNESCAPED_SLASHES).'</script>' . "\n";
				
			}
		}
	}
}
main/registerblocks.php000064400000003114151545124720011230 0ustar00<?php
/*
* SITESEO
* https://siteseo.io
* (c) SiteSEO Team
*/

namespace SiteSEOPro;

class RegisterBlocks{
	
	static function init(){
		global $siteseo;
		$settings = $siteseo->pro;
		$advanced_option = get_option('siteseo_advanced_option_name');
		$settings = isset($settings['breadcrumbs_enable']) ? $settings : $advanced_option;
		
		if(!empty($settings['breadcrumbs_enable'])){
			self::breadcrumbs();
		}
	}
	
	static function breadcrumbs(){
		global $siteseo;
		
		$settings = $siteseo->pro;
		$advanced_option = get_option('siteseo_advanced_option_name');
		$settings = isset($settings['breadcrumbs_enable']) ? $settings : $advanced_option;
		
		// Register Breadcrumbs block
		register_block_type(SITESEO_PRO_ASSETS_PATH . '/js/breadcrumbs/build', [
			'category' => 'siteseo',
			'render_callback' => '\SiteSEOPro\Breadcrumbs::render_block',
			'attributes' => [
				'hideHome' => [
					'type' => 'boolean',
					'default' => (!empty($settings) && !empty($settings['breadcrumbs_home']) ? true : false),
				],
				'homeLabel' => [
					'type'    => 'string',
					'default' => (!empty($settings) && !empty($settings['breadcrumb_home_label']) ? esc_html($settings['breadcrumb_home_label']) : esc_html__('Home', 'siteseo-pro')),
				],
				'seperator' => [
					'type' => 'string',
					'default' => \SiteSEOPro\Breadcrumbs::seperator(),
				],
				'prefix' => [
					'type' => 'string',
					'default' => (!empty($settings) && !empty($settings['breadcrumb_prefix']) ? esc_html($settings['breadcrumb_prefix']) : ''),
				],
			]
		]);
		wp_set_script_translations('siteseo/breadcrumbs', 'siteseo');
	}
}main/googlenews.php000064400000004236151545125060010363 0ustar00<?php
/*
* SITESEO
* https://siteseo.io
* (c) SITSEO Team
*/

namespace SiteSEOPro;

if(!defined('ABSPATH')){
	die('Hacking Attempt !');
}

class GoogleNews{

	static function google_news_sitemap(){
		global $siteseo;
		$settings = $siteseo->pro;
		
		if(empty($settings['toggle_state_google_news']) || empty($settings['google_news'])){
			return;
		}
		
		$publication_name = isset($siteseo->pro['publication_name']) ? $siteseo->pro['publication_name'] : get_bloginfo('name');
		$selected_post_types = isset($siteseo->pro['post_types']) ? $siteseo->pro['post_types'] : [];
		
		header('Content-Type: application/xml; charset=utf-8');
		
		if(get_option('permalink_structure')){
			$xsl_url = home_url('/sitemaps.xsl');
		} else{
			$xsl_url = home_url('/?sitemaps-stylesheet=sitemap');
		}
	
	echo'<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="' . esc_url($xsl_url) . '" ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:news="http://www.google.com/schemas/sitemap-news/0.9">';
	
		if(!empty($selected_post_types)){
			//date
			$date = new \DateTime();
			$last_48_hours = $date->modify('-48 hours')->format('Y-m-d\TH:i:sP');
			$args = [
				'post_type' => $selected_post_types,
				'post_status' => 'publish',
				'posts_per_page' => 1000,
				'orderby' => 'modified',
				'order' => 'DESC',
				'date_query' => [
					'after' => $last_48_hours,
				],
				'meta_query' => [
					[
						'key' => '_siteseo_robots_index',
						'compare' => 'NOT EXISTS'
					]
				]
			];
		
			$posts = get_posts($args);
		
			foreach($posts as $post){
				$post_date = get_the_date('Y-m-d\TH:i:sP', $post->ID);
				$title = get_the_title($post->ID);
			
				echo "\t".'<url>
				<loc>'.esc_url(urldecode(get_permalink($post->ID))).'</loc>
				<news:news>
					<news:publication>
						<news:name>'.esc_html($publication_name).'</news:name>
						<news:language>' . esc_html(substr(get_locale(), 0, 2)) . '</news:language>
					</news:publication>
					<news:publication_date>'.esc_html($post_date).'</news:publication_date>
					<news:title>'.esc_html($title).'</news:title>';
				
				echo'</news:news>
			</url>';
			}
		}
		echo'</urlset>';
		exit;

	}
}main/redirectmanager.php000064400000015621151545125130011344 0ustar00<?php
/*
* SITESEO
* https://siteseo.io
* (c) SITSEO Team
*/

namespace SiteSEOPro;

if(!defined('ABSPATH')){
	die('HACKING ATTEMPT!');
}

class RedirectManager{
	
	static function handle_404_request(){
		global $siteseo, $wpdb;
		
		// Toggle
		if(empty($siteseo->pro['toggle_state_redirect_monitoring'])){
			return;
		}
		
		// Disable
		if(!empty($siteseo->pro['guess_redirect'])){
			remove_filter('template_redirect', 'redirect_guess_404_permalink');
		}
		
		if(!is_404() || empty($siteseo->pro['enable_404_log'])){
			return;
		}
		
		$log_limit = !empty($siteseo->pro['log_limits']) ? $siteseo->pro['log_limits'] : '';
		$redirect_to = !empty($siteseo->pro['redirect_type']) ? $siteseo->pro['redirect_type'] : '';
		$custom_url = !empty($siteseo->pro['custom_redirect_url']) ? $siteseo->pro['custom_redirect_url'] : '';
		$status_code = !empty($siteseo->pro['status_code']) ? $siteseo->pro['status_code'] : '';
		$disable_ip_logging = !empty($siteseo->pro['disable_ip_logging']) ? $siteseo->pro['disable_ip_logging'] : '';
		$redirect_url = $redirect_to === 'homepage' ? home_url() : $custom_url;
		
		$current_url = sanitize_url($_SERVER['REQUEST_URI']);

		// TODO:: Need to make it more robust to make sure we always get an IP.
		$current_request_ip = $_SERVER['REMOTE_ADDR'];
		$current_request_ip = filter_var($current_request_ip, FILTER_VALIDATE_IP);

		if($current_request_ip){
			switch($disable_ip_logging){
				case 'no_ip_logging':
					$current_request_ip = null;
					break;
				case 'anonymize_the_last_part':
					// TODO:: Handle IPv6
					$ip_parts = explode('.', $current_request_ip);
					$ip_parts[count($ip_parts) - 1] = 'xxx';
					$current_request_ip = implode('.', $ip_parts);
					break;
			}
		} else {
			$current_request_ip = null;
		}
		
		if(!empty($siteseo->pro['enable_404_log'])){
			
			\SiteSEOPro\Settings\Util::maybe_create_404_table();

			$existing_record = $wpdb->get_row($wpdb->prepare("SELECT id, hit_count FROM `".$wpdb->prefix."siteseo_redirect_logs` WHERE url = %s", $current_url));
			
			if($existing_record){
				// hit count increase		
				$wpdb->update($wpdb->prefix.'siteseo_redirect_logs', ['hit_count' => intval($existing_record->hit_count + 1)], ['id' => $existing_record->id], ['%d'], ['%d']);

			} else{
					
					$current_records = $wpdb->get_var("SELECT COUNT(*) FROM `".$wpdb->prefix."siteseo_redirect_logs`");
					
					if($current_records >= $log_limit){	
						$wpdb->query("DELETE FROM `".$wpdb->prefix."siteseo_redirect_logs` ORDER BY `timestamp` ASC LIMIT 1");
					}
					
					$user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? sanitize_text_field($_SERVER['HTTP_USER_AGENT']) : '';
					$referer = isset($_SERVER['HTTP_REFERER']) ? sanitize_url($_SERVER['HTTP_REFERER']) : '';

					$wpdb->insert($wpdb->prefix .'siteseo_redirect_logs', ['url' => $current_url, 'ip_address' => $current_request_ip, 'user_agent' => $user_agent, 'referer' => $referer, 'hit_count' => 1,'timestamp' => current_time('mysql')], ['%s', '%s', '%s', '%s', '%d', '%s']);
					
			}
		}
		
		// redirect here
		if(!empty($redirect_url)){
			wp_redirect($redirect_url, intval($status_code));
			exit;
		}
	   	
	}
	
	static function setup_log_scheduled(){
		global $siteseo;
		
		if(empty($siteseo->pro['email_notify'])){
			return;
		}
		
		if(!wp_next_scheduled('siteseo_send_404_report_email')){
			wp_schedule_event(time(), 'weekly', 'siteseo_send_404_report_email');
		}
	}
	
	static function send_weekly_report(){
		global $siteseo, $wpdb;

		if(empty($siteseo->pro['email_notify'])){
			return;
		}

		$site_name = get_bloginfo('name');
		$site_url = get_bloginfo('url');
		$admin_email = get_option('admin_email');
		$user_email = !empty($siteseo->pro['send_email_to']) ? $siteseo->pro['send_email_to'] : $admin_email;
		$admin_user = get_user_by('email', $admin_email);
		$admin_name = $admin_user ? $admin_user->display_name : 'Administrator';

		if(empty($user_email)){
			return;
		}

		$top_errors = $wpdb->get_results("SELECT url, hit_count, COUNT(*) as count FROM `{$wpdb->prefix}siteseo_redirect_logs` GROUP BY url ORDER BY hit_count DESC LIMIT 10");
		
		$latest_errors = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}siteseo_redirect_logs` ORDER BY `timestamp` DESC LIMIT 10");
		
		$subject = sprintf('404 Error Report for %s - Week of %s', $site_name, date('F j, Y'));
		
		$content = sprintf(
			'<!DOCTYPE html>
			<html>
			<body>
			<div style="font-family: Arial, sans-serif; line-height: 1.6;">
				<p>Hello %s,</p>
				
				<p>Here\'s your weekly 404 error report for %s. We\'ve identified several broken links that may need your attention.</p>
				
				<div style="margin: 25px 0;">
					<h2>Weekly 404 Error Report for %s</h2>
					<p>Below are the most frequent and recent 404 errors detected on your site:</p>
				</div>
				
				<h3>Top 404 Errors</h3>
				<table style="border-collapse: collapse; width: 100%%;">
					<tr style="background-color: #f2f2f2;">
						<th style="border:1px solid #ddd; padding:8px; text-align:left;">URL</th>
						<th style="border:1px solid #ddd; padding:8px; text-align:center; width:200px;">Hit Count</th>
					</tr>',
			esc_html($admin_name),
			esc_html($site_name),
			esc_html($site_name)
		);
	
		foreach($top_errors as $error){
			$content .= sprintf(
				'<tr>
					<td style="border:1px solid #ddd; padding:8px; text-align:left"><a href="%s">%s</a></td>
					<td style="border:1px solid #ddd; padding:8px; text-align:center;">%d</td>
				</tr>',
				esc_url($site_url . $error->url),
				esc_html($error->url),
				intval($error->hit_count)
			);
		}
    
		$content .= '</table>    
			<h3>Latest 404 Errors</h3>
			<table style="border-collapse: collapse; width: 100%;">
			<tr style="background-color: #f2f2f2;">
				<th style="border:1px solid #ddd; padding:8px; text-align:left;">URL</th>
				<th style="border:1px solid #ddd; padding:8px; text-align:center; width:200px;">Timestamp</th>
			</tr>';
    
		foreach($latest_errors as $error){
			$content .= sprintf(
				'<tr>
					<td style="border:1px solid #ddd; padding:8px; text-align:left;"><a href="%s">%s</a></td>
					<td style="border:1px solid #ddd; padding:8px; text-align:center;">%s</td>
				</tr>',
				esc_url($site_url . $error->url),
				esc_html($error->url),
				esc_html(date('F j, Y g:i a', strtotime($error->timestamp)))
			);
		}
		
		$content .= '</table>
				<div style="margin-top:30px; padding-top:20px; border-top: 1px solid #ddd;">
					<p style="margin-top:20px; font-size:12px; color:#666;">
						This report was automatically generated on '.date('F j, Y').'
					</p>
					<p style="font-size:14px; color:#444; margin-top:15px;">
						Powered by <a href="https://siteseo.io" target="_blank" style="color:#163d89;text-decoration:none;"><strong>SiteSEO</strong></a>
					</p>
				</div>
			</body>
		</html>';
    
		// Html
		$headers = array(
			'Content-Type: text/html; charset=UTF-8',
			'From: SiteSEO <'.get_option('admin_email').'>'
		);
		
		// Send email
		return wp_mail($user_email, $subject, $content, $headers);
        
	}

}main/tags.php000064400000026776151545125250007166 0ustar00<?php
/*
* SITESEO
* https://siteseo.io
* (c) SiteSEO Team
*/

namespace SiteSEOPro;

if(!defined('ABSPATH')){
    die('HACKING ATTEMPT!');
}

class Tags{

	static function woocommerce_index_tags($robots){
		global $siteseo;
		
		if(!class_exists('WooCommerce') || empty($siteseo->pro['toggle_state_woocommerce'])){
			return $robots;
		}
		
		if(!empty($siteseo->pro['woocommerce_cart_page_no_index'])){
			if(is_cart() && isset($robots['index'])){
				unset($robots['index']);
				$robots['noindex'] = true;
			}
		}
		
		if(!empty($siteseo->pro['woocommerce_checkout_page_no_index'])){
			if(is_checkout() && isset($robots['index'])){
				unset($robots['index']);
				$robots['noindex'] = true;
			}
		}
		
		if(!empty($siteseo->pro['woocommerce_customer_account_page_no_index'])){
			if(is_account_page() && isset($robots['index'])){
				unset($robots['index']);
				$robots['noindex'] = true;
			}
		}
		
		return array_filter($robots);
	}
	
	// WooCommerce SEO Tags
	static function woocommerce(){
		global $siteseo;
		
		if(!class_exists('WooCommerce') || empty($siteseo->pro['toggle_state_woocommerce'])){
			return;
		}
		
		// WooCommerce Product og price meta
		if(!empty($siteseo->pro['woocommerce_product_og_price'])){
			if(is_product() && function_exists('wc_get_product')){
				$product = wc_get_product(get_the_ID()); 
				if(!empty($product)){
					$product_price = $product->get_price();
					echo '<meta property="product:price:amount" content="' . esc_attr($product_price) . '" />' . "\n";
				}
			}
		}

		// WooCommerce og currency meta
		if(!empty($siteseo->pro['woocommerce_product_og_currency'])){
			if(function_exists('get_woocommerce_currency')){
				$currency = get_woocommerce_currency();
				echo '<meta property="product:price:currency" content="' . esc_attr($currency) . '" />' . "\n";
			}
		}

		// woocommerce generator tag
		if(!empty($siteseo->pro['woocommerce_meta_generator'])){
			remove_action('get_the_generator_html', 'wc_generator_tag', 10, 2);
			remove_action('get_the_generator_xhtml', 'wc_generator_tag', 10, 2);			
		}

		// Remove WooCommerce schema output
		if(!empty($siteseo->pro['woocommerce_schema_output'])){
			add_filter('woocommerce_structured_data_product', '__return_false');

			if(function_exists('WC')){
                remove_action('wp_footer', [WC()->structured_data, 'output_structured_data'], 10);
                remove_action('woocommerce_email_order_details', [WC()->structured_data, 'output_email_structured_data'], 30);
            }
		}

		// Remove wooCommerce Breadcrumbs schema output
		if(!empty($siteseo->pro['woocommerce_schema_breadcrumbs_output'])){
			add_filter('woocommerce_structured_data_breadcrumbs', '__return_false');
		}

    }

	// Easy Digital Downloads SEO tags
	static function easy_digital_downloads(){
		global $siteseo;
		
		if(!class_exists('Easy_Digital_Downloads') || empty($siteseo->pro['toggle_state_easy_digital'])){
			return;
		}

		// OG price meta
		if(!empty($siteseo->pro['edd_product_og_price'])){
			if(function_exists('get_the_ID') && function_exists('edd_get_download_price')){
				$product_id = get_the_ID();
				$price = edd_get_download_price($product_id);
				echo '<meta property="product:price:amount" content="' . esc_attr($price) . '" />' . "\n";
			}
		}

		// OG currency meta
		if(!empty($siteseo->pro['edd_product_og_currency'])){
			if(function_exists('edd_get_currency')){
				$currency = edd_get_currency();
				echo '<meta property="product:price:currency" content="' . esc_attr($currency) . '" />' . "\n";
			}
		}

		// Remove header
		if(!empty($siteseo->pro['edd_meta_generator'])){
			remove_action('wp_head', 'edd_version_in_header');
		}

	}

	// Dublin Core SEO tags
	static function dublin_core(){
		global $siteseo;

		if(empty($siteseo->pro['dublin_core_enable']) || empty($siteseo->pro['toggle_state_dublin_core'])){
			return;
		}

		if(function_exists('siteseo_titles_the_title')){
			$title = siteseo_titles_the_title();
			echo '<meta name="dc.title" content="' . esc_attr($title) . '" />' . "\n";
		}

		$description = get_option('blogdescription');
		if(!empty($description)){
			echo '<meta name="dc.description" content="' . esc_attr($description) . '" />' . "\n";
		}

		$source = htmlspecialchars(urldecode(user_trailingslashit(get_home_url())));
		if(!empty($source)){
			echo '<meta name="dc.source" content="' . esc_attr($source) . '" />' . "\n";
			echo '<meta name="dc.relation" content="' . esc_attr($source) . '" />' . "\n";
		}

		$lang = get_locale();
		if(!empty($lang)){
			echo '<meta name="dc.language" content="' . esc_attr($lang) . '" />' . "\n";
		}

		$subject = get_bloginfo('description');
		if(!empty($subject)){
			echo '<meta name="dc.subject" content="' . esc_attr($subject) . '" />' . "\n";
		}
	}
	
	// local business feature
	static function local_business(){
		global $siteseo;
		
		if(empty($siteseo->pro['toggle_state_local_buz'])){
			return;
		}
		
		$business_name = isset($siteseo->pro['business_type']) ? $siteseo->pro['business_type'] : '';
		$street = isset($siteseo->pro['street_address']) ? $siteseo->pro['street_address'] : '';
		$city = isset($siteseo->pro['city']) ? $siteseo->pro['city'] : '';
		$state = isset($siteseo->pro['state']) ? $siteseo->pro['state'] : '';
		$place_id = isset($siteseo->pro['postal_code']) ? $siteseo->pro['postal_code'] : '';
		$country = isset($siteseo->pro['country']) ? $siteseo->pro['country'] : '';
		$phone = isset($siteseo->pro['telephone']) ? $siteseo->pro['telephone'] : '';
		$price_range = isset($siteseo->pro['price_range']) ? $siteseo->pro['price_range'] : '';
		$latitude = isset($siteseo->pro['latitude']) ? $siteseo->pro['latitude'] : '';
		$longitude = isset($siteseo->pro['longitude']) ? $siteseo->pro['longitude'] : '';

		$output = '<div class="siteseo-local-business" itemscope itemtype="http://schema.org/LocalBusiness">
			<div itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">
			<p><span itemprop="BusinessName">'.esc_attr($business_name).'</span><br>
			<span itemprop="streetAddress">'.esc_attr($street).'</span><br>
			<span itemprop="postalCode">'.esc_attr($place_id).'</span>&nbsp;&nbsp;&nbsp;
			<span itemprop="addressLocality">'.esc_attr($city).'</span><br>
			<span itemprop="addressRegion">'.esc_attr($state).'</span><br />
			<span itemprop="addressCountry">'.esc_attr($country).'</span></p>
			</div>
			<p>Phone: <span itemprop="telephone">'.esc_attr($phone).'</span></p>';

		if(!empty($latitude) && !empty($longitude) && !empty($place_id)){
			$output .= '<a href="https://www.google.com/maps/search/?api=1' . esc_attr($place_id). '&query=' .$latitude. ',' .$longitude. '" title="' . __('View this local business on Google Maps (new window)', 'siteseo-pro') . '" target="_blank">' . __('View on Google Maps', 'siteseo-pro') . '</a><br><br>';
			$output .= '<div itemprop="geo" itemscope itemtype="http://schema.org/GeoCoordinates">
					<meta itemprop="latitude" content="' . esc_attr($latitude) . '" />
					<meta itemprop="longitude" content="' . esc_attr($longitude) . '" />
				</div>';
		}
		
		// Opening hours 
		if(isset($siteseo->pro['opening_hours']) && is_array($siteseo->pro['opening_hours'])){
			$output .= '<div class="siteseo-local-business">
				<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse; width: 100%;">';

			$days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
			
			foreach($days as $key => $day){
				$hours = $siteseo->pro['opening_hours'][$key];
				
				if(!empty($hours['closed'])){
					$output .= '<tr>
					<td style="text-align: center;font-weight: bold;">' . esc_html($day) . '</td>
					<td style="text-align: center;">Closed</td>
					</tr>';
				} else{
					$morning = '';
					$afternoon = '';
					
					if(!empty($hours['open_morning'])){
						$morning = esc_html("{$hours['open_morning_start_hour']}:{$hours['open_morning_start_min']} - {$hours['open_morning_end_hour']}:{$hours['open_morning_end_min']}");
					}
					
					if(!empty($hours['open_afternoon'])){
						$afternoon = esc_html("{$hours['open_afternoon_start_hour']}:{$hours['open_afternoon_start_min']} - {$hours['open_afternoon_end_hour']}:{$hours['open_afternoon_end_min']}");
					}
					
					$output .= '<tr>
							<td style="text-align: center;font-weight: bold;">' . $day . '</td>
							<td style="text-align:center;">'.$morning .'</td>
							<td style="text-align:center;">'. $afternoon .'</td>
						</tr>';
					
				}
			}
			
			$output .= '</table></div>';
		
		}

		return $output;
		
	}
	
	// structured data schema
	static function structured_data(){
		global $siteseo;
		
		if(empty($siteseo->pro['toggle_state_stru_data']) || empty($siteseo->pro['enable_structured_data'])){
			return;
		}
		
		if(!is_front_page() || !is_home()){
			return;
		}
		
		// Data load 
		$organization_logo = !empty($siteseo->pro['structured_data_image_url']) ? $siteseo->pro['structured_data_image_url'] : '';
		$org_email_id = !empty($siteseo->pro['org_email']) ? $siteseo->pro['org_email'] : '';
		$org_phone = !empty($siteseo->pro['org_phone_no']) ? $siteseo->pro['org_phone_no'] : '';
		$org_name = !empty($siteseo->pro['org_name']) ? $siteseo->pro['org_name'] : '';
		$org_legal_name = !empty($siteseo->pro['org_legal']) ? $siteseo->pro['org_legal'] : '';
		$org_establish_date = !empty($siteseo->pro['establish_date']) ? $siteseo->pro['establish_date'] : '';
		$org_no_emp = !empty($siteseo->pro['number_emp']) ? $siteseo->pro['number_emp'] : '';
		$org_vat_id = !empty($siteseo->pro['vat_id']) ? $siteseo->pro['vat_id'] : '';
		$org_tax_id = !empty($siteseo->pro['tax_id']) ? $siteseo->pro['tax_id'] : '';
		$org_iso_code = !empty($siteseo->pro['iso_code']) ? $siteseo->pro['iso_code'] : '';
		$org_lei_code = !empty($siteseo->pro['let_code']) ? $siteseo->pro['let_code'] : '';
		$org_dnus_code = !empty($siteseo->pro['dnus_number']) ? $siteseo->pro['dnus_number'] : '';
		$org_naics = !empty($siteseo->pro['naics_code']) ? $siteseo->pro['naics_code'] : '';
	
		// JSON-LD
		$json_ld = [
			'@context' => 'https://schema.org',
			'@type' => 'Organization',
			'logo' => esc_url($organization_logo)
		];
	
		// Not empty
		if(!empty($org_email_id)) $json_ld['email'] = esc_attr($org_email_id);
		if(!empty($org_legal_name)) $json_ld['legalName'] = esc_attr($org_legal_name);
		if(!empty($org_establish_date)) $json_ld['foundingDate'] = esc_attr($org_establish_date);
		if(!empty($org_no_emp)) $json_ld['numberOfEmployees'] = esc_attr($org_no_emp);
		if(!empty($org_vat_id)) $json_ld['VatID'] = esc_attr($org_vat_id);
		if(!empty($org_tax_id)) $json_ld['taxID'] = esc_attr($org_tax_id);
		if(!empty($org_iso_code)) $json_ld['iso6523Code'] = esc_attr($org_iso_code);
		if(!empty($org_lei_code)) $json_ld['leiCode'] = esc_attr($org_lei_code);
		if(!empty($org_dnus_code)) $json_ld['duns'] = esc_attr($org_dnus_code);
		if(!empty($org_naics)) $json_ld['naics'] = esc_attr($org_naics);

		if(!empty($org_email_id) && !empty($org_phone)){
			$json_ld['contactPoint'] = [
				'@type' => 'ContactPoint',
				'contactType' => 'Customer Support',
				'email' => $org_email_id,
				'telephone' => $org_phone
			];
		}
	
		// JSON-LD script
		echo '<script type="application/ld+json" class="siteseo-schema">';
		echo json_encode($json_ld, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
		echo '</script>';
	}

	static function load_data_local_business($attributes){
		
		$data = \SiteSEOPro\Tags::local_business();
		
		if(is_front_page() && !empty($attributes['displayOnHomepage'])){
			return '<div class="local-business-block">' . $data . '</div>';
		}

		if(!is_front_page() && empty($attributes['displayOnHomepage'])){
			return '<div class="local-business-block">' . $data . '</div>';
		}

		return '';
	}
}main/plugin-update-checker.php000064400000151070151545125330012371 0ustar00<?php
/**
 * Plugin Update Checker Library 3.2
 * http://w-shadow.com/
 * 
 * Copyright 2016 Janis Elsts
 * Released under the MIT license. See license.txt for details.
 */

if ( !class_exists('SiteSEOUpdateChecker_3_2', false) ):

/**
 * A custom plugin update checker. 
 * 
 * @author Janis Elsts
 * @copyright 2016
 * @version 3.2
 * @access public
 */
#[\AllowDynamicProperties]
class SiteSEOUpdateChecker_3_2 {
	public $metadataUrl = ''; //The URL of the plugin's metadata file.
	public $pluginAbsolutePath = ''; //Full path of the main plugin file.
	public $pluginFile = '';  //Plugin filename relative to the plugins directory. Many WP APIs use this to identify plugins.
	public $slug = '';        //Plugin slug.
	public $optionName = '';  //Where to store the update info.
	public $muPluginFile = ''; //For MU plugins, the plugin filename relative to the mu-plugins directory.

	public $debugMode = false; //Set to TRUE to enable error reporting. Errors are raised using trigger_error()
                               //and should be logged to the standard PHP error log.
	public $scheduler;

	protected $upgraderStatus;

	private $debugBarPlugin = null;
	private $cachedInstalledVersion = null;

	private $metadataHost = ''; //The host component of $metadataUrl.

	/**
	 * Class constructor.
	 *
	 * @param string $metadataUrl The URL of the plugin's metadata file.
	 * @param string $pluginFile Fully qualified path to the main plugin file.
	 * @param string $slug The plugin's 'slug'. If not specified, the filename part of $pluginFile sans '.php' will be used as the slug.
	 * @param integer $checkPeriod How often to check for updates (in hours). Defaults to checking every 12 hours. Set to 0 to disable automatic update checks.
	 * @param string $optionName Where to store book-keeping info about update checks. Defaults to 'external_updates-$slug'.
	 * @param string $muPluginFile Optional. The plugin filename relative to the mu-plugins directory.
	 */
	public function __construct($metadataUrl, $pluginFile, $slug = '', $checkPeriod = 12, $optionName = '', $muPluginFile = ''){
		$this->metadataUrl = $metadataUrl;
		$this->pluginAbsolutePath = $pluginFile;
		$this->pluginFile = plugin_basename($this->pluginAbsolutePath);
		$this->muPluginFile = $muPluginFile;
		$this->slug = $slug;
		$this->optionName = $optionName;
		$this->debugMode = (bool)(constant('WP_DEBUG'));

		//If no slug is specified, use the name of the main plugin file as the slug.
		//For example, 'my-cool-plugin/cool-plugin.php' becomes 'cool-plugin'.
		if ( empty($this->slug) ){
			$this->slug = basename($this->pluginFile, '.php');
		}

		//Plugin slugs must be unique.
		$slugCheckFilter = 'puc_is_slug_in_use-' . $this->slug;
		$slugUsedBy = apply_filters($slugCheckFilter, false);
		if ( $slugUsedBy ) {
			$this->triggerError(sprintf(
				'Plugin slug "%s" is already in use by %s. Slugs must be unique.',
				htmlentities($this->slug),
				htmlentities($slugUsedBy)
			), E_USER_ERROR);
		}
		add_filter($slugCheckFilter, array($this, 'getAbsolutePath'));

		
		if ( empty($this->optionName) ){
			$this->optionName = 'external_updates-' . $this->slug;
		}

		//Backwards compatibility: If the plugin is a mu-plugin but no $muPluginFile is specified, assume
		//it's the same as $pluginFile given that it's not in a subdirectory (WP only looks in the base dir).
		if ( (strpbrk($this->pluginFile, '/\\') === false) && $this->isUnknownMuPlugin() ) {
			$this->muPluginFile = $this->pluginFile;
		}

		$this->scheduler = $this->createScheduler($checkPeriod);
		$this->upgraderStatus = new SiteSEO_PucUpgraderStatus_3_2();

		$this->installHooks();
	}

	/**
	 * Create an instance of the scheduler.
	 *
	 * This is implemented as a method to make it possible for plugins to subclass the update checker
	 * and substitute their own scheduler.
	 *
	 * @param int $checkPeriod
	 * @return SiteSEO_PucScheduler_3_2
	 */
	protected function createScheduler($checkPeriod) {
		return new SiteSEO_PucScheduler_3_2($this, $checkPeriod);
	}
	
	/**
	 * Install the hooks required to run periodic update checks and inject update info 
	 * into WP data structures. 
	 * 
	 * @return void
	 */
	protected function installHooks(){
		//Override requests for plugin information
		add_filter('plugins_api', array($this, 'injectInfo'), 20, 3);
		
		//Insert our update info into the update array maintained by WP.
		add_filter('site_transient_update_plugins', array($this,'injectUpdate')); //WP 3.0+
		add_filter('transient_update_plugins', array($this,'injectUpdate')); //WP 2.8+
		add_filter('site_transient_update_plugins', array($this, 'injectTranslationUpdates'));

		add_filter('plugin_row_meta', array($this, 'addCheckForUpdatesLink'), 10, 2);
		add_action('admin_init', array($this, 'handleManualCheck'));
		add_action('all_admin_notices', array($this, 'displayManualCheckResult'));

		//Clear the version number cache when something - anything - is upgraded or WP clears the update cache.
		add_filter('upgrader_post_install', array($this, 'clearCachedVersion'));
		add_action('delete_site_transient_update_plugins', array($this, 'clearCachedVersion'));
		//Clear translation updates when WP clears the update cache.
		//This needs to be done directly because the library doesn't actually remove obsolete plugin updates,
		//it just hides them (see getUpdate()). We can't do that with translations - too much disk I/O.
		add_action('delete_site_transient_update_plugins', array($this, 'clearCachedTranslationUpdates'));

		if ( did_action('plugins_loaded') ) {
			$this->initDebugBarPanel();
		} else {
			add_action('plugins_loaded', array($this, 'initDebugBarPanel'));
		}

		//Rename the update directory to be the same as the existing directory.
		add_filter('upgrader_source_selection', array($this, 'fixDirectoryName'), 10, 3);

		//Enable language support (i18n).
		load_plugin_textdomain('plugin-update-checker', false, plugin_basename(dirname(__FILE__)) . '/languages');

		//Allow HTTP requests to the metadata URL even if it's on a local host.
		$this->metadataHost = @parse_url($this->metadataUrl, PHP_URL_HOST);
		add_filter('http_request_host_is_external', array($this, 'allowMetadataHost'), 10, 2);
	}
	
	/**
	 * Explicitly allow HTTP requests to the metadata URL.
	 *
	 * WordPress has a security feature where the HTTP API will reject all requests that are sent to
	 * another site hosted on the same server as the current site (IP match), a local host, or a local
	 * IP, unless the host exactly matches the current site.
	 *
	 * This feature is opt-in (at least in WP 4.4). Apparently some people enable it.
	 *
	 * That can be a problem when you're developing your plugin and you decide to host the update information
	 * on the same server as your test site. Update requests will mysteriously fail.
	 *
	 * We fix that by adding an exception for the metadata host.
	 *
	 * @param bool $allow
	 * @param string $host
	 * @return bool
	 */
	public function allowMetadataHost($allow, $host) {
		if ( strtolower($host) === strtolower($this->metadataHost) ) {
			return true;
		}
		return $allow;
	}

	/**
	 * Retrieve plugin info from the configured API endpoint.
	 * 
	 * @uses wp_remote_get()
	 * 
	 * @param array $queryArgs Additional query arguments to append to the request. Optional.
	 * @return SiteSEOInfo_3_2
	 */
	public function requestInfo($queryArgs = array()){
		//Query args to append to the URL. Plugins can add their own by using a filter callback (see addQueryArgFilter()).
		$installedVersion = $this->getInstalledVersion();
		$queryArgs['installed_version'] = ($installedVersion !== null) ? $installedVersion : '';
		$queryArgs = apply_filters('puc_request_info_query_args-'.$this->slug, $queryArgs);
		
		//Various options for the wp_remote_get() call. Plugins can filter these, too.
		$options = array(
			'timeout' => 10, //seconds
			'headers' => array(
				'Accept' => 'application/json'
			),
		);
		$options = apply_filters('puc_request_info_options-'.$this->slug, $options);
		
		//The plugin info should be at 'http://your-api.com/url/here/$slug/info.json'
		$url = $this->metadataUrl; 
		if ( !empty($queryArgs) ){
			$url = add_query_arg($queryArgs, $url);
		}
		
		$result = wp_remote_get(
			$url,
			$options
		);

		//Try to parse the response
		$status = $this->validateApiResponse($result);
		$pluginInfo = null;
		if ( !is_wp_error($status) ){
			$pluginInfo = SiteSEOInfo_3_2::fromJson($result['body']);
			if ( $pluginInfo !== null ) {
				$pluginInfo->filename = $this->pluginFile;
				$pluginInfo->slug = $this->slug;
			}
		} else {
			$this->triggerError(
				sprintf('The URL %s does not point to a valid plugin metadata file. ', $url)
					. $status->get_error_message(),
				E_USER_WARNING
			);
		}

		$pluginInfo = apply_filters('puc_request_info_result-'.$this->slug, $pluginInfo, $result);
		return $pluginInfo;
	}

	/**
	 * Check if $result is a successful update API response.
	 *
	 * @param array|WP_Error $result
	 * @return true|WP_Error
	 */
	private function validateApiResponse($result) {
		if ( is_wp_error($result) ) { /** @var WP_Error $result */
			return new WP_Error($result->get_error_code(), 'WP HTTP Error: ' . $result->get_error_message());
		}

		if ( !isset($result['response']['code']) ) {
			return new WP_Error('puc_no_response_code', 'wp_remote_get() returned an unexpected result.');
		}

		if ( $result['response']['code'] !== 200 ) {
			return new WP_Error(
				'puc_unexpected_response_code',
				'HTTP response code is ' . $result['response']['code'] . ' (expected: 200)'
			);
		}

		if ( empty($result['body']) ) {
			return new WP_Error('puc_empty_response', 'The metadata file appears to be empty.');
		}

		return true;
	}

	/**
	 * Retrieve the latest update (if any) from the configured API endpoint.
	 *
	 * @uses SiteSEOUpdateChecker::requestInfo()
	 *
	 * @return SiteSEOUpdate_3_2 An instance of SiteSEOUpdate, or NULL when no updates are available.
	 */
	public function requestUpdate(){
		//For the sake of simplicity, this function just calls requestInfo() 
		//and transforms the result accordingly.
		$pluginInfo = $this->requestInfo(array('checking_for_updates' => '1'));
		if ( $pluginInfo == null ){
			return null;
		}
		$update = SiteSEOUpdate_3_2::fromSiteSEOInfo($pluginInfo);

		//Keep only those translation updates that apply to this site.
		$update->translations = $this->filterApplicableTranslations($update->translations);

		return $update;
	}

	/**
	 * Filter a list of translation updates and return a new list that contains only updates
	 * that apply to the current site.
	 *
	 * @param array $translations
	 * @return array
	 */
	private function filterApplicableTranslations($translations) {
		$languages = array_flip(array_values(get_available_languages()));
		$installedTranslations = wp_get_installed_translations('plugins');
		if ( isset($installedTranslations[$this->slug]) ) {
			$installedTranslations = $installedTranslations[$this->slug];
		} else {
			$installedTranslations = array();
		}

		$applicableTranslations = array();
		foreach($translations as $translation) {
			//Does it match one of the available core languages?
			$isApplicable = array_key_exists($translation->language, $languages);
			//Is it more recent than an already-installed translation?
			if ( isset($installedTranslations[$translation->language]) ) {
				$updateTimestamp = strtotime($translation->updated);
				$installedTimestamp = strtotime($installedTranslations[$translation->language]['PO-Revision-Date']);
				$isApplicable = $updateTimestamp > $installedTimestamp;
			}

			if ( $isApplicable ) {
				$applicableTranslations[] = $translation;
			}
		}

		return $applicableTranslations;
	}
	
	/**
	 * Get the currently installed version of the plugin.
	 * 
	 * @return string Version number.
	 */
	public function getInstalledVersion(){
		if ( isset($this->cachedInstalledVersion) ) {
			return $this->cachedInstalledVersion;
		}

		$pluginHeader = $this->getPluginHeader();
		if ( isset($pluginHeader['Version']) ) {
			$this->cachedInstalledVersion = $pluginHeader['Version'];
			return $pluginHeader['Version'];
		} else {
			//This can happen if the filename points to something that is not a plugin.
			$this->triggerError(
				sprintf(
					"Can't to read the Version header for '%s'. The filename is incorrect or is not a plugin.",
					$this->pluginFile
				),
				E_USER_WARNING
			);
			return null;
		}
	}

	/**
	 * Get plugin's metadata from its file header.
	 *
	 * @return array
	 */
	protected function getPluginHeader() {
		if ( !is_file($this->pluginAbsolutePath) ) {
			//This can happen if the plugin filename is wrong.
			$this->triggerError(
				sprintf(
					"Can't to read the plugin header for '%s'. The file does not exist.",
					$this->pluginFile
				),
				E_USER_WARNING
			);
			return array();
		}

		if ( !function_exists('get_plugin_data') ){
			/** @noinspection PhpIncludeInspection */
			require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
		}
		return get_plugin_data($this->pluginAbsolutePath, false, false);
	}

	/**
	 * Check for plugin updates.
	 * The results are stored in the DB option specified in $optionName.
	 *
	 * @return SiteSEOUpdate_3_2|null
	 */
	public function checkForUpdates(){
		$installedVersion = $this->getInstalledVersion();
		//Fail silently if we can't find the plugin or read its header.
		if ( $installedVersion === null ) {
			$this->triggerError(
				sprintf('Skipping update check for %s - installed version unknown.', $this->pluginFile),
				E_USER_WARNING
			);
			return null;
		}

		$state = $this->getUpdateState();
		if ( empty($state) ){
			$state = new stdClass;
			$state->lastCheck = 0;
			$state->checkedVersion = '';
			$state->update = null;
		}
		
		$state->lastCheck = time();
		$state->checkedVersion = $installedVersion;
		$this->setUpdateState($state); //Save before checking in case something goes wrong 
		
		$state->update = $this->requestUpdate();
		$this->setUpdateState($state);

		return $this->getUpdate();
	}
	
	/**
	 * Load the update checker state from the DB.
	 *  
	 * @return stdClass|null
	 */
	public function getUpdateState() {
		$state = get_site_option($this->optionName, null);
		if ( empty($state) || !is_object($state)) {
			$state = null;
		}

		if ( isset($state, $state->update) && is_object($state->update) ) {
			$state->update = SiteSEOUpdate_3_2::fromObject($state->update);
		}
		return $state;
	}
	
	
	/**
	 * Persist the update checker state to the DB.
	 * 
	 * @param StdClass $state
	 * @return void
	 */
	private function setUpdateState($state) {
		if ( isset($state->update) && is_object($state->update) && method_exists($state->update, 'toStdClass') ) {
			$update = $state->update; /** @var SiteSEOUpdate_3_2 $update */
			$state->update = $update->toStdClass();
		}
		update_site_option($this->optionName, $state);
	}

	/**
	 * Reset update checker state - i.e. last check time, cached update data and so on.
	 *
	 * Call this when your plugin is being uninstalled, or if you want to
	 * clear the update cache.
	 */
	public function resetUpdateState() {
		delete_site_option($this->optionName);
	}
	
	/**
	 * Intercept plugins_api() calls that request information about our plugin and 
	 * use the configured API endpoint to satisfy them. 
	 * 
	 * @see plugins_api()
	 * 
	 * @param mixed $result
	 * @param string $action
	 * @param array|object $args
	 * @return mixed
	 */
	public function injectInfo($result, $action = null, $args = null){
    	$relevant = ($action == 'plugin_information') && isset($args->slug) && (
			($args->slug == $this->slug) || ($args->slug == dirname($this->pluginFile))
		);
		if ( !$relevant ) {
			return $result;
		}
		
		$pluginInfo = $this->requestInfo();
		$pluginInfo = apply_filters('puc_pre_inject_info-' . $this->slug, $pluginInfo);
		if ( $pluginInfo ) {
			return $pluginInfo->toWpFormat();
		}
				
		return $result;
	}
	
	/**
	 * Insert the latest update (if any) into the update list maintained by WP.
	 * 
	 * @param StdClass $updates Update list.
	 * @return StdClass Modified update list.
	 */
	public function injectUpdate($updates){
		//Is there an update to insert?
		$update = $this->getUpdate();

		//No update notifications for mu-plugins unless explicitly enabled. The MU plugin file
		//is usually different from the main plugin file so the update wouldn't show up properly anyway.
		if ( $this->isUnknownMuPlugin() ) {
			$update = null;
		}

		if ( !empty($update) ) {
			//Let plugins filter the update info before it's passed on to WordPress.
			$update = apply_filters('puc_pre_inject_update-' . $this->slug, $update);
			$updates = $this->addUpdateToList($updates, $update);
		} else {
			//Clean up any stale update info.
			$updates = $this->removeUpdateFromList($updates);
		}

		return $updates;
	}

	/**
	 * @param StdClass|null $updates
	 * @param SiteSEOUpdate_3_2 $updateToAdd
	 * @return StdClass
	 */
	private function addUpdateToList($updates, $updateToAdd) {
		if ( !is_object($updates) ) {
			$updates = new stdClass();
			$updates->response = array();
		}

		$wpUpdate = $updateToAdd->toWpFormat();
		$pluginFile = $this->pluginFile;

		if ( $this->isMuPlugin() ) {
			//WP does not support automatic update installation for mu-plugins, but we can still display a notice.
			$wpUpdate->package = null;
			$pluginFile = $this->muPluginFile;
		}
		$updates->response[$pluginFile] = $wpUpdate;
		return $updates;
	}

	/**
	 * @param stdClass|null $updates
	 * @return stdClass|null
	 */
	private function removeUpdateFromList($updates) {
		if ( isset($updates, $updates->response) ) {
			unset($updates->response[$this->pluginFile]);
			if ( !empty($this->muPluginFile) ) {
				unset($updates->response[$this->muPluginFile]);
			}
		}
		return $updates;
	}

	/**
	 * Insert translation updates into the list maintained by WordPress.
	 *
	 * @param stdClass $updates
	 * @return stdClass
	 */
	public function injectTranslationUpdates($updates) {
		$translationUpdates = $this->getTranslationUpdates();
		if ( empty($translationUpdates) ) {
			return $updates;
		}

		//Being defensive.
		if ( !is_object($updates) ) {
			$updates = new stdClass();
		}
		if ( !isset($updates->translations) ) {
			$updates->translations = array();
		}

		//In case there's a name collision with a plugin hosted on wordpress.org,
		//remove any preexisting updates that match our plugin.
		$translationType = 'plugin';
		$filteredTranslations = array();
		foreach($updates->translations as $translation) {
			if ( ($translation['type'] === $translationType) && ($translation['slug'] === $this->slug) ) {
				continue;
			}
			$filteredTranslations[] = $translation;
		}
		$updates->translations = $filteredTranslations;

		//Add our updates to the list.
		foreach($translationUpdates as $update) {
			$convertedUpdate = array_merge(
				array(
					'type' => $translationType,
					'slug' => $this->slug,
					'autoupdate' => 0,
					//AFAICT, WordPress doesn't actually use the "version" field for anything.
					//But lets make sure it's there, just in case.
					'version' => isset($update->version) ? $update->version : ('1.' . strtotime($update->updated)),
				),
				(array)$update
			);

			$updates->translations[] = $convertedUpdate;
		}

		return $updates;
	}

	/**
	 * Rename the update directory to match the existing plugin directory.
	 *
	 * When WordPress installs a plugin or theme update, it assumes that the ZIP file will contain
	 * exactly one directory, and that the directory name will be the same as the directory where
	 * the plugin/theme is currently installed.
	 *
	 * GitHub and other repositories provide ZIP downloads, but they often use directory names like
	 * "project-branch" or "project-tag-hash". We need to change the name to the actual plugin folder.
	 *
	 * This is a hook callback. Don't call it from a plugin.
	 *
	 * @param string $source The directory to copy to /wp-content/plugins. Usually a subdirectory of $remoteSource.
	 * @param string $remoteSource WordPress has extracted the update to this directory.
	 * @param WP_Upgrader $upgrader
	 * @return string|WP_Error
	 */
	public function fixDirectoryName($source, $remoteSource, $upgrader) {
		global $wp_filesystem; /** @var WP_Filesystem_Base $wp_filesystem */

		//Basic sanity checks.
		if ( !isset($source, $remoteSource, $upgrader, $upgrader->skin, $wp_filesystem) ) {
			return $source;
		}

		//If WordPress is upgrading anything other than our plugin, leave the directory name unchanged.
		if ( !$this->isPluginBeingUpgraded($upgrader) ) {
			return $source;
		}

		//Rename the source to match the existing plugin directory.
		$pluginDirectoryName = dirname($this->pluginFile);
		if ( $pluginDirectoryName === '.' ) {
			return $source;
		}
		$correctedSource = trailingslashit($remoteSource) . $pluginDirectoryName . '/';
		if ( $source !== $correctedSource ) {
			//The update archive should contain a single directory that contains the rest of plugin files. Otherwise,
			//WordPress will try to copy the entire working directory ($source == $remoteSource). We can't rename
			//$remoteSource because that would break WordPress code that cleans up temporary files after update.
			if ( $this->isBadDirectoryStructure($remoteSource) ) {
				return new WP_Error(
					'puc-incorrect-directory-structure',
					sprintf(
						'The directory structure of the update is incorrect. All plugin files should be inside ' .
						'a directory named <span class="code">%s</span>, not at the root of the ZIP file.',
						htmlentities($this->slug)
					)
				);
			}

			/** @var WP_Upgrader_Skin $upgrader->skin */
			$upgrader->skin->feedback(sprintf(
				'Renaming %s to %s&#8230;',
				'<span class="code">' . basename($source) . '</span>',
				'<span class="code">' . $pluginDirectoryName . '</span>'
			));

			if ( $wp_filesystem->move($source, $correctedSource, true) ) {
				$upgrader->skin->feedback('Plugin directory successfully renamed.');
				return $correctedSource;
			} else {
				return new WP_Error(
					'puc-rename-failed',
					'Unable to rename the update to match the existing plugin directory.'
				);
			}
		}

		return $source;
	}

	/**
	 * Check for incorrect update directory structure. An update must contain a single directory,
	 * all other files should be inside that directory.
	 *
	 * @param string $remoteSource Directory path.
	 * @return bool
	 */
	private function isBadDirectoryStructure($remoteSource) {
		global $wp_filesystem; /** @var WP_Filesystem_Base $wp_filesystem */

		$sourceFiles = $wp_filesystem->dirlist($remoteSource);
		if ( is_array($sourceFiles) ) {
			$sourceFiles = array_keys($sourceFiles);
			$firstFilePath = trailingslashit($remoteSource) . $sourceFiles[0];
			return (count($sourceFiles) > 1) || (!$wp_filesystem->is_dir($firstFilePath));
		}

		//Assume it's fine.
		return false;
	}

	/**
	 * Is there and update being installed RIGHT NOW, for this specific plugin?
	 *
	 * @param WP_Upgrader|null $upgrader The upgrader that's performing the current update.
	 * @return bool
	 */
	public function isPluginBeingUpgraded($upgrader = null) {
		return $this->upgraderStatus->isPluginBeingUpgraded($this->pluginFile, $upgrader);
	}

	/**
	 * Get the details of the currently available update, if any.
	 *
	 * If no updates are available, or if the last known update version is below or equal
	 * to the currently installed version, this method will return NULL.
	 *
	 * Uses cached update data. To retrieve update information straight from
	 * the metadata URL, call requestUpdate() instead.
	 *
	 * @return SiteSEOUpdate_3_2|null
	 */
	public function getUpdate() {
		$state = $this->getUpdateState(); /** @var StdClass $state */

		//Is there an update available?
		if ( isset($state, $state->update) ) {
			$update = $state->update;
			//Check if the update is actually newer than the currently installed version.
			$installedVersion = $this->getInstalledVersion();
			if ( ($installedVersion !== null) && version_compare($update->version, $installedVersion, '>') ){
				$update->filename = $this->pluginFile;
				return $update;
			}
		}
		return null;
	}

	/**
	 * Get a list of available translation updates.
	 *
	 * This method will return an empty array if there are no updates.
	 * Uses cached update data.
	 *
	 * @return array
	 */
	public function getTranslationUpdates() {
		$state = $this->getUpdateState();
		if ( isset($state, $state->update, $state->update->translations) ) {
			return $state->update->translations;
		}
		return array();
	}

	/**
	 * Remove all cached translation updates.
	 *
	 * @see wp_clean_update_cache
	 */
	public function clearCachedTranslationUpdates() {
		$state = $this->getUpdateState();
		if ( isset($state, $state->update, $state->update->translations) ) {
			$state->update->translations = array();
			$this->setUpdateState($state);
		}
	}

	/**
	 * Add a "Check for updates" link to the plugin row in the "Plugins" page. By default,
	 * the new link will appear after the "Visit plugin site" link.
	 *
	 * You can change the link text by using the "puc_manual_check_link-$slug" filter.
	 * Returning an empty string from the filter will disable the link.
	 *
	 * @param array $pluginMeta Array of meta links.
	 * @param string $pluginFile
	 * @return array
	 */
	public function addCheckForUpdatesLink($pluginMeta, $pluginFile) {
		$isRelevant = ($pluginFile == $this->pluginFile)
		              || (!empty($this->muPluginFile) && $pluginFile == $this->muPluginFile);

		if ( $isRelevant && current_user_can('update_plugins') ) {
			$linkUrl = wp_nonce_url(
				add_query_arg(
					array(
						'puc_check_for_updates' => 1,
						'puc_slug' => $this->slug,
					),
					self_admin_url('plugins.php')
				),
				'puc_check_for_updates'
			);

			$linkText = apply_filters('puc_manual_check_link-' . $this->slug, __('Check for updates', 'plugin-update-checker'));
			if ( !empty($linkText) ) {
				$final_link = sprintf('<a href="%s">%s</a>', esc_attr($linkUrl), $linkText);
				$pluginMeta[] = apply_filters('puc_manual_final_check_link-' . $this->slug, $final_link);
			}
		}
		return $pluginMeta;
	}

	/**
	 * Check for updates when the user clicks the "Check for updates" link.
	 * @see self::addCheckForUpdatesLink()
	 *
	 * @return void
	 */
	public function handleManualCheck() {
		$shouldCheck =
			   isset($_GET['puc_check_for_updates'], $_GET['puc_slug'])
			&& $_GET['puc_slug'] == $this->slug
			&& current_user_can('update_plugins')
			&& check_admin_referer('puc_check_for_updates');

		if ( $shouldCheck ) {
			$update = $this->checkForUpdates();
			$status = ($update === null) ? 'no_update' : 'update_available';
			wp_redirect(add_query_arg(
				array(
					'puc_update_check_result' => $status,
					'puc_slug' => $this->slug,
				),
				self_admin_url('plugins.php')
			));
		}
	}

	/**
	 * Display the results of a manual update check.
	 * @see self::handleManualCheck()
	 *
	 * You can change the result message by using the "puc_manual_check_message-$slug" filter.
	 */
	public function displayManualCheckResult() {
		if ( isset($_GET['puc_update_check_result'], $_GET['puc_slug']) && ($_GET['puc_slug'] == $this->slug) ) {
			$status = strval($_GET['puc_update_check_result']);
			if ( $status == 'no_update' ) {
				$message = __('This plugin is up to date.', 'plugin-update-checker');
			} else if ( $status == 'update_available' ) {
				$message = __('A new version of this plugin is available.', 'plugin-update-checker');
			} else {
				$message = sprintf(__('Unknown update checker status "%s"', 'plugin-update-checker'), htmlentities($status));
			}
			printf(
				'<div class="updated notice is-dismissible"><p>%s</p></div>',
				apply_filters('puc_manual_check_message-' . $this->slug, $message, $status)
			);
		}
	}

	/**
	 * Check if the plugin file is inside the mu-plugins directory.
	 *
	 * @return bool
	 */
	protected function isMuPlugin() {
		static $cachedResult = null;

		if ( $cachedResult === null ) {
			//Convert both paths to the canonical form before comparison.
			$muPluginDir = realpath(WPMU_PLUGIN_DIR);
			$pluginPath  = realpath($this->pluginAbsolutePath);
			
			if(!empty($muPluginDir)){
				$cachedResult = (strpos($pluginPath, $muPluginDir) === 0);
			}else{
				$cachedResult = false;
			}
		}

		return $cachedResult;
	}

	/**
	 * MU plugins are partially supported, but only when we know which file in mu-plugins
	 * corresponds to this plugin.
	 *
	 * @return bool
	 */
	protected function isUnknownMuPlugin() {
		return empty($this->muPluginFile) && $this->isMuPlugin();
	}

	/**
	 * Clear the cached plugin version. This method can be set up as a filter (hook) and will
	 * return the filter argument unmodified.
	 *
	 * @param mixed $filterArgument
	 * @return mixed
	 */
	public function clearCachedVersion($filterArgument = null) {
		$this->cachedInstalledVersion = null;
		return $filterArgument;
	}

	/**
	 * Get absolute path to the main plugin file.
	 *
	 * @return string
	 */
	public function getAbsolutePath() {
		return $this->pluginAbsolutePath;
	}

	/**
	 * Register a callback for filtering query arguments. 
	 * 
	 * The callback function should take one argument - an associative array of query arguments.
	 * It should return a modified array of query arguments.
	 * 
	 * @uses add_filter() This method is a convenience wrapper for add_filter().
	 * 
	 * @param callable $callback
	 * @return void
	 */
	public function addQueryArgFilter($callback){
		add_filter('puc_request_info_query_args-'.$this->slug, $callback);
	}
	
	/**
	 * Register a callback for filtering arguments passed to wp_remote_get().
	 * 
	 * The callback function should take one argument - an associative array of arguments -
	 * and return a modified array or arguments. See the WP documentation on wp_remote_get()
	 * for details on what arguments are available and how they work. 
	 * 
	 * @uses add_filter() This method is a convenience wrapper for add_filter().
	 * 
	 * @param callable $callback
	 * @return void
	 */
	public function addHttpRequestArgFilter($callback){
		add_filter('puc_request_info_options-'.$this->slug, $callback);
	}
	
	/**
	 * Register a callback for filtering the plugin info retrieved from the external API.
	 * 
	 * The callback function should take two arguments. If the plugin info was retrieved 
	 * successfully, the first argument passed will be an instance of  SiteSEOInfo. Otherwise, 
	 * it will be NULL. The second argument will be the corresponding return value of 
	 * wp_remote_get (see WP docs for details).
	 *  
	 * The callback function should return a new or modified instance of SiteSEOInfo or NULL.
	 * 
	 * @uses add_filter() This method is a convenience wrapper for add_filter().
	 * 
	 * @param callable $callback
	 * @return void
	 */
	public function addResultFilter($callback){
		add_filter('puc_request_info_result-'.$this->slug, $callback, 10, 2);
	}

	/**
	 * Register a callback for one of the update checker filters.
	 *
	 * Identical to add_filter(), except it automatically adds the "puc_" prefix
	 * and the "-$plugin_slug" suffix to the filter name. For example, "request_info_result"
	 * becomes "puc_request_info_result-your_plugin_slug".
	 *
	 * @param string $tag
	 * @param callable $callback
	 * @param int $priority
	 * @param int $acceptedArgs
	 */
	public function addFilter($tag, $callback, $priority = 10, $acceptedArgs = 1) {
		add_filter('puc_' . $tag . '-' . $this->slug, $callback, $priority, $acceptedArgs);
	}

	/**
	 * Initialize the update checker Debug Bar plugin/add-on thingy.
	 */
	public function initDebugBarPanel() {
		$debugBarPlugin = dirname(__FILE__) . '/debug-bar-plugin.php';
		if ( class_exists('Debug_Bar', false) && file_exists($debugBarPlugin) ) {
			/** @noinspection PhpIncludeInspection */
			require_once $debugBarPlugin;
			$this->debugBarPlugin = new SiteSEO_PucDebugBarPlugin_3_2($this);
		}
	}

	/**
	 * Trigger a PHP error, but only when $debugMode is enabled.
	 *
	 * @param string $message
	 * @param int $errorType
	 */
	protected function triggerError($message, $errorType) {
		if ( $this->debugMode ) {
			trigger_error($message, $errorType);
		}
	}
}

endif;

if ( !class_exists('SiteSEOInfo_3_2', false) ):

/**
 * A container class for holding and transforming various plugin metadata.
 * 
 * @author Janis Elsts
 * @copyright 2016
 * @version 3.2
 * @access public
 */
#[\AllowDynamicProperties]
class SiteSEOInfo_3_2 {
	//Most fields map directly to the contents of the plugin's info.json file.
	//See the relevant docs for a description of their meaning.  
	public $name;
	public $slug;
	public $version;
	public $homepage;
	public $sections = array();
	public $banners;
	public $translations = array();
	public $download_url;

	public $author;
	public $author_homepage;
	
	public $requires;
	public $tested;
	public $upgrade_notice;
	
	public $rating;
	public $num_ratings;
	public $downloaded;
	public $active_installs;
	public $last_updated;
	
	public $id = 0; //The native WP.org API returns numeric plugin IDs, but they're not used for anything.

	public $filename; //Plugin filename relative to the plugins directory.
		
	/**
	 * Create a new instance of SiteSEOInfo from JSON-encoded plugin info 
	 * returned by an external update API.
	 * 
	 * @param string $json Valid JSON string representing plugin info.
	 * @return SiteSEOInfo_3_2|null New instance of SiteSEOInfo, or NULL on error.
	 */
	public static function fromJson($json){
		/** @var StdClass $apiResponse */
		$apiResponse = json_decode($json);
		if ( empty($apiResponse) || !is_object($apiResponse) ){
			trigger_error(
				"Failed to parse plugin metadata. Try validating your .json file with http://jsonlint.com/",
				E_USER_NOTICE
			);
			return null;
		}
		
		$valid = self::validateMetadata($apiResponse);
		if ( is_wp_error($valid) ){
			trigger_error($valid->get_error_message(), E_USER_NOTICE);
			return null;
		}
		
		$info = new self();
		foreach(get_object_vars($apiResponse) as $key => $value){
			$info->$key = $value;
		}

		//json_decode decodes assoc. arrays as objects. We want it as an array.
		$info->sections = (array)$info->sections;
		
		return $info;		
	}

	/**
	 * Very, very basic validation.
	 *
	 * @param StdClass $apiResponse
	 * @return bool|WP_Error
	 */
	protected static function validateMetadata($apiResponse) {
		if (
			!isset($apiResponse->name, $apiResponse->version)
			|| empty($apiResponse->name)
			|| empty($apiResponse->version)
		) {
			return new WP_Error(
				'puc-invalid-metadata',
				"The plugin metadata file does not contain the required 'name' and/or 'version' keys."
			);
		}
		return true;
	}

	
	/**
	 * Transform plugin info into the format used by the native WordPress.org API
	 * 
	 * @return object
	 */
	public function toWpFormat(){
		$info = new stdClass;
		
		//The custom update API is built so that many fields have the same name and format
		//as those returned by the native WordPress.org API. These can be assigned directly. 
		$sameFormat = array(
			'name', 'slug', 'version', 'requires', 'tested', 'rating', 'upgrade_notice',
			'num_ratings', 'downloaded', 'active_installs', 'homepage', 'last_updated',
		);
		foreach($sameFormat as $field){
			if ( isset($this->$field) ) {
				$info->$field = $this->$field;
			} else {
				$info->$field = null;
			}
		}

		//Other fields need to be renamed and/or transformed.
		$info->download_link = $this->download_url;
		$info->author = $this->getFormattedAuthor();
		$info->sections = array_merge(array('description' => ''), $this->sections);

		if ( !empty($this->banners) ) {
			//WP expects an array with two keys: "high" and "low". Both are optional.
			//Docs: https://wordpress.org/plugins/about/faq/#banners
			$info->banners = is_object($this->banners) ? get_object_vars($this->banners) : $this->banners;
			$info->banners = array_intersect_key($info->banners, array('high' => true, 'low' => true));
		}

		return $info;
	}

	protected function getFormattedAuthor() {
		if ( !empty($this->author_homepage) ){
			return sprintf('<a href="%s">%s</a>', $this->author_homepage, $this->author);
		}
		return $this->author;
	}
}
	
endif;

if ( !class_exists('SiteSEOUpdate_3_2', false) ):

/**
 * A simple container class for holding information about an available update.
 * 
 * @author Janis Elsts
 * @copyright 2016
 * @version 3.2
 * @access public
 */
#[\AllowDynamicProperties]
class SiteSEOUpdate_3_2 {
	public $id = 0;
	public $slug;
	public $version;
	public $homepage;
	public $download_url;
	public $upgrade_notice;
	public $tested;
	public $translations = array();
	public $filename; //Plugin filename relative to the plugins directory.

	private static $fields = array(
		'id', 'slug', 'version', 'homepage', 'tested',
		'download_url', 'upgrade_notice', 'filename',
		'translations'
	);
	
	/**
	 * Create a new instance of SiteSEOUpdate from its JSON-encoded representation.
	 * 
	 * @param string $json
	 * @return SiteSEOUpdate_3_2|null
	 */
	public static function fromJson($json){
		//Since update-related information is simply a subset of the full plugin info,
		//we can parse the update JSON as if it was a plugin info string, then copy over
		//the parts that we care about.
		$pluginInfo = SiteSEOInfo_3_2::fromJson($json);
		if ( $pluginInfo != null ) {
			return self::fromSiteSEOInfo($pluginInfo);
		} else {
			return null;
		}
	}

	/**
	 * Create a new instance of SiteSEOUpdate based on an instance of SiteSEOInfo.
	 * Basically, this just copies a subset of fields from one object to another.
	 * 
	 * @param SiteSEOInfo_3_2 $info
	 * @return SiteSEOUpdate_3_2
	 */
	public static function fromSiteSEOInfo($info){
		return self::fromObject($info);
	}
	
	/**
	 * Create a new instance of SiteSEOUpdate by copying the necessary fields from 
	 * another object.
	 *  
	 * @param StdClass|SiteSEOInfo_3_2|SiteSEOUpdate_3_2 $object The source object.
	 * @return SiteSEOUpdate_3_2 The new copy.
	 */
	public static function fromObject($object) {
		$update = new self();
		$fields = self::$fields;
		if ( !empty($object->slug) ) {
			$fields = apply_filters('puc_retain_fields-' . $object->slug, $fields);
		}
		foreach($fields as $field){
			if (property_exists($object, $field)) {
				$update->$field = $object->$field;
			}
		}
		return $update;
	}
	
	/**
	 * Create an instance of StdClass that can later be converted back to 
	 * a SiteSEOUpdate. Useful for serialization and caching, as it avoids
	 * the "incomplete object" problem if the cached value is loaded before
	 * this class.
	 * 
	 * @return StdClass
	 */
	public function toStdClass() {
		$object = new stdClass();
		$fields = self::$fields;
		if ( !empty($this->slug) ) {
			$fields = apply_filters('puc_retain_fields-' . $this->slug, $fields);
		}
		foreach($fields as $field){
			if (property_exists($this, $field)) {
				$object->$field = $this->$field;
			}
		}
		return $object;
	}
	
	
	/**
	 * Transform the update into the format used by WordPress native plugin API.
	 * 
	 * @return object
	 */
	public function toWpFormat(){
		$update = new stdClass;

		$update->id = $this->id;
		$update->slug = $this->slug;
		$update->new_version = $this->version;
		$update->url = $this->homepage;
		$update->package = $this->download_url;
		$update->tested = $this->tested;
		$update->plugin = $this->filename;

		if ( !empty($this->upgrade_notice) ){
			$update->upgrade_notice = $this->upgrade_notice;
		}
		
		return $update;
	}
}
	
endif;

if ( !class_exists('SiteSEO_PucScheduler_3_2', false) ):

/**
 * The scheduler decides when and how often to check for updates.
 * It calls @see SiteSEOUpdateChecker::checkForUpdates() to perform the actual checks.
 *
 * @version 3.2
 */
class SiteSEO_PucScheduler_3_2 {
	public $checkPeriod = 12; //How often to check for updates (in hours).
	public $throttleRedundantChecks = false; //Check less often if we already know that an update is available.
	public $throttledCheckPeriod = 72;

	/**
	 * @var SiteSEOUpdateChecker_3_2
	 */
	protected $updateChecker;

	private $cronHook = null;

	/**
	 * Scheduler constructor.
	 *
	 * @param SiteSEOUpdateChecker_3_2 $updateChecker
	 * @param int $checkPeriod How often to check for updates (in hours).
	 */
	public function __construct($updateChecker, $checkPeriod) {
		$this->updateChecker = $updateChecker;
		$this->checkPeriod = $checkPeriod;

		//Set up the periodic update checks
		$this->cronHook = 'check_plugin_updates-' . $this->updateChecker->slug;
		if ( $this->checkPeriod > 0 ){

			//Trigger the check via Cron.
			//Try to use one of the default schedules if possible as it's less likely to conflict
			//with other plugins and their custom schedules.
			$defaultSchedules = array(
				1  => 'hourly',
				12 => 'twicedaily',
				24 => 'daily',
			);
			if ( array_key_exists($this->checkPeriod, $defaultSchedules) ) {
				$scheduleName = $defaultSchedules[$this->checkPeriod];
			} else {
				//Use a custom cron schedule.
				$scheduleName = 'every' . $this->checkPeriod . 'hours';
				add_filter('cron_schedules', array($this, '_addCustomSchedule'));
			}

			if ( !wp_next_scheduled($this->cronHook) && !defined('WP_INSTALLING') ) {
				wp_schedule_event(time(), $scheduleName, $this->cronHook);
			}
			add_action($this->cronHook, array($this, 'maybeCheckForUpdates'));

			register_deactivation_hook($this->updateChecker->pluginFile, array($this, '_removeUpdaterCron'));

			//In case Cron is disabled or unreliable, we also manually trigger
			//the periodic checks while the user is browsing the Dashboard.
			add_action( 'admin_init', array($this, 'maybeCheckForUpdates') );

			//Like WordPress itself, we check more often on certain pages.
			/** @see wp_update_plugins */
			add_action('load-update-core.php', array($this, 'maybeCheckForUpdates'));
			add_action('load-plugins.php', array($this, 'maybeCheckForUpdates'));
			add_action('load-update.php', array($this, 'maybeCheckForUpdates'));
			//This hook fires after a bulk update is complete.
			add_action('upgrader_process_complete', array($this, 'maybeCheckForUpdates'), 11, 0);

		} else {
			//Periodic checks are disabled.
			wp_clear_scheduled_hook($this->cronHook);
		}
	}

	/**
	 * Check for updates if the configured check interval has already elapsed.
	 * Will use a shorter check interval on certain admin pages like "Dashboard -> Updates" or when doing cron.
	 *
	 * You can override the default behaviour by using the "puc_check_now-$slug" filter.
	 * The filter callback will be passed three parameters:
	 *     - Current decision. TRUE = check updates now, FALSE = don't check now.
	 *     - Last check time as a Unix timestamp.
	 *     - Configured check period in hours.
	 * Return TRUE to check for updates immediately, or FALSE to cancel.
	 *
	 * This method is declared public because it's a hook callback. Calling it directly is not recommended.
	 */
	public function maybeCheckForUpdates(){
		if ( empty($this->checkPeriod) ){
			return;
		}

		$state = $this->updateChecker->getUpdateState();
		$shouldCheck =
			empty($state) ||
			!isset($state->lastCheck) ||
			( (time() - $state->lastCheck) >= $this->getEffectiveCheckPeriod() );

		//Let plugin authors substitute their own algorithm.
		$shouldCheck = apply_filters(
			'puc_check_now-' . $this->updateChecker->slug,
			$shouldCheck,
			(!empty($state) && isset($state->lastCheck)) ? $state->lastCheck : 0,
			$this->checkPeriod
		);

		if ( $shouldCheck ) {
			$this->updateChecker->checkForUpdates();
		}
	}

	/**
	 * Calculate the actual check period based on the current status and environment.
	 *
	 * @return int Check period in seconds.
	 */
	protected function getEffectiveCheckPeriod() {
		$currentFilter = current_filter();
		if ( in_array($currentFilter, array('load-update-core.php', 'upgrader_process_complete')) ) {
			//Check more often when the user visits "Dashboard -> Updates" or does a bulk update.
			$period = 60;
		} else if ( in_array($currentFilter, array('load-plugins.php', 'load-update.php')) ) {
			//Also check more often on the "Plugins" page and /wp-admin/update.php.
			$period = 3600;
		} else if ( $this->throttleRedundantChecks && ($this->updateChecker->getUpdate() !== null) ) {
			//Check less frequently if it's already known that an update is available.
			$period = $this->throttledCheckPeriod * 3600;
		} else if ( defined('DOING_CRON') && constant('DOING_CRON') ) {
			//WordPress cron schedules are not exact, so lets do an update check even
			//if slightly less than $checkPeriod hours have elapsed since the last check.
			$cronFuzziness = 20 * 60;
			$period = $this->checkPeriod * 3600 - $cronFuzziness;
		} else {
			$period = $this->checkPeriod * 3600;
		}

		return $period;
	}

	/**
	 * Add our custom schedule to the array of Cron schedules used by WP.
	 *
	 * @param array $schedules
	 * @return array
	 */
	public function _addCustomSchedule($schedules){
		if ( $this->checkPeriod && ($this->checkPeriod > 0) ){
			$scheduleName = 'every' . $this->checkPeriod . 'hours';
			$schedules[$scheduleName] = array(
				'interval' => $this->checkPeriod * 3600,
				'display' => sprintf('Every %d hours', $this->checkPeriod),
			);
		}
		return $schedules;
	}

	/**
	 * Remove the scheduled cron event that the library uses to check for updates.
	 *
	 * @return void
	 */
	public function _removeUpdaterCron(){
		wp_clear_scheduled_hook($this->cronHook);
	}

	/**
	 * Get the name of the update checker's WP-cron hook. Mostly useful for debugging.
	 *
	 * @return string
	 */
	public function getCronHookName() {
		return $this->cronHook;
	}
}

endif;


if ( !class_exists('SiteSEO_PucUpgraderStatus_3_2', false) ):

/**
 * A utility class that helps figure out which plugin WordPress is upgrading.
 *
 * It may seem strange to have an separate class just for that, but the task is surprisingly complicated.
 * Core classes like Plugin_Upgrader don't expose the plugin file name during an in-progress update (AFAICT).
 * This class uses a few workarounds and heuristics to get the file name.
 */
#[\AllowDynamicProperties]
class SiteSEO_PucUpgraderStatus_3_2 {
	private $upgradedPluginFile = null; //The plugin that is currently being upgraded by WordPress.

	public function __construct() {
		//Keep track of which plugin WordPress is currently upgrading.
		add_filter('upgrader_pre_install', array($this, 'setUpgradedPlugin'), 10, 2);
		add_filter('upgrader_package_options', array($this, 'setUpgradedPluginFromOptions'), 10, 1);
		add_filter('upgrader_post_install', array($this, 'clearUpgradedPlugin'), 10, 1);
		add_action('upgrader_process_complete', array($this, 'clearUpgradedPlugin'), 10, 1);
	}

	/**
	 * Is there and update being installed RIGHT NOW, for a specific plugin?
	 *
	 * Caution: This method is unreliable. WordPress doesn't make it easy to figure out what it is upgrading,
	 * and upgrader implementations are liable to change without notice.
	 *
	 * @param string $pluginFile The plugin to check.
	 * @param WP_Upgrader|null $upgrader The upgrader that's performing the current update.
	 * @return bool True if the plugin identified by $pluginFile is being upgraded.
	 */
	public function isPluginBeingUpgraded($pluginFile, $upgrader = null) {
		if ( isset($upgrader) ) {
			$upgradedPluginFile = $this->getPluginBeingUpgradedBy($upgrader);
			if ( !empty($upgradedPluginFile) ) {
				$this->upgradedPluginFile = $upgradedPluginFile;
			}
		}
		return ( !empty($this->upgradedPluginFile) && ($this->upgradedPluginFile === $pluginFile) );
	}

	/**
	 * Get the file name of the plugin that's currently being upgraded.
	 *
	 * @param Plugin_Upgrader|WP_Upgrader $upgrader
	 * @return string|null
	 */
	private function getPluginBeingUpgradedBy($upgrader) {
		if ( !isset($upgrader, $upgrader->skin) ) {
			return null;
		}

		//Figure out which plugin is being upgraded.
		$pluginFile = null;
		$skin = $upgrader->skin;
		if ( $skin instanceof Plugin_Upgrader_Skin ) {
			if ( isset($skin->plugin) && is_string($skin->plugin) && ($skin->plugin !== '') ) {
				$pluginFile = $skin->plugin;
			}
		} elseif ( isset($skin->plugin_info) && is_array($skin->plugin_info) ) {
			//This case is tricky because Bulk_Plugin_Upgrader_Skin (etc) doesn't actually store the plugin
			//filename anywhere. Instead, it has the plugin headers in $plugin_info. So the best we can
			//do is compare those headers to the headers of installed plugins.
			$pluginFile = $this->identifyPluginByHeaders($skin->plugin_info);
		}

		return $pluginFile;
	}

	/**
	 * Identify an installed plugin based on its headers.
	 *
	 * @param array $searchHeaders The plugin file header to look for.
	 * @return string|null Plugin basename ("foo/bar.php"), or NULL if we can't identify the plugin.
	 */
	private function identifyPluginByHeaders($searchHeaders) {
		if ( !function_exists('get_plugins') ){
			/** @noinspection PhpIncludeInspection */
			require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
		}

		$installedPlugins = get_plugins();
		$matches = array();
		foreach($installedPlugins as $pluginBasename => $headers) {
			$diff1 = array_diff_assoc($headers, $searchHeaders);
			$diff2 = array_diff_assoc($searchHeaders, $headers);
			if ( empty($diff1) && empty($diff2) ) {
				$matches[] = $pluginBasename;
			}
		}

		//It's possible (though very unlikely) that there could be two plugins with identical
		//headers. In that case, we can't unambiguously identify the plugin that's being upgraded.
		if ( count($matches) !== 1 ) {
			return null;
		}

		return reset($matches);
	}

	/**
	 * @access private
	 *
	 * @param mixed $input
	 * @param array $hookExtra
	 * @return mixed Returns $input unaltered.
	 */
	public function setUpgradedPlugin($input, $hookExtra) {
		if (!empty($hookExtra['plugin']) && is_string($hookExtra['plugin'])) {
			$this->upgradedPluginFile = $hookExtra['plugin'];
		} else {
			$this->upgradedPluginFile = null;
		}
		return $input;
	}

	/**
	 * @access private
	 *
	 * @param array $options
	 * @return array
	 */
	public function setUpgradedPluginFromOptions($options) {
		if (isset($options['hook_extra']['plugin']) && is_string($options['hook_extra']['plugin'])) {
			$this->upgradedPluginFile = $options['hook_extra']['plugin'];
		} else {
			$this->upgradedPluginFile = null;
		}
		return $options;
	}

	/**
	 * @access private
	 *
	 * @param mixed $input
	 * @return mixed Returns $input unaltered.
	 */
	public function clearUpgradedPlugin($input = null) {
		$this->upgradedPluginFile = null;
		return $input;
	}
}

endif;


if ( !class_exists('SiteSEO_PucFactory', false) ):

/**
 * A factory that builds instances of other classes from this library.
 *
 * When multiple versions of the same class have been loaded (e.g. SiteSEOUpdateChecker 1.2
 * and 1.3), this factory will always use the latest available version. Register class
 * versions by calling {@link SiteSEO_PucFactory::addVersion()}.
 *
 * At the moment it can only build instances of the SiteSEOUpdateChecker class. Other classes
 * are intended mainly for internal use and refer directly to specific implementations. If you
 * want to instantiate one of them anyway, you can use {@link SiteSEO_PucFactory::getLatestClassVersion()}
 * to get the class name and then create it with <code>new $class(...)</code>.
 */
#[\AllowDynamicProperties]
class SiteSEO_PucFactory {
	protected static $classVersions = array();
	protected static $sorted = false;

	/**
	 * Create a new instance of SiteSEOUpdateChecker.
	 *
	 * @see SiteSEOUpdateChecker::__construct()
	 *
	 * @param $metadataUrl
	 * @param $pluginFile
	 * @param string $slug
	 * @param int $checkPeriod
	 * @param string $optionName
	 * @param string $muPluginFile
	 * @return SiteSEOUpdateChecker_3_2
	 */
	public static function buildUpdateChecker($metadataUrl, $pluginFile, $slug = '', $checkPeriod = 12, $optionName = '', $muPluginFile = '') {
		$class = self::getLatestClassVersion('SiteSEOUpdateChecker');
		return new $class($metadataUrl, $pluginFile, $slug, $checkPeriod, $optionName, $muPluginFile);
	}

	/**
	 * Get the specific class name for the latest available version of a class.
	 *
	 * @param string $class
	 * @return string|null
	 */
	public static function getLatestClassVersion($class) {
		if ( !self::$sorted ) {
			self::sortVersions();
		}

		if ( isset(self::$classVersions[$class]) ) {
			return reset(self::$classVersions[$class]);
		} else {
			return null;
		}
	}

	/**
	 * Sort available class versions in descending order (i.e. newest first).
	 */
	protected static function sortVersions() {
		foreach ( self::$classVersions as $class => $versions ) {
			uksort($versions, array(__CLASS__, 'compareVersions'));
			self::$classVersions[$class] = $versions;
		}
		self::$sorted = true;
	}

	protected static function compareVersions($a, $b) {
		return -version_compare($a, $b);
	}

	/**
	 * Register a version of a class.
	 *
	 * @access private This method is only for internal use by the library.
	 *
	 * @param string $generalClass Class name without version numbers, e.g. 'SiteSEOUpdateChecker'.
	 * @param string $versionedClass Actual class name, e.g. 'SiteSEOUpdateChecker_1_2'.
	 * @param string $version Version number, e.g. '1.2'.
	 */
	public static function addVersion($generalClass, $versionedClass, $version) {
		if ( !isset(self::$classVersions[$generalClass]) ) {
			self::$classVersions[$generalClass] = array();
		}
		self::$classVersions[$generalClass][$version] = $versionedClass;
		self::$sorted = false;
	}
}

endif;

//Register classes defined in this file with the factory.
SiteSEO_PucFactory::addVersion('SiteSEOUpdateChecker', 'SiteSEOUpdateChecker_3_2', '3.2');
SiteSEO_PucFactory::addVersion('SiteSEOUpdate', 'SiteSEOUpdate_3_2', '3.2');
SiteSEO_PucFactory::addVersion('SiteSEOInfo', 'SiteSEOInfo_3_2', '3.2');
SiteSEO_PucFactory::addVersion('SiteSEO_PucGitHubChecker', 'SiteSEO_PucGitHubChecker_3_2', '3.2');