diff --git a/local-packages/Rsdo.StyleCop.1.0.0.nupkg b/local-packages/Rsdo.StyleCop.1.0.0.nupkg new file mode 100644 index 0000000..39accc0 Binary files /dev/null and b/local-packages/Rsdo.StyleCop.1.0.0.nupkg differ diff --git a/src/.editorconfig b/src/.editorconfig new file mode 100644 index 0000000..291935d --- /dev/null +++ b/src/.editorconfig @@ -0,0 +1,448 @@ +# EditorConfig is awesome:http://EditorConfig.org + +# top-most EditorConfig file +root = true + +# All Files +# See http://kent-boogaart.com/blog/editorconfig-reference-for-c-developers +[*] +# Don't use tabs for indentation. +indent_style = space +# (Please don't specify an indent_size here; that has too many unintended consequences.) + +# Code files +# See http://kent-boogaart.com/blog/editorconfig-reference-for-c-developers +[*.{cs,csx,vb,vbx}] +charset = utf-8-bom +end_of_line = crlf +indent_style = space +indent_size = 4 +insert_final_newline = false +trim_trailing_whitespace = true + +# Solution Files +[*.sln] +indent_style = tab + +# XML Project Files +[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}] +indent_size = 2 + +# Configuration Files +[*.{json,xml,yml,config,props,targets,nuspec,resx,ruleset,vsixmanifest,vsct}] +indent_size = 4 + +# Markdown Files +[*.md] +trim_trailing_whitespace = false + +# Web Files +[*.{htm,html,js,ts,css,scss,less}] +indent_size = 4 +insert_final_newline = true + +# Bash Files +[*.sh] +end_of_line = lf + +# Dotnet Code Style Settings +# See https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference +# See http://kent-boogaart.com/blog/editorconfig-reference-for-c-developers +[*.{cs,csx,cake,vb}] +dotnet_sort_system_directives_first = true +dotnet_style_coalesce_expression = true:warning +dotnet_style_collection_initializer = true:warning +dotnet_style_explicit_tuple_names = true:warning +dotnet_style_null_propagation = true:warning +dotnet_style_object_initializer = true:warning +dotnet_style_predefined_type_for_locals_parameters_members = true:warning +dotnet_style_predefined_type_for_member_access = true:warning +dotnet_style_qualification_for_event = false:suggestion +dotnet_style_qualification_for_field = false:suggestion +dotnet_style_qualification_for_method = false:suggestion +dotnet_style_qualification_for_property = false:suggestion + +# Naming Symbols +# constant_fields - Define constant fields +dotnet_naming_symbols.constant_fields.applicable_kinds = field +dotnet_naming_symbols.constant_fields.required_modifiers = const +# non_private_readonly_fields - Define public, internal and protected readonly fields +dotnet_naming_symbols.non_private_readonly_fields.applicable_accessibilities = public, internal, protected +dotnet_naming_symbols.non_private_readonly_fields.applicable_kinds = field +dotnet_naming_symbols.non_private_readonly_fields.required_modifiers = readonly +# static_readonly_fields - Define static and readonly fields +dotnet_naming_symbols.static_readonly_fields.applicable_kinds = field +dotnet_naming_symbols.static_readonly_fields.required_modifiers = static, readonly +# private_readonly_fields - Define private readonly fields +dotnet_naming_symbols.private_readonly_fields.applicable_accessibilities = private +dotnet_naming_symbols.private_readonly_fields.applicable_kinds = field +dotnet_naming_symbols.private_readonly_fields.required_modifiers = readonly +# public_internal_fields - Define public and internal fields +dotnet_naming_symbols.public_internal_fields.applicable_accessibilities = public, internal +dotnet_naming_symbols.public_internal_fields.applicable_kinds = field +# private_protected_fields - Define private and protected fields +dotnet_naming_symbols.private_protected_fields.applicable_accessibilities = private, protected +dotnet_naming_symbols.private_protected_fields.applicable_kinds = field +# public_symbols - Define any public symbol +dotnet_naming_symbols.public_symbols.applicable_accessibilities = public, internal, protected, protected_internal +dotnet_naming_symbols.public_symbols.applicable_kinds = method, property, event, delegate +# parameters - Defines any parameter +dotnet_naming_symbols.parameters.applicable_kinds = parameter +# non_interface_types - Defines class, struct, enum and delegate types +dotnet_naming_symbols.non_interface_types.applicable_kinds = class, struct, enum, delegate +# interface_types - Defines interfaces +dotnet_naming_symbols.interface_types.applicable_kinds = interface + +# Naming Styles +# camel_case - Define the camelCase style +dotnet_naming_style.camel_case.capitalization = camel_case +# pascal_case - Define the Pascal_case style +dotnet_naming_style.pascal_case.capitalization = pascal_case +# first_upper - The first character must start with an upper-case character +dotnet_naming_style.first_upper.capitalization = first_word_upper +# prefix_interface_interface_with_i - Interfaces must be PascalCase and the first character of an interface must be an 'I' +dotnet_naming_style.prefix_interface_interface_with_i.capitalization = pascal_case +dotnet_naming_style.prefix_interface_interface_with_i.required_prefix = I + +# Naming Rules +# Constant fields must be PascalCase +dotnet_naming_rule.constant_fields_must_be_pascal_case.severity = warning +dotnet_naming_rule.constant_fields_must_be_pascal_case.symbols = constant_fields +dotnet_naming_rule.constant_fields_must_be_pascal_case.style = pascal_case +# Public, internal and protected readonly fields must be PascalCase +dotnet_naming_rule.non_private_readonly_fields_must_be_pascal_case.severity = warning +dotnet_naming_rule.non_private_readonly_fields_must_be_pascal_case.symbols = non_private_readonly_fields +dotnet_naming_rule.non_private_readonly_fields_must_be_pascal_case.style = pascal_case +# Static readonly fields must be PascalCase +dotnet_naming_rule.static_readonly_fields_must_be_pascal_case.severity = warning +dotnet_naming_rule.static_readonly_fields_must_be_pascal_case.symbols = static_readonly_fields +dotnet_naming_rule.static_readonly_fields_must_be_pascal_case.style = pascal_case +# Private readonly fields must be camelCase +dotnet_naming_rule.private_readonly_fields_must_be_camel_case.severity = warning +dotnet_naming_rule.private_readonly_fields_must_be_camel_case.symbols = private_readonly_fields +dotnet_naming_rule.private_readonly_fields_must_be_camel_case.style = camel_case +# Public and internal fields must be PascalCase +dotnet_naming_rule.public_internal_fields_must_be_pascal_case.severity = warning +dotnet_naming_rule.public_internal_fields_must_be_pascal_case.symbols = public_internal_fields +dotnet_naming_rule.public_internal_fields_must_be_pascal_case.style = pascal_case +# Private and protected fields must be camelCase +dotnet_naming_rule.private_protected_fields_must_be_camel_case.severity = warning +dotnet_naming_rule.private_protected_fields_must_be_camel_case.symbols = private_protected_fields +dotnet_naming_rule.private_protected_fields_must_be_camel_case.style = camel_case +# Public members must be capitalized +dotnet_naming_rule.public_members_must_be_capitalized.severity = warning +dotnet_naming_rule.public_members_must_be_capitalized.symbols = public_symbols +dotnet_naming_rule.public_members_must_be_capitalized.style = first_upper +# Parameters must be camelCase +dotnet_naming_rule.parameters_must_be_camel_case.severity = warning +dotnet_naming_rule.parameters_must_be_camel_case.symbols = parameters +dotnet_naming_rule.parameters_must_be_camel_case.style = camel_case +# Class, struct, enum and delegates must be PascalCase +dotnet_naming_rule.non_interface_types_must_be_pascal_case.severity = warning +dotnet_naming_rule.non_interface_types_must_be_pascal_case.symbols = non_interface_types +dotnet_naming_rule.non_interface_types_must_be_pascal_case.style = pascal_case +# Interfaces must be PascalCase and start with an 'I' +dotnet_naming_rule.interface_types_must_be_prefixed_with_i.severity = warning +dotnet_naming_rule.interface_types_must_be_prefixed_with_i.symbols = interface_types +dotnet_naming_rule.interface_types_must_be_prefixed_with_i.style = prefix_interface_interface_with_i + +# C# Code Style Settings +# See https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference +# See http://kent-boogaart.com/blog/editorconfig-reference-for-c-developers +[*.{cs,csx,cake}] + +# Indentation Preferences +# http://kent-boogaart.com/blog/editorconfig-reference-for-c-developers#csharp_indent_block_contents +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_labels = one_less_than_current +csharp_indent_switch_labels = true + +# New Line Preferences +# See http://kent-boogaart.com/blog/editorconfig-reference-for-c-developers#csharp_new_line_before_catch +csharp_new_line_before_catch = true +csharp_new_line_before_else = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_open_brace = all +csharp_new_line_between_query_expression_clauses = true +csharp_prefer_braces = true:suggestion +csharp_prefer_simple_default_expression = true:warning + +# Wrapping Preferences +# See http://kent-boogaart.com/blog/editorconfig-reference-for-c-developers#csharp_preserve_single_line_blocks +csharp_preserve_single_line_blocks = true +csharp_preserve_single_line_statements = false + +# Spacing Preferences +# See http://kent-boogaart.com/blog/editorconfig-reference-for-c-developers#csharp_space_after_cast +csharp_space_after_cast = false +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_comma = true +csharp_space_after_dot = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_after_semicolon_in_for_statement = true +csharp_space_around_binary_operators = before_and_after +csharp_space_around_declaration_statements = do_not_ignore +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_before_comma = false +csharp_space_before_dot = false +csharp_space_before_open_square_brackets = false +csharp_space_before_semicolon_in_for_statement = false +csharp_space_between_empty_square_brackets = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_declaration_name_and_open_parenthesis = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_parentheses = none +csharp_space_between_square_brackets = false + +# CSharp Style Preferences +# See http://kent-boogaart.com/blog/editorconfig-reference-for-c-developers#csharp_style_conditional_delegate_call +csharp_style_conditional_delegate_call = true:warning +csharp_style_expression_bodied_accessors = true:warning +csharp_style_expression_bodied_constructors = false:warning +csharp_style_expression_bodied_indexers = true:warning +csharp_style_expression_bodied_methods = false:warning +csharp_style_expression_bodied_operators =false:warning +csharp_style_expression_bodied_properties = true:warning +csharp_style_inlined_variable_declaration = true:warning +csharp_style_pattern_matching_over_as_with_null_check = true:warning +csharp_style_pattern_matching_over_is_with_cast_check = true:warning +csharp_style_throw_expression = true:warning +csharp_style_var_elsewhere = true:suggestion +csharp_style_var_for_built_in_types = true:none +csharp_style_var_when_type_is_apparent = true:suggestion + +# Resharper preferences +# See https://www.jetbrains.com/help/rider/EditorConfig_Properties.html +csharp_keep_blank_lines_in_declarations = 1 +csharp_remove_blank_lines_near_braces_in_declarations = true +csharp_keep_blank_lines_in_code = 1 +csharp_remove_blank_lines_near_braces_in_code = true +csharp_blank_lines_around_namespace = 1 +csharp_blank_lines_inside_namespace = 0 +csharp_blank_lines_around_type = 1 +csharp_blank_lines_inside_type = 0 +csharp_blank_lines_around_field = 0 +csharp_blank_lines_around_single_line_field = 0 +csharp_blank_lines_around_property = 1 +csharp_blank_lines_around_single_line_property = 1 +csharp_blank_lines_around_auto_property = 1 +csharp_blank_lines_around_single_line_auto_property = 1 +csharp_blank_lines_around_invocable = 1 +csharp_blank_lines_around_single_line_invocable = 1 +csharp_blank_lines_around_local_method = 1 +csharp_blank_lines_around_single_line_local_method = 1 +csharp_blank_lines_around_region = 1 +csharp_blank_lines_inside_region = 1 +csharp_blank_lines_between_using_groups = 0 +csharp_blank_lines_after_using_list = 1 +csharp_blank_lines_after_start_comment = 1 +csharp_blank_lines_before_single_line_comment = 1 +csharp_blank_lines_after_control_transfer_statements = 1 + +csharp_type_declaration_braces = next_line +csharp_invocable_declaration_braces = next_line +csharp_anonymous_method_declaration_braces = next_line +csharp_accessor_owner_declaration_braces = next_line +csharp_accessor_declaration_braces = next_line +csharp_case_block_braces = next_line +csharp_initializer_braces = next_line +csharp_other_braces = next_line +csharp_empty_block_style = multiline + +csharp_indent_style = space +csharp_indent_size = 4 +csharp_tab_width = 4 + +csharp_keep_user_linebreaks = false +csharp_simple_embedded_statement_style = line_break +csharp_simple_case_statement_style = line_break +csharp_simple_embedded_block_style = line_break +csharp_new_line_before_else = true +csharp_new_line_before_while = true +csharp_new_line_before_catch = true +csharp_new_line_before_finally = true + + +csharp_max_line_length = 160 +csharp_wrap_parameters_style = chop_if_long +csharp_wrap_before_declaration_lpar = false +csharp_wrap_after_declaration_lpar = true +csharp_wrap_arguments_style = chop_if_long +csharp_wrap_before_invocation_lpar = false +csharp_wrap_after_invocation_lpar = true +csharp_wrap_before_comma = false +csharp_wrap_before_arrow_with_expressions = false +csharp_wrap_after_dot_in_method_calls = false +csharp_wrap_chained_method_calls = chop_if_long +csharp_wrap_before_extends_colon = false +csharp_wrap_extends_list_style = chop_if_long +csharp_wrap_for_stmt_header_style = chop_if_long +csharp_wrap_before_ternary_opsigns = true +csharp_wrap_ternary_expr_style = chop_if_long +csharp_wrap_multiple_declaration_style = wrap_if_long +csharp_wrap_linq_expressions = chop_if_long +csharp_wrap_before_binary_opsign = false +csharp_wrap_chained_binary_expressions = chop_if_long +csharp_force_chop_compound_if_expression = false +csharp_force_chop_compound_while_expression = false +csharp_force_chop_compound_do_expression = false +csharp_wrap_multiple_type_parameter_constraints_style = chop_always +csharp_wrap_object_and_collection_initializer_style = chop_always +csharp_wrap_array_initializer_style = chop_always +csharp_wrap_before_first_type_parameter_constraint = false +csharp_wrap_before_type_parameter_langle = false +csharp_place_abstract_accessorholder_on_single_line = true +csharp_place_simple_accessorholder_on_single_line = false +csharp_place_accessor_with_attrs_holder_on_single_line = false +csharp_place_simple_accessor_on_single_line = true +csharp_place_simple_method_on_single_line = false +csharp_place_simple_anonymousmethod_on_single_line = false +csharp_place_simple_initializer_on_single_line = true +csharp_place_type_attribute_on_same_line = false +csharp_place_method_attribute_on_same_line = false +csharp_place_accessorholder_attribute_on_same_line = false +csharp_place_simple_accessor_attribute_on_same_line = false +csharp_place_complex_accessor_attribute_on_same_line = false +csharp_place_field_attribute_on_same_line = false +csharp_place_constructor_initializer_on_same_line = false +csharp_place_type_constraints_on_same_line = false +csharp_allow_comment_after_lbrace = false +csharp_continuous_indent_multiplier = false +csharp_indent_switch_labels = true +csharp_indent_nested_usings_stmt = true +csharp_indent_nested_fixed_stmt = true +csharp_indent_nested_lock_stmt = true +csharp_indent_nested_for_stmt = true +csharp_indent_nested_foreach_stmt = true +csharp_indent_nested_while_stmt = true +csharp_indent_type_constraints = true +csharp_stick_comment = false +csharp_indent_method_decl_pars = inside +csharp_indent_invocation_pars = inside +csharp_indent_statement_pars = inside +csharp_indent_typeparam_angles = inside +csharp_indent_typearg_angles = inside +csharp_indent_pars = inside +csharp_align_multiline_parameter = false +csharp_align_first_arg_by_paren = false +csharp_align_multiline_argument = false +csharp_align_multiline_extends_list = false +csharp_align_multiline_expression = false +csharp_align_multiline_binary_expressions_chain = false +csharp_align_multiline_calls_chain = false +csharp_align_multiline_array_and_object_initializer = false +csharp_indent_anonymous_method_block = false +csharp_align_multiline_for_stmt = false +csharp_align_multiple_declaration = false +csharp_align_multline_type_parameter_list = false +csharp_align_multline_type_parameter_constrains = false +csharp_align_linq_query = false +csharp_special_else_if_treatment = true +csharp_insert_final_newline = false +csharp_old_engine = false + +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_declaration_name_and_open_parenthesis = false +csharp_space_between_method_declaration_name_and_open_parenthesis = false +csharp_space_before_open_square_brackets = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_before_typeof_parentheses = false +csharp_space_before_default_parentheses = false +csharp_space_before_checked_parentheses = false +csharp_space_before_sizeof_parentheses = false +csharp_space_before_nameof_parentheses = false +csharp_space_before_type_parameter_angle = false +csharp_space_before_type_argument_angle = false +csharp_space_around_binary_operator = true +csharp_space_around_member_access_operator = false +csharp_space_after_logical_not_op = false +csharp_space_after_unary_minus_op = false +csharp_space_after_unary_plus_op = false +csharp_space_after_ampersand_op = false +csharp_space_after_asterik_op = false +csharp_space_within_parentheses = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_square_brackets = false +csharp_space_between_typecast_parentheses = false +space_between_parentheses_of_control_flow_statements = false +csharp_space_within_typeof_parentheses = false +csharp_space_within_default_parentheses = false +csharp_space_within_checked_parentheses = false +csharp_space_within_sizeof_parentheses = false +csharp_space_within_nameof_parentheses = false +csharp_space_within_type_parameter_angles = false +csharp_space_within_type_argument_angles = false +csharp_space_before_ternary_quest = true +csharp_space_after_ternary_quest = true +csharp_space_before_ternary_colon = true +csharp_space_after_ternary_colon = true +csharp_space_after_cast = false +csharp_space_near_postfix_and_prefix_op = false +csharp_space_before_comma = false +csharp_space_after_comma = true +csharp_space_before_semicolon_in_for_statement = false +csharp_space_after_semicolon_in_for_statement = true +csharp_space_before_attribute_colon = false +csharp_space_after_attribute_colon = true +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_around_dot = false +csharp_space_around_lambda_arrow = true +csharp_space_before_singleline_accessorholder = true +csharp_space_in_singleline_accessorholder = true +csharp_space_between_accessors_in_singleline_property = true +csharp_space_between_attribute_sections = false +csharp_space_withing_empty_braces = true +csharp_space_in_singleline_method = true +csharp_space_in_singleline_anonymous_method = true +csharp_space_between_square_brackets = false +csharp_space_before_open_square_brackets = false +csharp_space_between_square_brackets = false +csharp_space_between_empty_square_brackets = false +csharp_space_within_single_line_array_initializer_braces = true +csharp_space_before_pointer_asterik_declaration = false +csharp_space_before_semicolon = false +csharp_space_before_colon_in_case = false +csharp_space_before_nullable_mark = false +csharp_space_before_type_parameter_constraint_colon = true +csharp_space_after_type_parameter_constraint_colon = true +csharp_space_around_alias_eq = true +csharp_space_before_trailing_comment = true +csharp_space_after_operator_keyword = true + +xmldoc_wrap_tags_and_pi = false +xmldoc_spaces_around_eq_in_pi_attribute = false +xmldoc_space_after_last_pi_attribute = false +xmldoc_pi_attribute_style = on_single_line +xmldoc_pi_attributes_indent = single_indent +xmldoc_blank_line_after_pi = false +xmldoc_spaces_around_eq_in_attribute = false +xmldoc_space_after_last_attribute = false +xmldoc_space_before_self_closing = false +xmldoc_attribute_style = on_single_line +xmldoc_attribute_indent = single_indent +xmldoc_keep_user_linebreaks = false +xmldoc_linebreaks_inside_tags_for_multiline_elements = true +xmldoc_linebreaks_inside_tags_for_elements_with_child_elements = true +xmldoc_linebreaks_inside_tags_for_elements_longer_than = 0 +xmldoc_spaces_inside_tags = 1 +xmldoc_wrap_text = false +xmldoc_wrap_around_elements = true +xmldoc_indent_child_elements = zeroindent +xmldoc_indent_text = zeroident +xmldoc_max_blank_lines_between_tags = 0 +xmldoc_linebreak_before_multiline_elements = true +xmldoc_linebreak_before_singleline_elements = false + +csharp_trailing_comma_in_multiline_lists = true diff --git a/src/.gitignore b/src/.gitignore new file mode 100644 index 0000000..34c8dee --- /dev/null +++ b/src/.gitignore @@ -0,0 +1,388 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Nuget personal access tokens and Credentials +nuget.config + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +.idea/ +*.sln.iml diff --git a/src/Rsdo.Concordancer.sln b/src/Rsdo.Concordancer.sln new file mode 100644 index 0000000..abc14fc --- /dev/null +++ b/src/Rsdo.Concordancer.sln @@ -0,0 +1,81 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "apps", "apps", "{3DE3C789-92CE-4A02-B44D-F724A6D6989E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "core", "core", "{8DB3C9A5-C6CF-4006-ACDA-14AF9A336EE2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{A480F303-D539-43CE-A292-34C922224742}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rsdo.Concordancer.Core", "core\Rsdo.Concordancer.Core\Rsdo.Concordancer.Core.csproj", "{35EAFDA5-0F81-46BF-9A39-6F86A0761D90}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rsdo.Concordancer.ServiceModel", "core\Rsdo.Concordancer.ServiceModel\Rsdo.Concordancer.ServiceModel.csproj", "{1D5E751F-D7DF-445E-A583-01678242AB45}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rsdo.Concordancer.Services", "core\Rsdo.Concordancer.Services\Rsdo.Concordancer.Services.csproj", "{E5C46DF9-C8B9-41EE-9874-19713CDAAFB1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rsdo.Concordancer.Infrastructure", "core\Rsdo.Concordancer.Infrastructure\Rsdo.Concordancer.Infrastructure.csproj", "{D6711EF5-DDDE-4AA8-B17C-449CBE4B0DAC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rsdo.Concordancer.Tests.Unit", "tests\Rsdo.Concordancer.Tests.Unit\Rsdo.Concordancer.Tests.Unit.csproj", "{50321513-0564-469B-9160-DEA7430F2FFB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rsdo.Concordancer.Tests.Integration", "tests\Rsdo.Concordancer.Tests.Integration\Rsdo.Concordancer.Tests.Integration.csproj", "{EE998A04-3E65-493A-8C70-C830063A0871}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rsdo.Concordancer.Api", "apps\Rsdo.Concordancer.Api\Rsdo.Concordancer.Api.csproj", "{D1204EBA-6D8B-433E-8778-F240D1D5B11A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rsdo.Concordancer.Data", "core\Rsdo.Concordancer.Data\Rsdo.Concordancer.Data.csproj", "{EDBA6BA0-CCCB-4678-A675-539DD795E063}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rsdo.Concordancer.SystemManager", "apps\Rsdo.Concordancer.SystemManager\Rsdo.Concordancer.SystemManager.csproj", "{41B26AD1-C0A5-4796-95D0-CB84FB574A83}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {35EAFDA5-0F81-46BF-9A39-6F86A0761D90} = {8DB3C9A5-C6CF-4006-ACDA-14AF9A336EE2} + {1D5E751F-D7DF-445E-A583-01678242AB45} = {8DB3C9A5-C6CF-4006-ACDA-14AF9A336EE2} + {E5C46DF9-C8B9-41EE-9874-19713CDAAFB1} = {8DB3C9A5-C6CF-4006-ACDA-14AF9A336EE2} + {D6711EF5-DDDE-4AA8-B17C-449CBE4B0DAC} = {8DB3C9A5-C6CF-4006-ACDA-14AF9A336EE2} + {50321513-0564-469B-9160-DEA7430F2FFB} = {A480F303-D539-43CE-A292-34C922224742} + {EE998A04-3E65-493A-8C70-C830063A0871} = {A480F303-D539-43CE-A292-34C922224742} + {D1204EBA-6D8B-433E-8778-F240D1D5B11A} = {3DE3C789-92CE-4A02-B44D-F724A6D6989E} + {EDBA6BA0-CCCB-4678-A675-539DD795E063} = {8DB3C9A5-C6CF-4006-ACDA-14AF9A336EE2} + {41B26AD1-C0A5-4796-95D0-CB84FB574A83} = {3DE3C789-92CE-4A02-B44D-F724A6D6989E} + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {35EAFDA5-0F81-46BF-9A39-6F86A0761D90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {35EAFDA5-0F81-46BF-9A39-6F86A0761D90}.Debug|Any CPU.Build.0 = Debug|Any CPU + {35EAFDA5-0F81-46BF-9A39-6F86A0761D90}.Release|Any CPU.ActiveCfg = Release|Any CPU + {35EAFDA5-0F81-46BF-9A39-6F86A0761D90}.Release|Any CPU.Build.0 = Release|Any CPU + {1D5E751F-D7DF-445E-A583-01678242AB45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1D5E751F-D7DF-445E-A583-01678242AB45}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1D5E751F-D7DF-445E-A583-01678242AB45}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1D5E751F-D7DF-445E-A583-01678242AB45}.Release|Any CPU.Build.0 = Release|Any CPU + {E5C46DF9-C8B9-41EE-9874-19713CDAAFB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E5C46DF9-C8B9-41EE-9874-19713CDAAFB1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E5C46DF9-C8B9-41EE-9874-19713CDAAFB1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E5C46DF9-C8B9-41EE-9874-19713CDAAFB1}.Release|Any CPU.Build.0 = Release|Any CPU + {D6711EF5-DDDE-4AA8-B17C-449CBE4B0DAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D6711EF5-DDDE-4AA8-B17C-449CBE4B0DAC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D6711EF5-DDDE-4AA8-B17C-449CBE4B0DAC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D6711EF5-DDDE-4AA8-B17C-449CBE4B0DAC}.Release|Any CPU.Build.0 = Release|Any CPU + {50321513-0564-469B-9160-DEA7430F2FFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {50321513-0564-469B-9160-DEA7430F2FFB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {50321513-0564-469B-9160-DEA7430F2FFB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {50321513-0564-469B-9160-DEA7430F2FFB}.Release|Any CPU.Build.0 = Release|Any CPU + {EE998A04-3E65-493A-8C70-C830063A0871}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EE998A04-3E65-493A-8C70-C830063A0871}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EE998A04-3E65-493A-8C70-C830063A0871}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EE998A04-3E65-493A-8C70-C830063A0871}.Release|Any CPU.Build.0 = Release|Any CPU + {D1204EBA-6D8B-433E-8778-F240D1D5B11A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D1204EBA-6D8B-433E-8778-F240D1D5B11A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D1204EBA-6D8B-433E-8778-F240D1D5B11A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D1204EBA-6D8B-433E-8778-F240D1D5B11A}.Release|Any CPU.Build.0 = Release|Any CPU + {EDBA6BA0-CCCB-4678-A675-539DD795E063}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EDBA6BA0-CCCB-4678-A675-539DD795E063}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EDBA6BA0-CCCB-4678-A675-539DD795E063}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EDBA6BA0-CCCB-4678-A675-539DD795E063}.Release|Any CPU.Build.0 = Release|Any CPU + {41B26AD1-C0A5-4796-95D0-CB84FB574A83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {41B26AD1-C0A5-4796-95D0-CB84FB574A83}.Debug|Any CPU.Build.0 = Debug|Any CPU + {41B26AD1-C0A5-4796-95D0-CB84FB574A83}.Release|Any CPU.ActiveCfg = Release|Any CPU + {41B26AD1-C0A5-4796-95D0-CB84FB574A83}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/src/Rsdo.Concordancer.sln.DotSettings b/src/Rsdo.Concordancer.sln.DotSettings new file mode 100644 index 0000000..02b8531 --- /dev/null +++ b/src/Rsdo.Concordancer.sln.DotSettings @@ -0,0 +1,357 @@ + + C65+,E16+,FF58+,IE11+ + VISIBLE_FILES + DO_NOT_SHOW + DO_NOT_SHOW + <?xml version="1.0" encoding="utf-16"?><Profile name="Reformat Code IDE"><CSReorderTypeMembers>True</CSReorderTypeMembers><CSCodeStyleAttributes ArrangeTypeAccessModifier="True" ArrangeTypeMemberAccessModifier="True" SortModifiers="True" RemoveRedundantParentheses="False" AddMissingParentheses="True" ArrangeBraces="True" ArrangeAttributes="True" ArrangeArgumentsStyle="False" ArrangeCodeBodyStyle="False" /><CSArrangeQualifiers>True</CSArrangeQualifiers><CSOptimizeUsings><OptimizeUsings>True</OptimizeUsings><EmbraceInRegion>False</EmbraceInRegion><RegionName></RegionName></CSOptimizeUsings><CSReformatCode>True</CSReformatCode><CSFixBuiltinTypeReferences>True</CSFixBuiltinTypeReferences><CSShortenReferences>True</CSShortenReferences><XAMLCollapseEmptyTags>False</XAMLCollapseEmptyTags></Profile> + <?xml version="1.0" encoding="utf-16"?><Profile name="StyleCop"><CSUpdateFileHeader>False</CSUpdateFileHeader><CSArrangeQualifiers>True</CSArrangeQualifiers><CSOptimizeUsings><OptimizeUsings>True</OptimizeUsings><EmbraceInRegion>False</EmbraceInRegion><RegionName></RegionName></CSOptimizeUsings><CSReformatCode>True</CSReformatCode><CSReorderTypeMembers>True</CSReorderTypeMembers></Profile> + Required + Required + Required + Required + None + <?xml version="1.0" encoding="utf-16"?> +<Patterns xmlns="urn:schemas-jetbrains-com:member-reordering-patterns"> + <TypePattern DisplayName="Non-reorderable types"> + <TypePattern.Match> + <Or> + <And> + <Kind Is="Interface" /> + <Or> + <HasAttribute Name="System.Runtime.InteropServices.InterfaceTypeAttribute" /> + <HasAttribute Name="System.Runtime.InteropServices.ComImport" /> + </Or> + </And> + <Kind Is="Struct" /> + <HasAttribute Name="JetBrains.Annotations.NoReorderAttribute" /> + <HasAttribute Name="JetBrains.Annotations.NoReorder" /> + </Or> + </TypePattern.Match> + </TypePattern> + <TypePattern DisplayName="xUnit.net Test Classes" RemoveRegions="All"> + <TypePattern.Match> + <And> + <Kind Is="Class" /> + <HasMember> + <And> + <Kind Is="Method" /> + <HasAttribute Name="Xunit.FactAttribute" Inherited="True" /> + </And> + </HasMember> + </And> + </TypePattern.Match> + <Entry DisplayName="Setup/Teardown Methods"> + <Entry.Match> + <Or> + <Kind Is="Constructor" /> + <And> + <Kind Is="Method" /> + <ImplementsInterface Name="System.IDisposable" /> + </And> + </Or> + </Entry.Match> + <Entry.SortBy> + <Kind Order="Constructor" /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="All other members" /> + <Entry DisplayName="Test Methods" Priority="100"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <HasAttribute Name="Xunit.FactAttribute" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Name /> + </Entry.SortBy> + </Entry> + </TypePattern> + <TypePattern DisplayName="NUnit Test Fixtures" RemoveRegions="All"> + <TypePattern.Match> + <And> + <Kind Is="Class" /> + <HasAttribute Name="NUnit.Framework.TestFixtureAttribute" Inherited="True" /> + </And> + </TypePattern.Match> + <Entry DisplayName="Setup/Teardown Methods"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Or> + <HasAttribute Name="NUnit.Framework.SetUpAttribute" Inherited="True" /> + <HasAttribute Name="NUnit.Framework.TearDownAttribute" Inherited="True" /> + <HasAttribute Name="NUnit.Framework.FixtureSetUpAttribute" Inherited="True" /> + <HasAttribute Name="NUnit.Framework.FixtureTearDownAttribute" Inherited="True" /> + </Or> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="All other members" /> + <Entry DisplayName="Test Methods" Priority="100"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <HasAttribute Name="NUnit.Framework.TestAttribute" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Name /> + </Entry.SortBy> + </Entry> + </TypePattern> + <TypePattern DisplayName="Default Pattern (StyleCop)" RemoveRegions="All"> + <Entry DisplayName="Constants"> + <Entry.Match> + <Kind Is="Constant" /> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Static fields"> + <Entry.Match> + <And> + <Kind Is="Field" /> + <Static /> + </And> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Readonly /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Fields"> + <Entry.Match> + <Kind Is="Field" /> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Readonly /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Constructors and Destructors" Priority="200"> + <Entry.Match> + <Or> + <Kind Is="Constructor" /> + <Kind Is="Destructor" /> + </Or> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Kind Order="Constructor Destructor" /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Delegates"> + <Entry.Match> + <Kind Is="Delegate" /> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Public events"> + <Entry.Match> + <And> + <Kind Is="Event" /> + <Access Is="Public" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public" /> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Interface events"> + <Entry.Match> + <And> + <Kind Is="Event" /> + <ImplementsInterface /> + </And> + </Entry.Match> + <Entry.SortBy> + <ImplementsInterface Immediate="True" /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Other events"> + <Entry.Match> + <Kind Is="Event" /> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Enums"> + <Entry.Match> + <Kind Is="Enum" /> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Interfaces"> + <Entry.Match> + <Kind Is="Interface" /> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Public properties"> + <Entry.Match> + <And> + <Kind Is="Property" /> + <Access Is="Public" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Interface properties"> + <Entry.Match> + <And> + <Kind Is="Property" /> + <ImplementsInterface /> + </And> + </Entry.Match> + <Entry.SortBy> + <ImplementsInterface Immediate="True" /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Other properties"> + <Entry.Match> + <Kind Is="Property" /> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Public indexers" Priority="1000"> + <Entry.Match> + <And> + <Kind Is="Indexer" /> + <Access Is="Public" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Interface indexers" Priority="1000"> + <Entry.Match> + <And> + <Kind Is="Indexer" /> + <ImplementsInterface /> + </And> + </Entry.Match> + <Entry.SortBy> + <ImplementsInterface Immediate="True" /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Other indexers" Priority="1000"> + <Entry.Match> + <Kind Is="Indexer" /> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Public methods and operators"> + <Entry.Match> + <And> + <Or> + <Kind Is="Method" /> + <Kind Is="Operator" /> + </Or> + <Access Is="Public" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Interface methods"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <ImplementsInterface /> + </And> + </Entry.Match> + <Entry.SortBy> + <ImplementsInterface Immediate="True" /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Other methods"> + <Entry.Match> + <Kind Is="Method" /> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Operators"> + <Entry.Match> + <Kind Is="Operator" /> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Nested structs" Priority="600"> + <Entry.Match> + <Kind Is="Struct" /> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Nested classes" Priority="700"> + <Entry.Match> + <Kind Is="Class" /> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="All other members" /> + </TypePattern> +</Patterns> + System + System.Linq + MB + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + True + True \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/.dockerignore b/src/apps/Rsdo.Concordancer.Api/.dockerignore new file mode 100644 index 0000000..cd967fc --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/.dockerignore @@ -0,0 +1,25 @@ +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/.idea +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/.gitignore b/src/apps/Rsdo.Concordancer.Api/.gitignore new file mode 100644 index 0000000..fbc1677 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/.gitignore @@ -0,0 +1 @@ +log*.txt \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/Controllers/BaseController.cs b/src/apps/Rsdo.Concordancer.Api/Controllers/BaseController.cs new file mode 100644 index 0000000..3c4a387 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/Controllers/BaseController.cs @@ -0,0 +1,15 @@ +using Microsoft.AspNetCore.Mvc; +using Rsdo.Concordancer.Core.Interfaces; + +namespace Rsdo.Concordancer.Api.Controllers; + +[ApiController] +public abstract class BaseController : ControllerBase +{ + protected BaseController(IMediator mediator) + { + Mediator = mediator; + } + + protected IMediator Mediator { get; } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/Controllers/Concordancer/BaseConcordancerController.cs b/src/apps/Rsdo.Concordancer.Api/Controllers/Concordancer/BaseConcordancerController.cs new file mode 100644 index 0000000..aac75b6 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/Controllers/Concordancer/BaseConcordancerController.cs @@ -0,0 +1,14 @@ +using Microsoft.AspNetCore.Mvc; +using Rsdo.Concordancer.Core.Interfaces; + +namespace Rsdo.Concordancer.Api.Controllers.Concordancer; + +[ApiExplorerSettings(GroupName = ServiceApiInfo.ApiGroupConcordancer)] +[Route(ServiceApiInfo.ApiGroupConcordancer + "/corpus/{corpusId:guid}")] +public abstract class BaseConcordancerController : BaseController +{ + protected BaseConcordancerController(IMediator mediator) + : base(mediator) + { + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/Controllers/Concordancer/ConcordancesController.cs b/src/apps/Rsdo.Concordancer.Api/Controllers/Concordancer/ConcordancesController.cs new file mode 100644 index 0000000..d5a80b7 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/Controllers/Concordancer/ConcordancesController.cs @@ -0,0 +1,37 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.Concordances; + +namespace Rsdo.Concordancer.Api.Controllers.Concordancer; + +public class ConcordancesController : BaseConcordancerController +{ + public ConcordancesController(IMediator mediator) + : base(mediator) + { + } + + [HttpPost("concordances/details")] + public async Task Details(Guid corpusId, ConcordanceDetails request) + { + request.CorpusId = corpusId; + return await Mediator.Send(request); + } + + [HttpPost("concordances/search")] + public async Task Search(Guid corpusId, SearchConcordances request) + { + request.CorpusId = corpusId; + return await Mediator.Send(request); + } + + [HttpPost("concordances/export")] + public async Task Export(Guid corpusId, ExportConcordances request) + { + request.CorpusId = corpusId; + var response = await Mediator.Send(request); + return File(response.Stream, response.ContentType, response.FileName); + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/Controllers/Concordancer/CorpusController.cs b/src/apps/Rsdo.Concordancer.Api/Controllers/Concordancer/CorpusController.cs new file mode 100644 index 0000000..b6272ec --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/Controllers/Concordancer/CorpusController.cs @@ -0,0 +1,25 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.Corpuses; + +namespace Rsdo.Concordancer.Api.Controllers.Concordancer; + +public class CorpusController : BaseConcordancerController +{ + public CorpusController(IMediator mediator) + : base(mediator) + { + } + + [HttpGet("stats")] + public async Task Statistics(Guid corpusId) + { + var request = new GetCorpusStatistics() + { + CorpusId = corpusId, + }; + return await Mediator.Send(request); + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/Controllers/Concordancer/ListController.cs b/src/apps/Rsdo.Concordancer.Api/Controllers/Concordancer/ListController.cs new file mode 100644 index 0000000..2a3b27a --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/Controllers/Concordancer/ListController.cs @@ -0,0 +1,30 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.TermLists; + +namespace Rsdo.Concordancer.Api.Controllers.Concordancer; + +public class ListController : BaseConcordancerController +{ + public ListController(IMediator mediator) + : base(mediator) + { + } + + [HttpPost("list/search")] + public async Task Search(Guid corpusId, SearchTermList request) + { + request.CorpusId = corpusId; + return await Mediator.Send(request); + } + + [HttpPost("list/export")] + public async Task Export(Guid corpusId, ExportTermList request) + { + request.CorpusId = corpusId; + var response = await Mediator.Send(request); + return File(response.Stream, response.ContentType, response.FileName); + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/Controllers/Dashboard/BaseDashboardController.cs b/src/apps/Rsdo.Concordancer.Api/Controllers/Dashboard/BaseDashboardController.cs new file mode 100644 index 0000000..35768c0 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/Controllers/Dashboard/BaseDashboardController.cs @@ -0,0 +1,14 @@ +using Microsoft.AspNetCore.Mvc; +using Rsdo.Concordancer.Core.Interfaces; + +namespace Rsdo.Concordancer.Api.Controllers.Dashboard; + +[ApiExplorerSettings(GroupName = ServiceApiInfo.ApiGroupDashboard)] +[Route(ServiceApiInfo.ApiGroupDashboard + "/corpus")] +public abstract class BaseDashboardController : BaseController +{ + protected BaseDashboardController(IMediator mediator) + : base(mediator) + { + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/Controllers/Dashboard/CorpusController.cs b/src/apps/Rsdo.Concordancer.Api/Controllers/Dashboard/CorpusController.cs new file mode 100644 index 0000000..25f54cb --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/Controllers/Dashboard/CorpusController.cs @@ -0,0 +1,57 @@ +using System; +using System.Net; +using System.Net.Mime; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.Corpuses; +using Rsdo.Concordancer.ServiceModel.Shared; +using Swashbuckle.AspNetCore.Annotations; + +namespace Rsdo.Concordancer.Api.Controllers.Dashboard; + +public class CorpusController : BaseDashboardController +{ + public CorpusController(IMediator mediator) + : base(mediator) + { + } + + [HttpGet("{corpusId:guid}")] + [SwaggerOperation("Returns information about corpus")] + [SwaggerResponse((int)HttpStatusCode.OK, "Information about corpus", typeof(GetCorpusResponse), MediaTypeNames.Application.Json)] + [SwaggerResponse((int)HttpStatusCode.NotFound, "Corpus was not found")] + [SwaggerResponse((int)HttpStatusCode.InternalServerError, "Internal server error")] + public async Task Get([SwaggerParameter("Corpus id", Required = true)] Guid corpusId) + { + var request = new GetCorpus() + { + CorpusId = corpusId, + }; + return await Mediator.Send(request); + } + + [HttpPost] + [SwaggerOperation("Creates new corpus")] + [SwaggerResponse((int)HttpStatusCode.Created, "Corpus was created", typeof(ExecutionResult), MediaTypeNames.Application.Json)] + [SwaggerResponse((int)HttpStatusCode.InternalServerError, "Internal server error")] + public async Task Create([SwaggerParameter("Corpus information", Required = true)] CreateCorpus request) + { + Response.StatusCode = (int)HttpStatusCode.Created; + return await Mediator.Send(request); + } + + [HttpDelete("{corpusId:guid}")] + [SwaggerOperation("Deletes corpus")] + [SwaggerResponse((int)HttpStatusCode.OK, "Corpus was deleted", typeof(ExecutionResult), MediaTypeNames.Application.Json)] + [SwaggerResponse((int)HttpStatusCode.NotFound, "Corpus was not found")] + [SwaggerResponse((int)HttpStatusCode.InternalServerError, "Internal server error")] + public async Task Delete([SwaggerParameter("Corpus id", Required = true)] Guid corpusId) + { + var request = new DeleteCorpus() + { + CorpusId = corpusId, + }; + return await Mediator.Send(request); + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/Controllers/Dashboard/TermListController.cs b/src/apps/Rsdo.Concordancer.Api/Controllers/Dashboard/TermListController.cs new file mode 100644 index 0000000..f14190c --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/Controllers/Dashboard/TermListController.cs @@ -0,0 +1,66 @@ +using System; +using System.Net; +using System.Net.Mime; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.TermLists; +using Rsdo.Concordancer.ServiceModel.Shared; +using Swashbuckle.AspNetCore.Annotations; + +namespace Rsdo.Concordancer.Api.Controllers.Dashboard; + +public class TermListController : BaseDashboardController +{ + public TermListController(IMediator mediator) + : base(mediator) + { + } + + [HttpGet("{corpusId:guid}/termList/{termListId:guid}")] + [SwaggerOperation("Returns information about term list")] + [SwaggerResponse((int)HttpStatusCode.OK, "Information about term list", typeof(GetTermListResponse), MediaTypeNames.Application.Json)] + [SwaggerResponse((int)HttpStatusCode.NotFound, "Term list was not found")] + [SwaggerResponse((int)HttpStatusCode.InternalServerError, "Internal server error")] + public async Task Get( + [SwaggerParameter("Corpus id", Required = true)] Guid corpusId, + [SwaggerParameter("Term list id", Required = true)] Guid termListId) + { + var request = new GetTermList() + { + CorpusId = corpusId, + TermListId = termListId, + }; + return await Mediator.Send(request); + } + + [HttpPost("{corpusId:guid}/termList")] + [SwaggerOperation("Creates term list in selected corpus")] + [SwaggerResponse((int)HttpStatusCode.Created, "Corpus was created", typeof(ExecutionResult), MediaTypeNames.Application.Json)] + [SwaggerResponse((int)HttpStatusCode.InternalServerError, "Internal server error")] + public async Task Create( + [SwaggerParameter("Corpus id", Required = true)] Guid corpusId, + [SwaggerParameter("Term list information", Required = true)] CreateTermList request) + { + Response.StatusCode = (int)HttpStatusCode.Created; + request.CorpusId = corpusId; + return await Mediator.Send(request); + } + + [HttpDelete("{corpusId:guid}/termList/{termListId:guid}")] + [SwaggerOperation("Deletes term list from selected corpus")] + [SwaggerResponse((int)HttpStatusCode.OK, "Term list was deleted", typeof(ExecutionResult), MediaTypeNames.Application.Json)] + [SwaggerResponse((int)HttpStatusCode.NotFound, "Term list was not found")] + [SwaggerResponse((int)HttpStatusCode.InternalServerError, "Internal server error")] + public async Task Delete( + [SwaggerParameter("Corpus id", Required = true)] Guid corpusId, + [SwaggerParameter("Term list id", Required = true)] Guid termListId) + { + var request = new DeleteTermList() + { + CorpusId = corpusId, + TermListId = termListId, + }; + return await Mediator.Send(request); + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/Controllers/Dashboard/TextController.cs b/src/apps/Rsdo.Concordancer.Api/Controllers/Dashboard/TextController.cs new file mode 100644 index 0000000..dbe4ab7 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/Controllers/Dashboard/TextController.cs @@ -0,0 +1,66 @@ +using System; +using System.Net; +using System.Net.Mime; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.Texts; +using Rsdo.Concordancer.ServiceModel.Shared; +using Swashbuckle.AspNetCore.Annotations; + +namespace Rsdo.Concordancer.Api.Controllers.Dashboard; + +public class TextController : BaseDashboardController +{ + public TextController(IMediator mediator) + : base(mediator) + { + } + + [HttpGet("{corpusId:guid}/text/{textId:guid}")] + [SwaggerOperation("Returns information about text")] + [SwaggerResponse((int)HttpStatusCode.OK, "Information about text", typeof(GetTextResponse), MediaTypeNames.Application.Json)] + [SwaggerResponse((int)HttpStatusCode.NotFound, "Text was not found")] + [SwaggerResponse((int)HttpStatusCode.InternalServerError, "Internal server error")] + public async Task Get( + [SwaggerParameter("Corpus id", Required = true)] Guid corpusId, + [SwaggerParameter("Text id", Required = true)] Guid textId) + { + var request = new GetText() + { + CorpusId = corpusId, + TextId = textId, + }; + return await Mediator.Send(request); + } + + [HttpPost("{corpusId:guid}/text")] + [SwaggerOperation("Creates text in selected corpus")] + [SwaggerResponse((int)HttpStatusCode.Created, "Text was created", typeof(ExecutionResult), MediaTypeNames.Application.Json)] + [SwaggerResponse((int)HttpStatusCode.InternalServerError, "Internal server error")] + public async Task Create( + [SwaggerParameter("Corpus id", Required = true)] Guid corpusId, + [SwaggerParameter("Text information", Required = true)] CreateText request) + { + Response.StatusCode = (int)HttpStatusCode.Created; + request.CorpusId = corpusId; + return await Mediator.Send(request); + } + + [HttpDelete("{corpusId:guid}/text/{textId:guid}")] + [SwaggerOperation("Deletes text from selected corpus")] + [SwaggerResponse((int)HttpStatusCode.OK, "Text was deleted", typeof(ExecutionResult), MediaTypeNames.Application.Json)] + [SwaggerResponse((int)HttpStatusCode.NotFound, "Text was not found")] + [SwaggerResponse((int)HttpStatusCode.InternalServerError, "Internal server error")] + public async Task Delete( + [SwaggerParameter("Corpus id", Required = true)] Guid corpusId, + [SwaggerParameter("Text id", Required = true)] Guid textId) + { + var request = new DeleteText() + { + CorpusId = corpusId, + TextId = textId, + }; + return await Mediator.Send(request); + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/Controllers/ServiceApiInfo.cs b/src/apps/Rsdo.Concordancer.Api/Controllers/ServiceApiInfo.cs new file mode 100644 index 0000000..c7db546 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/Controllers/ServiceApiInfo.cs @@ -0,0 +1,29 @@ +using System; +using Microsoft.OpenApi.Models; + +namespace Rsdo.Concordancer.Api.Controllers; + +public static class ServiceApiInfo +{ + public const string ServiceName = "RSDO"; + public const string ApiGroupConcordancer = "concordancer"; + public const string ApiGroupDashboard = "dashboard"; + + public static Version ServiceVersion => typeof(ServiceApiInfo).Assembly.GetName().Version; + + public static OpenApiInfo GetOpenApiInfo() + { + return new OpenApiInfo() + { + Title = $"{ServiceName} API", + Version = ServiceVersion.ToString(3), + Contact = new OpenApiContact() + { + Name = "Amebis, d. o. o., Kamnik", + Email = "info@amebis.si", + Url = new Uri("https://amebis.si"), + }, + Description = $"API which is used in a concordancer developed in the project RSDO (Razvoj slovenščine v digitalnem okolju).", + }; + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/Controllers/WebAppController.cs b/src/apps/Rsdo.Concordancer.Api/Controllers/WebAppController.cs new file mode 100644 index 0000000..1da3267 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/Controllers/WebAppController.cs @@ -0,0 +1,42 @@ +using System; +using System.IO; +using System.Linq; +using System.Net.Mime; +using HtmlAgilityPack; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; +using Rsdo.Concordancer.Core.Constants; + +namespace Rsdo.Concordancer.Api.Controllers +{ + public class WebAppController : Controller + { + private readonly IConfiguration configuration; + private readonly IWebHostEnvironment webHostEnvironment; + + public WebAppController(IConfiguration configuration, IWebHostEnvironment webHostEnvironment) + { + this.configuration = configuration; + this.webHostEnvironment = webHostEnvironment; + } + + public IActionResult Index() + { + var indexFilePath = webHostEnvironment.WebRootFileProvider.GetFileInfo("index.html").PhysicalPath; + var html = new HtmlDocument(); + html.Load(indexFilePath); + + var baseAppPath = configuration[ConfigurationKey.Web.BaseAppPath] ?? string.Empty; + var scriptNode = HtmlNode.CreateNode($""); + var headNode = html.DocumentNode.SelectSingleNode("//head"); + headNode.ChildNodes.Add(scriptNode); + + var indexStream = new MemoryStream(); + html.Save(indexStream); + indexStream.Position = 0; + + return File(indexStream, MediaTypeNames.Text.Html); + } + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/Dockerfile b/src/apps/Rsdo.Concordancer.Api/Dockerfile new file mode 100644 index 0000000..c665279 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/Dockerfile @@ -0,0 +1,48 @@ +FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base +WORKDIR /app +EXPOSE 80 + +FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build + +# COPY LOCAL NUGET PACKAGES +WORKDIR /nuget +COPY local-packages/. . + +# ADD LOCAL NUGET SOURCE +RUN dotnet nuget add source /nuget + +# RESTORE PACKAGES (with project files only) +WORKDIR /src/apps +COPY src/apps/Rsdo.Concordancer.Api/Rsdo.Concordancer.Api.csproj Rsdo.Concordancer.Api/Rsdo.Concordancer.Api.csproj + +WORKDIR /src/core +COPY src/core/Rsdo.Concordancer.Core/Rsdo.Concordancer.Core.csproj Rsdo.Concordancer.Core/Rsdo.Concordancer.Core.csproj +COPY src/core/Rsdo.Concordancer.Data/Rsdo.Concordancer.Data.csproj Rsdo.Concordancer.Data/Rsdo.Concordancer.Data.csproj +COPY src/core/Rsdo.Concordancer.Infrastructure/Rsdo.Concordancer.Infrastructure.csproj Rsdo.Concordancer.Infrastructure/Rsdo.Concordancer.Infrastructure.csproj +COPY src/core/Rsdo.Concordancer.ServiceModel/Rsdo.Concordancer.ServiceModel.csproj Rsdo.Concordancer.ServiceModel/Rsdo.Concordancer.ServiceModel.csproj +COPY src/core/Rsdo.Concordancer.Services/Rsdo.Concordancer.Services.csproj Rsdo.Concordancer.Services/Rsdo.Concordancer.Services.csproj + +WORKDIR /src/apps/Rsdo.Concordancer.Api +RUN dotnet restore Rsdo.Concordancer.Api.csproj + +# COPY ALL FILES +WORKDIR /src/apps +COPY src/apps/Rsdo.Concordancer.Api/. Rsdo.Concordancer.Api/ + +WORKDIR /src/core +COPY src/core/Rsdo.Concordancer.Core/. Rsdo.Concordancer.Core/ +COPY src/core/Rsdo.Concordancer.Data/. Rsdo.Concordancer.Data/ +COPY src/core/Rsdo.Concordancer.Infrastructure/. Rsdo.Concordancer.Infrastructure/ +COPY src/core/Rsdo.Concordancer.ServiceModel/. Rsdo.Concordancer.ServiceModel/ +COPY src/core/Rsdo.Concordancer.Services/. Rsdo.Concordancer.Services/ + +# BUILD +FROM build AS publish +WORKDIR /src/apps/Rsdo.Concordancer.Api +RUN dotnet publish "Rsdo.Concordancer.Api.csproj" -c Release -o /app/publish + +# COPY TO FINAL +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "Rsdo.Concordancer.Api.dll"] \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/Framework/HangfireConfigurationExtensions.cs b/src/apps/Rsdo.Concordancer.Api/Framework/HangfireConfigurationExtensions.cs new file mode 100644 index 0000000..6fc957e --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/Framework/HangfireConfigurationExtensions.cs @@ -0,0 +1,16 @@ +using Hangfire; +using Newtonsoft.Json; + +namespace Rsdo.Concordancer.Api.Framework; + +public static class HangfireConfigurationExtensions +{ + public static void UseMediator(this IGlobalConfiguration configuration) + { + var jsonSettings = new JsonSerializerSettings() + { + TypeNameHandling = TypeNameHandling.All, + }; + configuration.UseSerializerSettings(jsonSettings); + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/Framework/SerilogExtensions.cs b/src/apps/Rsdo.Concordancer.Api/Framework/SerilogExtensions.cs new file mode 100644 index 0000000..a604bff --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/Framework/SerilogExtensions.cs @@ -0,0 +1,47 @@ +using System; +using System.Net; +using Serilog; +using Serilog.Configuration; +using Serilog.Events; +using Serilog.Sinks.Email; + +namespace Rsdo.Concordancer.Api.Framework; + +public static class SerilogExtensions +{ + public static LoggerConfiguration RsdoEmail( + this LoggerSinkConfiguration sinkConfiguration, + string fromEmail, + string toEmail, + string mailServer, + int port, + bool enableSsl, + string userName, + string password, + string outputTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {Message}{NewLine}{Exception}", + LogEventLevel restrictedToMinimumLevel = LogEventLevel.Warning, + int batchPostingLimit = 100, + string mailSubject = "Log Email") + { + var connectionInfo = new EmailConnectionInfo() + { + FromEmail = fromEmail, + ToEmail = toEmail, + EmailSubject = mailSubject, + MailServer = mailServer, + Port = port, + EnableSsl = enableSsl, + }; + + if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(password)) + { + connectionInfo.NetworkCredentials = new NetworkCredential() + { + UserName = userName, + Password = password, + }; + } + + return sinkConfiguration.Email(connectionInfo: connectionInfo, restrictedToMinimumLevel: restrictedToMinimumLevel); + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/Program.cs b/src/apps/Rsdo.Concordancer.Api/Program.cs new file mode 100644 index 0000000..507919a --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/Program.cs @@ -0,0 +1,52 @@ +using System; +using System.IO; +using Autofac.Extensions.DependencyInjection; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; +using Serilog; + +namespace Rsdo.Concordancer.Api; + +public class Program +{ + public static int Main(string[] args) + { + // Read configuration file + var configuration = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("appsettings.json") + .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) + .Build(); + + // Create logger + Log.Logger = new LoggerConfiguration().ReadFrom.Configuration(configuration).CreateLogger(); + + // Run application + try + { + Log.Information("Starting web host"); + CreateHostBuilder(args).Build().Run(); + return 0; + } + catch (Exception e) + { + Log.Fatal(e, "Host terminated unexpectedly"); + return 1; + } + finally + { + Log.CloseAndFlush(); + } + } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .UseSerilog() + .UseServiceProviderFactory(new AutofacServiceProviderFactory()) + .ConfigureWebHostDefaults( + webBuilder => + { + webBuilder.UseStartup(); + webBuilder.UseWebRoot("./WebApp/build"); + }); +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/Properties/launchSettings.json b/src/apps/Rsdo.Concordancer.Api/Properties/launchSettings.json new file mode 100644 index 0000000..1312489 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/Properties/launchSettings.json @@ -0,0 +1,31 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:9184", + "sslPort": 44312 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "swagger", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "Rsdo.Concordancer.Api": { + "commandName": "Project", + "dotnetRunMessages": "true", + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "https://localhost:5001;http://localhost:5000", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/src/apps/Rsdo.Concordancer.Api/Rsdo.Concordancer.Api.csproj b/src/apps/Rsdo.Concordancer.Api/Rsdo.Concordancer.Api.csproj new file mode 100644 index 0000000..897933a --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/Rsdo.Concordancer.Api.csproj @@ -0,0 +1,44 @@ + + + + net6.0 + true + false + 1.0.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + diff --git a/src/apps/Rsdo.Concordancer.Api/Startup.cs b/src/apps/Rsdo.Concordancer.Api/Startup.cs new file mode 100644 index 0000000..6458b3e --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/Startup.cs @@ -0,0 +1,150 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text.Json.Serialization; +using Autofac; +using Hangfire; +using Hangfire.PostgreSql; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.OpenApi.Models; +using Rsdo.Concordancer.Api.Controllers; +using Rsdo.Concordancer.Api.Framework; +using Rsdo.Concordancer.Core.Constants; +using Rsdo.Concordancer.Data.CompositionRoot; +using Rsdo.Concordancer.Infrastructure.CompositionRoot; +using Rsdo.Concordancer.ServiceModel.Shared; +using Rsdo.Concordancer.Services.CompositionRoot; +using Rsdo.Concordancer.Services.Framework.Cache; +using Swashbuckle.AspNetCore.SwaggerGen; + +namespace Rsdo.Concordancer.Api; + +public class Startup +{ + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + + public IConfiguration Configuration { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + services.AddCors( + opt => + { + opt.AddPolicy( + "CorsPolicy", + policy => + { + policy.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader(); + }); + }); + services.AddControllers() + .AddJsonOptions( + opts => + { + // Bind strings to enums + opts.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); + }); + services.AddSwaggerGen( + c => + { + c.SwaggerDoc( + ServiceApiInfo.ApiGroupConcordancer, + info: new OpenApiInfo() + { + Title = $"{ServiceApiInfo.ServiceName} Concordancer API", + Version = $"v{ServiceApiInfo.ServiceVersion.ToString(3)}", + }); + c.SwaggerDoc( + ServiceApiInfo.ApiGroupDashboard, + info: new OpenApiInfo() + { + Title = $"{ServiceApiInfo.ServiceName} Dashboard API", + Version = $"v{ServiceApiInfo.ServiceVersion.ToString(3)}", + }); + + // enable attribute annotations + c.EnableAnnotations(); + + // include code documentation to the swagger doc + ConfigureSwaggerApiDoc(c, Assembly.GetExecutingAssembly(), typeof(ExecutionResult).Assembly); + }); + services.AddHangfire( + x => + { + // It would be better to use ConnectionStringProvider, but in this case + // we would have to build the container which would (at this point) double singletons. + // So we are duplicated code from ConnectionStringProvider + var connectionString = Configuration[ConfigurationKey.Database.MasterConnectionString]; + x.UsePostgreSqlStorage(connectionString); + x.UseMediator(); + }); + services.AddHangfireServer(); + services.AddHttpClient(); + } + + public void ConfigureSwaggerApiDoc(SwaggerGenOptions options, params Assembly[] assemblies) + { + foreach (var assembly in assemblies) + { + var xmlFile = $"{assembly.GetName().Name}.xml"; + var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); + options.IncludeXmlComments(xmlPath); + } + } + + public void ConfigureContainer(ContainerBuilder builder) + { + builder.RegisterModule(new ServicesModule()); + builder.RegisterModule(new InfrastructureModule()); + builder.RegisterModule(new DataModule()); + builder.RegisterBuildCallback( + (c) => + { + var warmUps = c.Resolve>(); + foreach (var warmUp in warmUps) + { + warmUp.WarmUp(); + } + }); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseSwagger(); + app.UseSwaggerUI( + c => + { + c.SwaggerEndpoint($"{ServiceApiInfo.ApiGroupConcordancer}/swagger.json", $"{ServiceApiInfo.ServiceName} Concordancer API"); + c.SwaggerEndpoint($"{ServiceApiInfo.ApiGroupDashboard}/swagger.json", $"{ServiceApiInfo.ServiceName} Dashboard API"); + }); + + app.UseStaticFiles(); + app.UseRouting(); + app.UseCors("CorsPolicy"); + app.UseAuthorization(); + + app.UseEndpoints( + endpoints => + { + endpoints.MapControllers(); + endpoints.MapHangfireDashboard("/hangfire"); + endpoints.MapFallbackToController("Index", "WebApp"); + }); + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/.gitignore b/src/apps/Rsdo.Concordancer.Api/WebApp/.gitignore new file mode 100644 index 0000000..4d29575 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/README.md b/src/apps/Rsdo.Concordancer.Api/WebApp/README.md new file mode 100644 index 0000000..58beeac --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/README.md @@ -0,0 +1,70 @@ +# Getting Started with Create React App + +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `npm start` + +Runs the app in the development mode.\ +Open [http://localhost:3000](http://localhost:3000) to view it in your browser. + +The page will reload when you make changes.\ +You may also see any lint errors in the console. + +### `npm test` + +Launches the test runner in the interactive watch mode.\ +See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `npm run build` + +Builds the app for production to the `build` folder.\ +It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.\ +Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `npm run eject` + +**Note: this is a one-way operation. Once you `eject`, you can't go back!** + +If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own. + +You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). + +### Code Splitting + +This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting) + +### Analyzing the Bundle Size + +This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size) + +### Making a Progressive Web App + +This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app) + +### Advanced Configuration + +This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration) + +### Deployment + +This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment) + +### `npm run build` fails to minify + +This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify) diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/package-lock.json b/src/apps/Rsdo.Concordancer.Api/WebApp/package-lock.json new file mode 100644 index 0000000..cb141bd --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/package-lock.json @@ -0,0 +1,29498 @@ +{ + "name": "concordancer-web", + "version": "0.1.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "concordancer-web", + "version": "0.1.0", + "dependencies": { + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^13.5.0", + "bootstrap": "^5.2.3", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-i18next": "^12.0.0", + "react-query": "^3.39.2", + "react-router-dom": "^6.4.3", + "react-scripts": "5.0.1", + "web-vitals": "^2.1.4" + }, + "devDependencies": { + "sass": "^1.56.1" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.0.1.tgz", + "integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==" + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", + "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", + "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.2", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-module-transforms": "^7.20.2", + "@babel/helpers": "^7.20.1", + "@babel/parser": "^7.20.2", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz", + "integrity": "sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==", + "dependencies": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "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/eslint-parser/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==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@babel/eslint-parser/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", + "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", + "dependencies": { + "@babel/types": "^7.20.2", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "dependencies": { + "@babel/compat-data": "^7.20.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", + "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", + "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "dependencies": { + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "dependencies": { + "@babel/types": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "dependencies": { + "@babel/types": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", + "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", + "dependencies": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", + "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", + "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "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.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", + "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.2.tgz", + "integrity": "sha512-nkBH96IBmgKnbHQ5gXFrcmez+Z9S2EIDKDQGp005ROqBigc88Tky4rzCnlP/lnlj245dCEQl4/YyV0V1kYh5dw==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.20.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/plugin-syntax-decorators": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@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-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@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-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@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-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", + "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", + "dependencies": { + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@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-proposal-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@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-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "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==", + "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==", + "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==", + "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==", + "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-decorators": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz", + "integrity": "sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "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==", + "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==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", + "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.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==", + "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==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", + "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", + "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.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.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", + "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "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-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", + "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-flow": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", + "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", + "dependencies": { + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", + "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", + "dependencies": { + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-simple-access": "^7.19.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", + "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", + "dependencies": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-identifier": "^7.19.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", + "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz", + "integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", + "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", + "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", + "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz", + "integrity": "sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.20.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "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-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", + "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", + "dependencies": { + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.20.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.20.2", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@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.20.0", + "@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-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.20.2", + "@babel/plugin-transform-classes": "^7.20.2", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.20.2", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.19.6", + "@babel/plugin-transform-modules-commonjs": "^7.19.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.6", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.20.1", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.20.2", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", + "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-typescript": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", + "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", + "dependencies": { + "regenerator-runtime": "^0.13.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", + "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", + "dependencies": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", + "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.1", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.1", + "@babel/types": "^7.20.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", + "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "dependencies": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "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==" + }, + "node_modules/@csstools/normalize.css": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", + "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==" + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", + "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.2", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", + "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", + "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", + "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", + "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", + "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", + "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", + "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", + "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", + "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", + "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", + "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", + "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", + "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2", + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.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==" + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "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==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "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==", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + }, + "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==", + "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==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/@jest/console/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/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==" + }, + "node_modules/@jest/console/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/@jest/core/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/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==" + }, + "node_modules/@jest/core/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.3.1.tgz", + "integrity": "sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g==", + "dependencies": { + "jest-get-type": "^29.2.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils/node_modules/jest-get-type": { + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz", + "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/@jest/reporters/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/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==" + }, + "node_modules/@jest/reporters/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/reporters/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/source-map/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/@jest/transform/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/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==" + }, + "node_modules/@jest/transform/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/transform/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/types/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/@jest/types/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/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==" + }, + "node_modules/@jest/types/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + }, + "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==", + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/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==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "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==", + "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==", + "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==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.9.tgz", + "integrity": "sha512-7QV4cqUwhkDIHpMAZ9mestSJ2DMIotVTbOUwbiudhjCRTAWWKIaBecELiEM2LT3AHFeOAaHIcFu4dbXjX+9GBA==", + "dependencies": { + "ansi-html-community": "^0.0.8", + "common-path-prefix": "^3.0.0", + "core-js-pure": "^3.23.3", + "error-stack-parser": "^2.0.6", + "find-up": "^5.0.0", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.3", + "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 <4.0.0", + "webpack": ">=4.43.0 <6.0.0", + "webpack-dev-server": "3.x || 4.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/@popperjs/core": { + "version": "2.11.6", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", + "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@remix-run/router": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.0.3.tgz", + "integrity": "sha512-ceuyTSs7PZ/tQqi19YZNBc5X7kj1f8p+4DIyrcIYFY9h+hd1OKm4RqtiWldR9eGEvIiJfsqwM4BsuCtRIuEw6Q==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", + "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==" + }, + "node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.5.tgz", + "integrity": "sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "dependencies": { + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "dependencies": { + "@babel/types": "^7.12.6" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "dependencies": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "dependencies": { + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@testing-library/dom": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.19.0.tgz", + "integrity": "sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^4.2.0", + "aria-query": "^5.0.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.4.4", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@testing-library/dom/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/@testing-library/dom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/@testing-library/dom/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/dom/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==" + }, + "node_modules/@testing-library/dom/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/dom/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "5.16.5", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz", + "integrity": "sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==", + "dependencies": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=8", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/jest-dom/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==" + }, + "node_modules/@testing-library/jest-dom/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react": { + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz", + "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.5.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@testing-library/user-event": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", + "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "engines": { + "node": ">= 6" + } + }, + "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==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==" + }, + "node_modules/@types/babel__core": { + "version": "7.1.20", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz", + "integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz", + "integrity": "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==", + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + }, + "node_modules/@types/express": { + "version": "4.17.14", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", + "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.31", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", + "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", + "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.2.3", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.3.tgz", + "integrity": "sha512-6XwoEbmatfyoCjWRX7z0fKMmgYKe9+/HrviJ5k0X/tjJWHGAezZOfYaxqQKuzG/TvQyr+ktjm4jgbk0s4/oF2w==", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jest/node_modules/@jest/schemas": { + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", + "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/@jest/types": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz", + "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==", + "dependencies": { + "@jest/schemas": "^29.0.0", + "@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/@types/jest/node_modules/@types/yargs": { + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/jest/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/@types/jest/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@types/jest/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==" + }, + "node_modules/@types/jest/node_modules/diff-sequences": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.3.1.tgz", + "integrity": "sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/expect": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.3.1.tgz", + "integrity": "sha512-gGb1yTgU30Q0O/tQq+z30KBWv24ApkMgFUpvKBkyLUBL68Wv8dHdJxTBZFl/iT8K/bqDHvUYRH6IIN3rToopPA==", + "dependencies": { + "@jest/expect-utils": "^29.3.1", + "jest-get-type": "^29.2.0", + "jest-matcher-utils": "^29.3.1", + "jest-message-util": "^29.3.1", + "jest-util": "^29.3.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@types/jest/node_modules/jest-diff": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.3.1.tgz", + "integrity": "sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw==", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.3.1", + "jest-get-type": "^29.2.0", + "pretty-format": "^29.3.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-get-type": { + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz", + "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-matcher-utils": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.3.1.tgz", + "integrity": "sha512-fkRMZUAScup3txIKfMe3AIZZmPEjWEdsPJFK3AIy5qRohWqQFg1qrmKfYXR9qEkNc7OdAu2N4KPHibEmy4HPeQ==", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.3.1", + "jest-get-type": "^29.2.0", + "pretty-format": "^29.3.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-message-util": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.3.1.tgz", + "integrity": "sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.3.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.3.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-util": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz", + "integrity": "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==", + "dependencies": { + "@jest/types": "^29.3.1", + "@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/@types/jest/node_modules/pretty-format": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", + "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", + "dependencies": { + "@jest/schemas": "^29.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/@types/jest/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + }, + "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==" + }, + "node_modules/@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" + }, + "node_modules/@types/node": { + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "node_modules/@types/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "node_modules/@types/q": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + }, + "node_modules/@types/react": { + "version": "18.0.25", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", + "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.0.9", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.9.tgz", + "integrity": "sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dependencies": { + "@types/node": "*" + } + }, + "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==" + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==" + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.5", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz", + "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==", + "dependencies": { + "@types/jest": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", + "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==" + }, + "node_modules/@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.44.0.tgz", + "integrity": "sha512-j5ULd7FmmekcyWeArx+i8x7sdRHzAtXTkmDPthE4amxZOWKFK7bomoJ4r7PJ8K7PoMzD16U8MmuZFAonr1ERvw==", + "dependencies": { + "@typescript-eslint/scope-manager": "5.44.0", + "@typescript-eslint/type-utils": "5.44.0", + "@typescript-eslint/utils": "5.44.0", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "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" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.44.0.tgz", + "integrity": "sha512-j8GLemAySe8oUCgILdUaT66pemdWSYcwUYG2Pb71O119hCdvkU+4q8sUTbnDg8NhlZEzSWG2N1v4IxT1kEZrGg==", + "dependencies": { + "@typescript-eslint/utils": "5.44.0" + }, + "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/@typescript-eslint/parser": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.44.0.tgz", + "integrity": "sha512-H7LCqbZnKqkkgQHaKLGC6KUjt3pjJDx8ETDqmwncyb6PuoigYajyAwBGz08VU/l86dZWZgI4zm5k2VaKqayYyA==", + "dependencies": { + "@typescript-eslint/scope-manager": "5.44.0", + "@typescript-eslint/types": "5.44.0", + "@typescript-eslint/typescript-estree": "5.44.0", + "debug": "^4.3.4" + }, + "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" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.44.0.tgz", + "integrity": "sha512-2pKml57KusI0LAhgLKae9kwWeITZ7IsZs77YxyNyIVOwQ1kToyXRaJLl+uDEXzMN5hnobKUOo2gKntK9H1YL8g==", + "dependencies": { + "@typescript-eslint/types": "5.44.0", + "@typescript-eslint/visitor-keys": "5.44.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.44.0.tgz", + "integrity": "sha512-A1u0Yo5wZxkXPQ7/noGkRhV4J9opcymcr31XQtOzcc5nO/IHN2E2TPMECKWYpM3e6olWEM63fq/BaL1wEYnt/w==", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.44.0", + "@typescript-eslint/utils": "5.44.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.44.0.tgz", + "integrity": "sha512-Tp+zDnHmGk4qKR1l+Y1rBvpjpm5tGXX339eAlRBDg+kgZkz9Bw+pqi4dyseOZMsGuSH69fYfPJCBKBrbPCxYFQ==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.44.0.tgz", + "integrity": "sha512-M6Jr+RM7M5zeRj2maSfsZK2660HKAJawv4Ud0xT+yauyvgrsHu276VtXlKDFnEmhG+nVEd0fYZNXGoAgxwDWJw==", + "dependencies": { + "@typescript-eslint/types": "5.44.0", + "@typescript-eslint/visitor-keys": "5.44.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/@typescript-eslint/utils": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.44.0.tgz", + "integrity": "sha512-fMzA8LLQ189gaBjS0MZszw5HBdZgVwxVFShCO3QN+ws3GlPkcy9YuS3U4wkT6su0w+Byjq3mS3uamy9HE4Yfjw==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.44.0", + "@typescript-eslint/types": "5.44.0", + "@typescript-eslint/typescript-estree": "5.44.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "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/@typescript-eslint/utils/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==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.44.0.tgz", + "integrity": "sha512-a48tLG8/4m62gPFbJ27FxwCOqPKxsb8KC3HkmYoq2As/4YyjQl1jDbRr1s63+g4FS/iIehjmN3L5UjmKva1HzQ==", + "dependencies": { + "@typescript-eslint/types": "5.44.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/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "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==" + }, + "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==" + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" + }, + "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==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "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==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-node/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", + "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "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==", + "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==", + "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-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "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==" + }, + "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==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "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==", + "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==", + "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==", + "engines": { + "node": ">=8" + } + }, + "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==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dependencies": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + }, + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "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.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", + "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", + "fraction.js": "^4.2.0", + "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.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.2.tgz", + "integrity": "sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" + }, + "node_modules/babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/babel-jest/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/babel-jest/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==" + }, + "node_modules/babel-jest/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "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==", + "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==", + "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": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-named-asset-import": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", + "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", + "peerDependencies": { + "@babel/core": "^7.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" + }, + "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==", + "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": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-react-app": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", + "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-decorators": "^7.16.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-transform-flow-strip-types": "^7.16.0", + "@babel/plugin-transform-react-display-name": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.4", + "@babel/preset-env": "^7.16.4", + "@babel/preset-react": "^7.16.0", + "@babel/preset-typescript": "^7.16.0", + "@babel/runtime": "^7.16.3", + "babel-plugin-macros": "^3.1.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24" + } + }, + "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==" + }, + "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==" + }, + "node_modules/bfj": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", + "integrity": "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==", + "dependencies": { + "bluebird": "^3.5.5", + "check-types": "^11.1.1", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "engines": { + "node": ">=0.6" + } + }, + "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==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "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.1", + "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==", + "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==", + "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==", + "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==" + }, + "node_modules/bonjour-service": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", + "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "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==" + }, + "node_modules/bootstrap": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz", + "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "peerDependencies": { + "@popperjs/core": "^2.11.6" + } + }, + "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==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/broadcast-channel": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/broadcast-channel/-/broadcast-channel-3.7.0.tgz", + "integrity": "sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "detect-node": "^2.1.0", + "js-sha3": "0.8.0", + "microseconds": "0.2.0", + "nano-time": "1.0.0", + "oblivious-set": "1.0.0", + "rimraf": "3.0.2", + "unload": "2.2.0" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, + "node_modules/browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + }, + "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==", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "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==" + }, + "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==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "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==", + "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==", + "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "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==", + "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.30001434", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz", + "integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "engines": { + "node": ">=4" + } + }, + "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==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "engines": { + "node": ">=10" + } + }, + "node_modules/check-types": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.2.tgz", + "integrity": "sha512-HBiYvXvn9Z70Z88XKjz3AEKd4HJhBXsa3j7xFnITAzoS8+q6eIGi8qDB8FKPBAjtuxjI/zFpwuiCb8oDtKOYrA==" + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "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" + }, + "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==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "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==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.2.tgz", + "integrity": "sha512-lVZdhvbEudris15CLytp2u6Y0p5EKfztae9Fqa189MfNmln9F33XuH69v5fvNfiRN5/0eAUz2yJL3mo+nhaRKg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" + }, + "node_modules/clean-css": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", + "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + }, + "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==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "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==" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" + }, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" + }, + "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==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "engines": { + "node": ">=4.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==" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "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==", + "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==", + "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==" + }, + "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==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" + }, + "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==", + "engines": { + "node": ">=0.8" + } + }, + "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==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "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==" + }, + "node_modules/core-js": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz", + "integrity": "sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", + "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", + "dependencies": { + "browserslist": "^4.21.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz", + "integrity": "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==", + "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==" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "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/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-blank-pseudo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-blank-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", + "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-has-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-loader": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.2.tgz", + "integrity": "sha512-oqGbbVcBJkm8QwmnNzrFrWTnudnRZC+1eXikLJl0n4ljcfotgRifpg2a1lKy8jTrc4/d9A/ap1GFq1jDKG7J+Q==", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.18", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "dependencies": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "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/css-minimizer-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==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/css-minimizer-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==" + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/css-minimizer-webpack-plugin/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "bin": { + "css-prefers-color-scheme": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/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==", + "engines": { + "node": ">=0.10.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==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" + }, + "node_modules/cssdb": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.1.0.tgz", + "integrity": "sha512-Sd99PrFgx28ez4GHu8yoQIufc/70h9oYowDf4EjeIKi8mac9whxRjhM3IaMr6EllP6KKKWtJrMfN6C7T9tIWvQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + }, + "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==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.14", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", + "integrity": "sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==", + "dependencies": { + "cssnano-preset-default": "^5.2.13", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.13", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", + "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.0", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.3", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.1", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/csso/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "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==" + }, + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "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==" + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz", + "integrity": "sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==" + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + }, + "node_modules/deep-equal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.1.0.tgz", + "integrity": "sha512-2pxgvWu3Alv1PoWEyVg7HS8YhGlUFUV7N5oOvfL6d+7xAmLSemMwv/c8Zv/i9KFzxV5Kt5CAvQc70fLwVuf4UA==", + "dependencies": { + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.2", + "get-intrinsic": "^1.1.3", + "is-arguments": "^1.1.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-equal/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "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==" + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "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==", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "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==", + "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==" + }, + "node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port-alt/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port-alt/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dependencies": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" + }, + "node_modules/dns-packet": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", + "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", + "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==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.14", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz", + "integrity": "sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==" + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.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==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "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==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "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==" + }, + "node_modules/ejs": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "engines": { + "node": ">=10" + }, + "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==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.11.0.tgz", + "integrity": "sha512-0Gcraf7gAJSQoPg+bTSXNhuzAYtXqLc4C011vb8S3B8XUSEkGYNBk20c68X9291VF4vvsCD8SPkr6Mza+DwU+g==", + "dependencies": { + "graceful-fs": "^4.2.9", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "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==", + "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==", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + }, + "node_modules/es-get-iterator": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", + "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", + "has-symbols": "^1.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-get-iterator/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dependencies": { + "has": "^1.0.3" + } + }, + "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==", + "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.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "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==" + }, + "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==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, + "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==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz", + "integrity": "sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==", + "dependencies": { + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "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.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "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.15.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "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.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "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-react-app": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", + "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.3", + "@rushstack/eslint-patch": "^1.1.0", + "@typescript-eslint/eslint-plugin": "^5.5.0", + "@typescript-eslint/parser": "^5.5.0", + "babel-preset-react-app": "^10.0.1", + "confusing-browser-globals": "^1.0.11", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^25.3.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.1", + "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-testing-library": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "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==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "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==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-flowtype": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", + "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", + "dependencies": { + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@babel/plugin-syntax-flow": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.9", + "eslint": "^8.1.0" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "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==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/eslint-plugin-jest": { + "version": "25.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", + "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", + "dependencies": { + "@typescript-eslint/experimental-utils": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", + "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", + "dependencies": { + "@babel/runtime": "^7.18.9", + "aria-query": "^4.2.2", + "array-includes": "^3.1.5", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.4.3", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.2", + "language-tags": "^1.0.5", + "minimatch": "^3.1.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.31.11", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz", + "integrity": "sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw==", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "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/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dependencies": { + "is-core-module": "^2.9.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-plugin-react/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-testing-library": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.9.1.tgz", + "integrity": "sha512-6BQp3tmb79jLLasPHJmy8DnxREe+2Pgf7L+7o09TSWPfdqqtQfRZmZNetr5mOs3yqZk/MRNxpN3RUpJe0wB4LQ==", + "dependencies": { + "@typescript-eslint/utils": "^5.13.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", + "npm": ">=6" + }, + "peerDependencies": { + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/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==", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "dependencies": { + "@types/eslint": "^7.29.0 || ^8.4.1", + "jest-worker": "^28.0.2", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "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/eslint-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==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/eslint-webpack-plugin/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/eslint-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==" + }, + "node_modules/eslint-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/eslint-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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/eslint/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==" + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/eslint/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/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==" + }, + "node_modules/eslint/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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==", + "engines": { + "node": ">=8" + } + }, + "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==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "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==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "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==", + "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==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "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==", + "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==" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "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==", + "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/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.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/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "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==", + "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==" + }, + "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==" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "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==", + "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==" + }, + "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==" + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "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==", + "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==", + "dependencies": { + "bser": "2.1.1" + } + }, + "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==", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/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==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "engines": { + "node": ">= 0.4.0" + } + }, + "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==", + "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==", + "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==", + "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==" + }, + "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==", + "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-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "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==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", + "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/fork-ts-checker-webpack-plugin/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/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==" + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" + }, + "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==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "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==", + "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==", + "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==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "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==", + "engines": { + "node": ">=8.0.0" + } + }, + "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "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==", + "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==" + }, + "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==", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "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==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "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/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + }, + "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==", + "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==" + }, + "node_modules/harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "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==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "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==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "engines": { + "node": ">= 6.0.0" + } + }, + "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==", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "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==" + }, + "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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + }, + "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==" + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-parse-stringify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", + "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", + "dependencies": { + "void-elements": "3.1.0" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "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==" + }, + "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==", + "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-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==" + }, + "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==", + "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": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dependencies": { + "@tootallnate/once": "1", + "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==", + "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==", + "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==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/i18next": { + "version": "22.0.6", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.0.6.tgz", + "integrity": "sha512-RlreNGoPIdDP4QG+qSA9PxZKGwlzmcozbI9ObI6+OyUa/Rp0EjZZA9ubyBjw887zVNZsC+7FI3sXX8oiTzAfig==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "peer": true, + "dependencies": { + "@babel/runtime": "^7.17.2" + } + }, + "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==", + "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==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" + }, + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", + "dependencies": { + "harmony-reflect": "^1.4.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "9.0.16", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz", + "integrity": "sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "devOptional": 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==", + "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==", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "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==", + "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==", + "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==", + "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==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "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-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "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==", + "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==", + "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-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dependencies": { + "has": "^1.0.3" + }, + "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==", + "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==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "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==", + "engines": { + "node": ">=6" + } + }, + "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==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "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==", + "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==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==" + }, + "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==", + "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-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "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==", + "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==", + "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==", + "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.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "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==" + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "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==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "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==", + "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-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jake/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jake/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==" + }, + "node_modules/jake/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jake/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jest-circus/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/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==" + }, + "node_modules/jest-circus/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jest-cli/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-cli/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==" + }, + "node_modules/jest-cli/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jest-config/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/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==" + }, + "node_modules/jest-config/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-diff/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jest-diff/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/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==" + }, + "node_modules/jest-diff/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jest-each/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/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==" + }, + "node_modules/jest-each/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jest-jasmine2/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-jasmine2/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==" + }, + "node_modules/jest-jasmine2/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jest-matcher-utils/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/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==" + }, + "node_modules/jest-matcher-utils/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jest-message-util/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/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==" + }, + "node_modules/jest-message-util/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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==", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jest-resolve/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/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==" + }, + "node_modules/jest-resolve/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jest-runner/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/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==" + }, + "node_modules/jest-runner/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jest-runtime/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/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==" + }, + "node_modules/jest-runtime/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jest-snapshot/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/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==" + }, + "node_modules/jest-snapshot/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jest-util/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/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==" + }, + "node_modules/jest-util/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jest-validate/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/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==" + }, + "node_modules/jest-validate/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", + "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", + "dependencies": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^28.0.0", + "jest-watcher": "^28.0.0", + "slash": "^4.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "jest": "^27.0.0 || ^28.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.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": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@types/yargs": { + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-watch-typeahead/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jest-watch-typeahead/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watch-typeahead/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==" + }, + "node_modules/jest-watch-typeahead/node_modules/emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "dependencies": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/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==", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/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==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/jest-watch-typeahead/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "dependencies": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/char-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", + "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jest-watcher/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/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==" + }, + "node_modules/jest-watcher/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/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==", + "engines": { + "node": ">=8" + } + }, + "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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-sdsl": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "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==" + }, + "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==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "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==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "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==" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "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==" + }, + "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==" + }, + "node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", + "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "dependencies": { + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" + }, + "engines": { + "node": ">=4.0" + } + }, + "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==", + "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==", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "engines": { + "node": ">= 8" + } + }, + "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==" + }, + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dependencies": { + "language-subtag-registry": "~0.3.2" + } + }, + "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==", + "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==", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "engines": { + "node": ">=10" + } + }, + "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==" + }, + "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==", + "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==", + "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": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "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==" + }, + "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==" + }, + "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==" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" + }, + "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==" + }, + "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==", + "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==", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "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==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lz-string": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", + "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "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==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/match-sorter": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.1.tgz", + "integrity": "sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "remove-accents": "0.4.2" + } + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.4.12", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz", + "integrity": "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==", + "dependencies": { + "fs-monkey": "^1.0.3" + }, + "engines": { + "node": ">= 4.0.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==" + }, + "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==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "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==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/microseconds": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz", + "integrity": "sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==" + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "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==", + "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==", + "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==", + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.0.tgz", + "integrity": "sha512-auqtVo8KhTScMsba7MbijqZTfibbXiBNlPAQbsVt7enQfcDYLdgG57eGxMqwVU3mfeWANY4F1wUg+rMF+ycZgw==", + "dependencies": { + "schema-utils": "^4.0.0" + }, + "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.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "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==", + "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==" + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.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==" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "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==" + }, + "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==", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/nano-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz", + "integrity": "sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==", + "dependencies": { + "big-integer": "^1.6.16" + } + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "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==" + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" + }, + "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==", + "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==" + }, + "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==", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "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==", + "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==" + }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + }, + "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==", + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "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==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", + "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==" + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "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==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "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.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", + "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", + "dependencies": { + "array.prototype.reduce": "^1.0.5", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "dependencies": { + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/oblivious-set": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.0.0.tgz", + "integrity": "sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==" + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "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==", + "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==", + "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==", + "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==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "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.3" + }, + "engines": { + "node": ">= 0.8.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==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "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==", + "engines": { + "node": ">=6" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "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==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "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/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "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==", + "dependencies": { + "no-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==", + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "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==" + }, + "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==" + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "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==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/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==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/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==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/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==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/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==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/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==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss": { + "version": "8.4.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", + "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", + "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-browser-comments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", + "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "browserslist": ">=4", + "postcss": ">=8" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", + "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", + "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", + "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-custom-media": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-custom-properties": { + "version": "12.1.10", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.10.tgz", + "integrity": "sha512-U3BHdgrYhCrwTVcByFHs9EOBoqcKq4Lf3kXwbTi4hhq0qWhl/pDWq2THbv/ICX/Fl9KqeHBb8OVrTf2OaYF07A==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", + "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", + "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-env-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-flexbugs-fixes": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", + "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", + "peerDependencies": { + "postcss": "^8.1.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", + "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-image-set-function": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", + "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/postcss-lab-function": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", + "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "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==", + "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-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", + "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "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.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "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==", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nesting": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", + "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-normalize": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", + "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", + "dependencies": { + "@csstools/normalize.css": "*", + "postcss-browser-comments": "^4", + "sanitize.css": "*" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "browserslist": ">= 4", + "postcss": ">= 8" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz", + "integrity": "sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==", + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "engines": { + "node": "^12 || ^14 || >=16" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", + "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", + "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-preset-env": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", + "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", + "dependencies": { + "@csstools/postcss-cascade-layers": "^1.1.1", + "@csstools/postcss-color-function": "^1.1.1", + "@csstools/postcss-font-format-keywords": "^1.0.1", + "@csstools/postcss-hwb-function": "^1.0.2", + "@csstools/postcss-ic-unit": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^2.0.7", + "@csstools/postcss-nested-calc": "^1.0.0", + "@csstools/postcss-normalize-display-values": "^1.0.1", + "@csstools/postcss-oklab-function": "^1.1.1", + "@csstools/postcss-progressive-custom-properties": "^1.3.0", + "@csstools/postcss-stepped-value-functions": "^1.0.1", + "@csstools/postcss-text-decoration-shorthand": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.2", + "@csstools/postcss-unset-value": "^1.0.2", + "autoprefixer": "^10.4.13", + "browserslist": "^4.21.4", + "css-blank-pseudo": "^3.0.3", + "css-has-pseudo": "^3.0.4", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^7.1.0", + "postcss-attribute-case-insensitive": "^5.0.2", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^4.2.4", + "postcss-color-hex-alpha": "^8.0.4", + "postcss-color-rebeccapurple": "^7.1.1", + "postcss-custom-media": "^8.0.2", + "postcss-custom-properties": "^12.1.10", + "postcss-custom-selectors": "^6.0.3", + "postcss-dir-pseudo-class": "^6.0.5", + "postcss-double-position-gradients": "^3.1.2", + "postcss-env-function": "^4.0.6", + "postcss-focus-visible": "^6.0.4", + "postcss-focus-within": "^5.0.4", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.5", + "postcss-image-set-function": "^4.0.7", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.2.1", + "postcss-logical": "^5.0.4", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.2.0", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.4", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.5", + "postcss-pseudo-class-any-link": "^7.1.6", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", + "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", + "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", + "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-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==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/postcss-svgo/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/postcss-svgo/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/postcss-svgo/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-svgo/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "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==" + }, + "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==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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==", + "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==" + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "dependencies": { + "asap": "~2.0.6" + } + }, + "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==", + "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==", + "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==" + }, + "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==", + "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==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "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==" + }, + "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==", + "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/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "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==", + "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==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-app-polyfill": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", + "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", + "dependencies": { + "core-js": "^3.19.2", + "object-assign": "^4.1.1", + "promise": "^8.1.0", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.9", + "whatwg-fetch": "^3.6.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "dependencies": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/react-dev-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/react-dev-utils/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/react-dev-utils/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==" + }, + "node_modules/react-dev-utils/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dev-utils/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-error-overlay": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" + }, + "node_modules/react-i18next": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-12.0.0.tgz", + "integrity": "sha512-/O7N6aIEAl1FaWZBNvhdIo9itvF/MO/nRKr9pYqRc9LhuC1u21SlfwpiYQqvaeNSEW3g3qUXLREOWMt+gxrWbg==", + "dependencies": { + "@babel/runtime": "^7.14.5", + "html-parse-stringify": "^3.0.1" + }, + "peerDependencies": { + "i18next": ">= 19.0.0", + "react": ">= 16.8.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "node_modules/react-query": { + "version": "3.39.2", + "resolved": "https://registry.npmjs.org/react-query/-/react-query-3.39.2.tgz", + "integrity": "sha512-F6hYDKyNgDQfQOuR1Rsp3VRzJnWHx6aRnnIZHMNGGgbL3SBgpZTDg8MQwmxOgpCAoqZJA+JSNCydF1xGJqKOCA==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "broadcast-channel": "^3.4.1", + "match-sorter": "^6.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.4.3.tgz", + "integrity": "sha512-BT6DoGn6aV1FVP5yfODMOiieakp3z46P1Fk0RNzJMACzE7C339sFuHebfvWtnB4pzBvXXkHP2vscJzWRuUjTtA==", + "dependencies": { + "@remix-run/router": "1.0.3" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.4.3.tgz", + "integrity": "sha512-MiaYQU8CwVCaOfJdYvt84KQNjT78VF0TJrA17SIQgNHRvLnXDJO6qsFqq8F/zzB1BWZjCFIrQpu4QxcshitziQ==", + "dependencies": { + "@remix-run/router": "1.0.3", + "react-router": "6.4.3" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-scripts": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", + "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", + "dependencies": { + "@babel/core": "^7.16.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@svgr/webpack": "^5.5.0", + "babel-jest": "^27.4.2", + "babel-loader": "^8.2.3", + "babel-plugin-named-asset-import": "^0.3.8", + "babel-preset-react-app": "^10.0.1", + "bfj": "^7.0.2", + "browserslist": "^4.18.1", + "camelcase": "^6.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "css-loader": "^6.5.1", + "css-minimizer-webpack-plugin": "^3.2.0", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "eslint": "^8.3.0", + "eslint-config-react-app": "^7.0.1", + "eslint-webpack-plugin": "^3.1.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "html-webpack-plugin": "^5.5.0", + "identity-obj-proxy": "^3.0.0", + "jest": "^27.4.3", + "jest-resolve": "^27.4.2", + "jest-watch-typeahead": "^1.0.0", + "mini-css-extract-plugin": "^2.4.5", + "postcss": "^8.4.4", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-loader": "^6.2.1", + "postcss-normalize": "^10.0.1", + "postcss-preset-env": "^7.0.1", + "prompts": "^2.4.2", + "react-app-polyfill": "^3.0.0", + "react-dev-utils": "^12.0.1", + "react-refresh": "^0.11.0", + "resolve": "^1.20.0", + "resolve-url-loader": "^4.0.0", + "sass-loader": "^12.3.0", + "semver": "^7.3.5", + "source-map-loader": "^3.0.0", + "style-loader": "^3.3.1", + "tailwindcss": "^3.0.2", + "terser-webpack-plugin": "^5.2.5", + "webpack": "^5.64.4", + "webpack-dev-server": "^4.6.0", + "webpack-manifest-plugin": "^4.0.2", + "workbox-webpack-plugin": "^6.4.1" + }, + "bin": { + "react-scripts": "bin/react-scripts.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + }, + "peerDependencies": { + "react": ">= 16", + "typescript": "^3.2.1 || ^4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "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==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", + "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "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==", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remove-accents": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", + "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==" + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "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==", + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==" + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dependencies": { + "is-core-module": "^2.9.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-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==", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", + "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^7.0.35", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=8.9" + }, + "peerDependencies": { + "rework": "1.0.1", + "rework-visit": "1.0.0" + }, + "peerDependenciesMeta": { + "rework": { + "optional": true + }, + "rework-visit": { + "optional": true + } + } + }, + "node_modules/resolve-url-loader/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, + "node_modules/resolve-url-loader/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/resolve-url-loader/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "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==", + "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==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/rollup-plugin-terser/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "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/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==", + "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.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.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==" + }, + "node_modules/sanitize.css": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", + "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==" + }, + "node_modules/sass": { + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.56.1.tgz", + "integrity": "sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==", + "devOptional": 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": ">=12.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==", + "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/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "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==" + }, + "node_modules/selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "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==", + "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==" + }, + "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==" + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "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==", + "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==", + "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==", + "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==", + "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==" + }, + "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==" + }, + "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==" + }, + "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==", + "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==", + "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/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "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==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", + "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "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==" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "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==", + "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.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "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==", + "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/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" + }, + "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==", + "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==", + "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==" + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "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==", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" + }, + "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==", + "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==" + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "engines": { + "node": ">=10" + } + }, + "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==", + "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==", + "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==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-loader": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", + "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "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==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/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==", + "dependencies": { + "has-flag": "^4.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==", + "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==" + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/svgo/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "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==" + }, + "node_modules/tailwindcss": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.4.tgz", + "integrity": "sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==", + "dependencies": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.6", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.18", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "6.0.0", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/tailwindcss/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==" + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", + "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "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.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "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/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==" + }, + "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==", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "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==" + }, + "node_modules/throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==" + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + }, + "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==", + "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==", + "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==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", + "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/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==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "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==", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "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==" + }, + "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==", + "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==", + "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==", + "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==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", + "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "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==", + "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/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==", + "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==", + "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==", + "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==", + "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==", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unload": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz", + "integrity": "sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==", + "dependencies": { + "@babel/runtime": "^7.6.2", + "detect-node": "^2.0.4" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "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==", + "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==" + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" + }, + "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==", + "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==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "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==", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-vitals": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz", + "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==" + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "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.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "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-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "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.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "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==", + "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==" + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", + "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", + "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.1", + "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", + "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.1", + "ws": "^8.4.2" + }, + "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-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "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==", + "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==" + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "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/webpack-manifest-plugin": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", + "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", + "dependencies": { + "tapable": "^2.0.0", + "webpack-sources": "^2.2.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "peerDependencies": { + "webpack": "^4.44.2 || ^5.47.0" + } + }, + "node_modules/webpack-manifest-plugin/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", + "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", + "dependencies": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "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==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "node_modules/webpack/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==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.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==", + "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==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-encoding/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==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "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==", + "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-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-background-sync": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz", + "integrity": "sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz", + "integrity": "sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==", + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-build": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.4.tgz", + "integrity": "sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==", + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.5.4", + "workbox-broadcast-update": "6.5.4", + "workbox-cacheable-response": "6.5.4", + "workbox-core": "6.5.4", + "workbox-expiration": "6.5.4", + "workbox-google-analytics": "6.5.4", + "workbox-navigation-preload": "6.5.4", + "workbox-precaching": "6.5.4", + "workbox-range-requests": "6.5.4", + "workbox-recipes": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4", + "workbox-streams": "6.5.4", + "workbox-sw": "6.5.4", + "workbox-window": "6.5.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "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/workbox-build/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/workbox-build/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==" + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "node_modules/workbox-build/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz", + "integrity": "sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==", + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-core": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.4.tgz", + "integrity": "sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==" + }, + "node_modules/workbox-expiration": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.4.tgz", + "integrity": "sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-google-analytics": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz", + "integrity": "sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==", + "dependencies": { + "workbox-background-sync": "6.5.4", + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz", + "integrity": "sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==", + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-precaching": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.4.tgz", + "integrity": "sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==", + "dependencies": { + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "node_modules/workbox-range-requests": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz", + "integrity": "sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==", + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-recipes": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.4.tgz", + "integrity": "sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==", + "dependencies": { + "workbox-cacheable-response": "6.5.4", + "workbox-core": "6.5.4", + "workbox-expiration": "6.5.4", + "workbox-precaching": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "node_modules/workbox-routing": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.4.tgz", + "integrity": "sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==", + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-strategies": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.4.tgz", + "integrity": "sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==", + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-streams": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.4.tgz", + "integrity": "sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==", + "dependencies": { + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4" + } + }, + "node_modules/workbox-sw": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.4.tgz", + "integrity": "sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==" + }, + "node_modules/workbox-webpack-plugin": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.5.4.tgz", + "integrity": "sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg==", + "dependencies": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "6.5.4" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.9.0" + } + }, + "node_modules/workbox-webpack-plugin/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/workbox-window": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.4.tgz", + "integrity": "sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==", + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.5.4" + } + }, + "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==", + "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/wrap-ansi/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/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==" + }, + "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==" + }, + "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==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "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/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "engines": { + "node": ">=10" + } + }, + "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@adobe/css-tools": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.0.1.tgz", + "integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==" + }, + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", + "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==" + }, + "@babel/core": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", + "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.2", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-module-transforms": "^7.20.2", + "@babel/helpers": "^7.20.1", + "@babel/parser": "^7.20.2", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/eslint-parser": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz", + "integrity": "sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==", + "requires": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "dependencies": { + "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==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/generator": { + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", + "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", + "requires": { + "@babel/types": "^7.20.2", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "requires": { + "@babel/compat-data": "^7.20.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", + "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.6" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", + "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "requires": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "requires": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "requires": { + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-replace-supers": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "requires": { + "@babel/types": "^7.20.2" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "requires": { + "@babel/types": "^7.20.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + }, + "@babel/helper-wrap-function": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", + "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", + "requires": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + } + }, + "@babel/helpers": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", + "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", + "requires": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.0" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", + "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==" + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "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.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", + "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.2.tgz", + "integrity": "sha512-nkBH96IBmgKnbHQ5gXFrcmez+Z9S2EIDKDQGp005ROqBigc88Tky4rzCnlP/lnlj245dCEQl4/YyV0V1kYh5dw==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.20.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/plugin-syntax-decorators": "^7.19.0" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", + "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", + "requires": { + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.1" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@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==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@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==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@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==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@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==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz", + "integrity": "sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@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==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@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==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-flow": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", + "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@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==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@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==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@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==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@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==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@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==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@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==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@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==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@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==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@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==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@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==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", + "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", + "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", + "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", + "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", + "requires": { + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-flow": "^7.18.6" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "requires": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", + "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", + "requires": { + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", + "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", + "requires": { + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-simple-access": "^7.19.4" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", + "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", + "requires": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-identifier": "^7.19.1" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", + "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz", + "integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-constant-elements": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", + "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", + "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.19.0" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "requires": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", + "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", + "requires": { + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz", + "integrity": "sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.20.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/preset-env": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", + "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", + "requires": { + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.20.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.20.2", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@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.20.0", + "@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-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.20.2", + "@babel/plugin-transform-classes": "^7.20.2", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.20.2", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.19.6", + "@babel/plugin-transform-modules-commonjs": "^7.19.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.6", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.20.1", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.20.2", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-react": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + } + }, + "@babel/preset-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", + "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-typescript": "^7.18.6" + } + }, + "@babel/runtime": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", + "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", + "requires": { + "regenerator-runtime": "^0.13.10" + } + }, + "@babel/runtime-corejs3": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", + "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", + "requires": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.10" + } + }, + "@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", + "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.1", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.1", + "@babel/types": "^7.20.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", + "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + }, + "@csstools/normalize.css": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", + "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==" + }, + "@csstools/postcss-cascade-layers": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", + "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", + "requires": { + "@csstools/selector-specificity": "^2.0.2", + "postcss-selector-parser": "^6.0.10" + } + }, + "@csstools/postcss-color-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", + "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", + "requires": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-font-format-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", + "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-hwb-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", + "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-ic-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", + "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", + "requires": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-is-pseudo-class": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", + "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", + "requires": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + } + }, + "@csstools/postcss-nested-calc": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", + "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-normalize-display-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", + "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-oklab-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", + "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", + "requires": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-stepped-value-functions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", + "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-text-decoration-shorthand": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", + "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-trigonometric-functions": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", + "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-unset-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", + "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", + "requires": {} + }, + "@csstools/selector-specificity": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", + "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", + "requires": {} + }, + "@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.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" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "requires": { + "type-fest": "^0.20.2" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, + "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==" + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + }, + "@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==", + "requires": { + "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" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "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==", + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, + "@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==" + }, + "@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "requires": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + } + }, + "@jest/expect-utils": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.3.1.tgz", + "integrity": "sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g==", + "requires": { + "jest-get-type": "^29.2.0" + }, + "dependencies": { + "jest-get-type": { + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz", + "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==" + } + } + }, + "@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "requires": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + } + }, + "@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "requires": { + "@sinclair/typebox": "^0.24.1" + } + }, + "@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "requires": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + } + }, + "@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + }, + "@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==", + "requires": { + "eslint-scope": "5.1.1" + }, + "dependencies": { + "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==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + } + } + }, + "@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==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@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==" + }, + "@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==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.9.tgz", + "integrity": "sha512-7QV4cqUwhkDIHpMAZ9mestSJ2DMIotVTbOUwbiudhjCRTAWWKIaBecELiEM2LT3AHFeOAaHIcFu4dbXjX+9GBA==", + "requires": { + "ansi-html-community": "^0.0.8", + "common-path-prefix": "^3.0.0", + "core-js-pure": "^3.23.3", + "error-stack-parser": "^2.0.6", + "find-up": "^5.0.0", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.3", + "schema-utils": "^3.0.0", + "source-map": "^0.7.3" + } + }, + "@popperjs/core": { + "version": "2.11.6", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", + "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==", + "peer": true + }, + "@remix-run/router": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.0.3.tgz", + "integrity": "sha512-ceuyTSs7PZ/tQqi19YZNBc5X7kj1f8p+4DIyrcIYFY9h+hd1OKm4RqtiWldR9eGEvIiJfsqwM4BsuCtRIuEw6Q==" + }, + "@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + } + }, + "@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "requires": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + } + } + }, + "@rushstack/eslint-patch": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", + "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==" + }, + "@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "@sinonjs/commons": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.5.tgz", + "integrity": "sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==", + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "requires": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==" + }, + "@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==" + }, + "@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==" + }, + "@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==" + }, + "@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==" + }, + "@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==" + }, + "@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==" + }, + "@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==" + }, + "@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "requires": { + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + } + }, + "@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "requires": { + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + } + }, + "@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "requires": { + "@babel/types": "^7.12.6" + } + }, + "@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "requires": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + } + }, + "@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "requires": { + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" + } + }, + "@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" + } + }, + "@testing-library/dom": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.19.0.tgz", + "integrity": "sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^4.2.0", + "aria-query": "^5.0.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.4.4", + "pretty-format": "^27.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "requires": { + "deep-equal": "^2.0.5" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@testing-library/jest-dom": { + "version": "5.16.5", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz", + "integrity": "sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==", + "requires": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "requires": { + "deep-equal": "^2.0.5" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@testing-library/react": { + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz", + "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==", + "requires": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.5.0", + "@types/react-dom": "^18.0.0" + } + }, + "@testing-library/user-event": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", + "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", + "requires": { + "@babel/runtime": "^7.12.5" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + }, + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" + }, + "@types/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==" + }, + "@types/babel__core": { + "version": "7.1.20", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz", + "integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==", + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz", + "integrity": "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==", + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + }, + "@types/express": { + "version": "4.17.14", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", + "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.31", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", + "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "requires": { + "@types/node": "*" + } + }, + "@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" + }, + "@types/http-proxy": { + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", + "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "29.2.3", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.3.tgz", + "integrity": "sha512-6XwoEbmatfyoCjWRX7z0fKMmgYKe9+/HrviJ5k0X/tjJWHGAezZOfYaxqQKuzG/TvQyr+ktjm4jgbk0s4/oF2w==", + "requires": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + }, + "dependencies": { + "@jest/schemas": { + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", + "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", + "requires": { + "@sinclair/typebox": "^0.24.1" + } + }, + "@jest/types": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz", + "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==", + "requires": { + "@jest/schemas": "^29.0.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "diff-sequences": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.3.1.tgz", + "integrity": "sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==" + }, + "expect": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.3.1.tgz", + "integrity": "sha512-gGb1yTgU30Q0O/tQq+z30KBWv24ApkMgFUpvKBkyLUBL68Wv8dHdJxTBZFl/iT8K/bqDHvUYRH6IIN3rToopPA==", + "requires": { + "@jest/expect-utils": "^29.3.1", + "jest-get-type": "^29.2.0", + "jest-matcher-utils": "^29.3.1", + "jest-message-util": "^29.3.1", + "jest-util": "^29.3.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "jest-diff": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.3.1.tgz", + "integrity": "sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw==", + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.3.1", + "jest-get-type": "^29.2.0", + "pretty-format": "^29.3.1" + } + }, + "jest-get-type": { + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz", + "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==" + }, + "jest-matcher-utils": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.3.1.tgz", + "integrity": "sha512-fkRMZUAScup3txIKfMe3AIZZmPEjWEdsPJFK3AIy5qRohWqQFg1qrmKfYXR9qEkNc7OdAu2N4KPHibEmy4HPeQ==", + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^29.3.1", + "jest-get-type": "^29.2.0", + "pretty-format": "^29.3.1" + } + }, + "jest-message-util": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.3.1.tgz", + "integrity": "sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.3.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.3.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-util": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz", + "integrity": "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==", + "requires": { + "@jest/types": "^29.3.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "pretty-format": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", + "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", + "requires": { + "@jest/schemas": "^29.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + }, + "@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" + }, + "@types/node": { + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "@types/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==" + }, + "@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "@types/q": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + }, + "@types/react": { + "version": "18.0.25", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", + "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "18.0.9", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.9.tgz", + "integrity": "sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==", + "requires": { + "@types/react": "*" + } + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "requires": { + "@types/node": "*" + } + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==" + }, + "@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "requires": { + "@types/node": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "@types/testing-library__jest-dom": { + "version": "5.14.5", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz", + "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==", + "requires": { + "@types/jest": "*" + } + }, + "@types/trusted-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", + "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==" + }, + "@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "requires": { + "@types/node": "*" + } + }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.44.0.tgz", + "integrity": "sha512-j5ULd7FmmekcyWeArx+i8x7sdRHzAtXTkmDPthE4amxZOWKFK7bomoJ4r7PJ8K7PoMzD16U8MmuZFAonr1ERvw==", + "requires": { + "@typescript-eslint/scope-manager": "5.44.0", + "@typescript-eslint/type-utils": "5.44.0", + "@typescript-eslint/utils": "5.44.0", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.44.0.tgz", + "integrity": "sha512-j8GLemAySe8oUCgILdUaT66pemdWSYcwUYG2Pb71O119hCdvkU+4q8sUTbnDg8NhlZEzSWG2N1v4IxT1kEZrGg==", + "requires": { + "@typescript-eslint/utils": "5.44.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.44.0.tgz", + "integrity": "sha512-H7LCqbZnKqkkgQHaKLGC6KUjt3pjJDx8ETDqmwncyb6PuoigYajyAwBGz08VU/l86dZWZgI4zm5k2VaKqayYyA==", + "requires": { + "@typescript-eslint/scope-manager": "5.44.0", + "@typescript-eslint/types": "5.44.0", + "@typescript-eslint/typescript-estree": "5.44.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.44.0.tgz", + "integrity": "sha512-2pKml57KusI0LAhgLKae9kwWeITZ7IsZs77YxyNyIVOwQ1kToyXRaJLl+uDEXzMN5hnobKUOo2gKntK9H1YL8g==", + "requires": { + "@typescript-eslint/types": "5.44.0", + "@typescript-eslint/visitor-keys": "5.44.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.44.0.tgz", + "integrity": "sha512-A1u0Yo5wZxkXPQ7/noGkRhV4J9opcymcr31XQtOzcc5nO/IHN2E2TPMECKWYpM3e6olWEM63fq/BaL1wEYnt/w==", + "requires": { + "@typescript-eslint/typescript-estree": "5.44.0", + "@typescript-eslint/utils": "5.44.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.44.0.tgz", + "integrity": "sha512-Tp+zDnHmGk4qKR1l+Y1rBvpjpm5tGXX339eAlRBDg+kgZkz9Bw+pqi4dyseOZMsGuSH69fYfPJCBKBrbPCxYFQ==" + }, + "@typescript-eslint/typescript-estree": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.44.0.tgz", + "integrity": "sha512-M6Jr+RM7M5zeRj2maSfsZK2660HKAJawv4Ud0xT+yauyvgrsHu276VtXlKDFnEmhG+nVEd0fYZNXGoAgxwDWJw==", + "requires": { + "@typescript-eslint/types": "5.44.0", + "@typescript-eslint/visitor-keys": "5.44.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.44.0.tgz", + "integrity": "sha512-fMzA8LLQ189gaBjS0MZszw5HBdZgVwxVFShCO3QN+ws3GlPkcy9YuS3U4wkT6su0w+Byjq3mS3uamy9HE4Yfjw==", + "requires": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.44.0", + "@typescript-eslint/types": "5.44.0", + "@typescript-eslint/typescript-estree": "5.44.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "dependencies": { + "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==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.44.0.tgz", + "integrity": "sha512-a48tLG8/4m62gPFbJ27FxwCOqPKxsb8KC3HkmYoq2As/4YyjQl1jDbRr1s63+g4FS/iIehjmN3L5UjmKva1HzQ==", + "requires": { + "@typescript-eslint/types": "5.44.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "@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==" + }, + "abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" + }, + "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==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" + }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + } + } + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "requires": {} + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "requires": {} + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + } + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + }, + "address": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", + "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==" + }, + "adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + } + }, + "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==", + "requires": { + "debug": "4" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "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==" + } + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "requires": {} + }, + "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==", + "requires": { + "type-fest": "^0.21.3" + } + }, + "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==" + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "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==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + }, + "array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + } + }, + "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==" + }, + "array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.reduce": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", + "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + } + }, + "array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" + }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, + "autoprefixer": { + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "requires": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, + "axe-core": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.2.tgz", + "integrity": "sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA==" + }, + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" + }, + "babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "requires": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "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==", + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "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==", + "requires": { + "@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" + } + }, + "babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "requires": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + } + }, + "babel-plugin-named-asset-import": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", + "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", + "requires": {} + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + } + }, + "babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" + }, + "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==", + "requires": { + "@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" + } + }, + "babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "requires": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "babel-preset-react-app": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", + "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", + "requires": { + "@babel/core": "^7.16.0", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-decorators": "^7.16.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-transform-flow-strip-types": "^7.16.0", + "@babel/plugin-transform-react-display-name": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.4", + "@babel/preset-env": "^7.16.4", + "@babel/preset-react": "^7.16.0", + "@babel/preset-typescript": "^7.16.0", + "@babel/runtime": "^7.16.3", + "babel-plugin-macros": "^3.1.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "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==" + }, + "bfj": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", + "integrity": "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==", + "requires": { + "bluebird": "^3.5.5", + "check-types": "^11.1.1", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + } + }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "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.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "bonjour-service": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", + "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", + "requires": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "bootstrap": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz", + "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==", + "requires": {} + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "broadcast-channel": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/broadcast-channel/-/broadcast-channel-3.7.0.tgz", + "integrity": "sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==", + "requires": { + "@babel/runtime": "^7.7.2", + "detect-node": "^2.1.0", + "js-sha3": "0.8.0", + "microseconds": "0.2.0", + "nano-time": "1.0.0", + "oblivious-set": "1.0.0", + "rimraf": "3.0.2", + "unload": "2.2.0" + } + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, + "browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "requires": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "requires": { + "node-int64": "^0.4.0" + } + }, + "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==" + }, + "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==" + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" + }, + "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==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001434", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz", + "integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==" + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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==" + }, + "check-types": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.2.tgz", + "integrity": "sha512-HBiYvXvn9Z70Z88XKjz3AEKd4HJhBXsa3j7xFnITAzoS8+q6eIGi8qDB8FKPBAjtuxjI/zFpwuiCb8oDtKOYrA==" + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.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" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "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==" + }, + "ci-info": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.2.tgz", + "integrity": "sha512-lVZdhvbEudris15CLytp2u6Y0p5EKfztae9Fqa189MfNmln9F33XuH69v5fvNfiRN5/0eAUz2yJL3mo+nhaRKg==" + }, + "cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" + }, + "clean-css": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", + "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + }, + "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==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" + }, + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" + }, + "common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" + }, + "common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "requires": { + "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" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "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==" + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" + }, + "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==" + }, + "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==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "core-js": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz", + "integrity": "sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==" + }, + "core-js-compat": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", + "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", + "requires": { + "browserslist": "^4.21.4" + } + }, + "core-js-pure": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz", + "integrity": "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==" + }, + "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==" + }, + "cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "requires": { + "@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" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "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==" + }, + "css-blank-pseudo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "css-declaration-sorter": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", + "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", + "requires": {} + }, + "css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "css-loader": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.2.tgz", + "integrity": "sha512-oqGbbVcBJkm8QwmnNzrFrWTnudnRZC+1eXikLJl0n4ljcfotgRifpg2a1lKy8jTrc4/d9A/ap1GFq1jDKG7J+Q==", + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.18", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + } + }, + "css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "requires": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "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==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "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==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "requires": {} + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" + }, + "css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" + }, + "cssdb": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.1.0.tgz", + "integrity": "sha512-Sd99PrFgx28ez4GHu8yoQIufc/70h9oYowDf4EjeIKi8mac9whxRjhM3IaMr6EllP6KKKWtJrMfN6C7T9tIWvQ==" + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "cssnano": { + "version": "5.1.14", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", + "integrity": "sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==", + "requires": { + "cssnano-preset-default": "^5.2.13", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + } + }, + "cssnano-preset-default": { + "version": "5.2.13", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", + "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", + "requires": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.0", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.3", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.1", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + } + }, + "cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "requires": {} + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "requires": { + "css-tree": "^1.1.2" + }, + "dependencies": { + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + } + } + }, + "csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "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==" + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decimal.js": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz", + "integrity": "sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==" + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + }, + "deep-equal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.1.0.tgz", + "integrity": "sha512-2pxgvWu3Alv1PoWEyVg7HS8YhGlUFUV7N5oOvfL6d+7xAmLSemMwv/c8Zv/i9KFzxV5Kt5CAvQc70fLwVuf4UA==", + "requires": { + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.2", + "get-intrinsic": "^1.1.3", + "is-arguments": "^1.1.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.8" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + } + } + }, + "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==" + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + }, + "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==", + "requires": { + "execa": "^5.0.0" + } + }, + "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==" + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "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==" + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "requires": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "requires": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + } + }, + "didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==" + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" + }, + "dns-packet": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", + "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-accessibility-api": { + "version": "0.5.14", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz", + "integrity": "sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==" + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" + } + } + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "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==" + }, + "ejs": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "requires": { + "jake": "^10.8.5" + } + }, + "electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + }, + "emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==" + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "enhanced-resolve": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.11.0.tgz", + "integrity": "sha512-0Gcraf7gAJSQoPg+bTSXNhuzAYtXqLc4C011vb8S3B8XUSEkGYNBk20c68X9291VF4vvsCD8SPkr6Mza+DwU+g==", + "requires": { + "graceful-fs": "^4.2.9", + "tapable": "^2.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "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==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "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==", + "requires": { + "stackframe": "^1.3.4" + } + }, + "es-abstract": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + }, + "es-get-iterator": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", + "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", + "has-symbols": "^1.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + } + } + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "requires": { + "has": "^1.0.3" + } + }, + "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==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "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==" + }, + "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==" + }, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, + "eslint": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz", + "integrity": "sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==", + "requires": { + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "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.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "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.15.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "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.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "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==" + }, + "globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "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==" + } + } + }, + "eslint-config-react-app": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", + "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", + "requires": { + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.3", + "@rushstack/eslint-patch": "^1.1.0", + "@typescript-eslint/eslint-plugin": "^5.5.0", + "@typescript-eslint/parser": "^5.5.0", + "babel-preset-react-app": "^10.0.1", + "confusing-browser-globals": "^1.0.11", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^25.3.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.1", + "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-testing-library": "^5.0.1" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-module-utils": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "requires": { + "debug": "^3.2.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-plugin-flowtype": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", + "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", + "requires": { + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" + } + }, + "eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "requires": { + "esutils": "^2.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "eslint-plugin-jest": { + "version": "25.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", + "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", + "requires": { + "@typescript-eslint/experimental-utils": "^5.0.0" + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", + "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", + "requires": { + "@babel/runtime": "^7.18.9", + "aria-query": "^4.2.2", + "array-includes": "^3.1.5", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.4.3", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.2", + "language-tags": "^1.0.5", + "minimatch": "^3.1.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "eslint-plugin-react": { + "version": "7.31.11", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz", + "integrity": "sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw==", + "requires": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.8" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "requires": { + "esutils": "^2.0.2" + } + }, + "resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "requires": {} + }, + "eslint-plugin-testing-library": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.9.1.tgz", + "integrity": "sha512-6BQp3tmb79jLLasPHJmy8DnxREe+2Pgf7L+7o09TSWPfdqqtQfRZmZNetr5mOs3yqZk/MRNxpN3RUpJe0wB4LQ==", + "requires": { + "@typescript-eslint/utils": "^5.13.0" + } + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" + }, + "eslint-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "requires": { + "@types/eslint": "^7.29.0 || ^8.4.1", + "jest-worker": "^28.0.2", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "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==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "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==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "requires": { + "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" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" + }, + "expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "requires": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + } + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.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" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "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==" + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "requires": { + "@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" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "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==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "requires": { + "bser": "2.1.1" + } + }, + "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==", + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } + }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==" + }, + "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==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "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" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "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==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "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==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, + "fork-ts-checker-webpack-plugin": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", + "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", + "requires": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" + } + } + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "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==" + }, + "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==" + }, + "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==" + }, + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "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==" + }, + "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==" + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "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" + } + }, + "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==", + "requires": { + "is-glob": "^4.0.3" + } + }, + "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==" + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "requires": { + "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" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + }, + "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==", + "requires": { + "duplexer": "^0.1.2" + } + }, + "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==" + }, + "harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "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==" + }, + "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==" + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "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" + } + }, + "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==" + }, + "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==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, + "html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + }, + "html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + } + }, + "html-parse-stringify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", + "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", + "requires": { + "void-elements": "3.1.0" + } + }, + "html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" + }, + "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==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "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==" + }, + "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==", + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "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==", + "requires": { + "@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" + } + }, + "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==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "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==" + }, + "i18next": { + "version": "22.0.6", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.0.6.tgz", + "integrity": "sha512-RlreNGoPIdDP4QG+qSA9PxZKGwlzmcozbI9ObI6+OyUa/Rp0EjZZA9ubyBjw887zVNZsC+7FI3sXX8oiTzAfig==", + "peer": true, + "requires": { + "@babel/runtime": "^7.17.2" + } + }, + "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==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "requires": {} + }, + "idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" + }, + "identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", + "requires": { + "harmony-reflect": "^1.4.6" + } + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" + }, + "immer": { + "version": "9.0.16", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz", + "integrity": "sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==" + }, + "immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "devOptional": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + }, + "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==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "requires": { + "has-bigints": "^1.0.1" + } + }, + "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==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "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==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "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==" + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "requires": { + "has": "^1.0.3" + } + }, + "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==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "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==" + }, + "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==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==" + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "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==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" + }, + "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==" + }, + "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==" + }, + "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==" + }, + "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==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==" + }, + "is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" + }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==" + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==" + }, + "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==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" + }, + "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==", + "requires": { + "@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" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "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==", + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "requires": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + } + }, + "jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "requires": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + } + }, + "jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "requires": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "requires": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + } + }, + "jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==" + }, + "jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "requires": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "requires": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*" + } + }, + "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==", + "requires": {} + }, + "jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==" + }, + "jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "requires": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + } + }, + "jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + } + }, + "jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "requires": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "requires": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-watch-typeahead": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", + "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", + "requires": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^28.0.0", + "jest-watcher": "^28.0.0", + "slash": "^4.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + }, + "dependencies": { + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + } + } + }, + "@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "requires": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "requires": { + "@jest/schemas": "^28.1.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" + } + }, + "@types/yargs": { + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "dependencies": { + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + } + } + }, + "jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==" + }, + "jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "requires": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + }, + "dependencies": { + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "requires": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" + }, + "string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "requires": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "char-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", + "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==" + } + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "requires": { + "ansi-regex": "^6.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + } + } + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "requires": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "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==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-sdsl": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==" + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "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==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "requires": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "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==" + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "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==" + }, + "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==" + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==" + }, + "jsx-ast-utils": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", + "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "requires": { + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" + } + }, + "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==" + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + }, + "klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" + }, + "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==" + }, + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, + "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==" + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==" + }, + "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==" + }, + "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==" + }, + "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==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "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==", + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "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==" + }, + "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==" + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + }, + "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==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "requires": { + "tslib": "^2.0.3" + } + }, + "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==", + "requires": { + "yallist": "^4.0.0" + } + }, + "lz-string": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", + "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==" + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "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==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "requires": { + "tmpl": "1.0.5" + } + }, + "match-sorter": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.1.tgz", + "integrity": "sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==", + "requires": { + "@babel/runtime": "^7.12.5", + "remove-accents": "0.4.2" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "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==" + }, + "memfs": { + "version": "3.4.12", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz", + "integrity": "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==", + "requires": { + "fs-monkey": "^1.0.3" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "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==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "microseconds": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz", + "integrity": "sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "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==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "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==" + }, + "mini-css-extract-plugin": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.0.tgz", + "integrity": "sha512-auqtVo8KhTScMsba7MbijqZTfibbXiBNlPAQbsVt7enQfcDYLdgG57eGxMqwVU3mfeWANY4F1wUg+rMF+ycZgw==", + "requires": { + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "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==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "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==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "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==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "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==", + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } + }, + "nano-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz", + "integrity": "sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==", + "requires": { + "big-integer": "^1.6.16" + } + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "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==" + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "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==" + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" + }, + "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==", + "requires": { + "path-key": "^3.0.0" + } + }, + "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==", + "requires": { + "boolbase": "^1.0.0" + } + }, + "nwsapi": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", + "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==" + }, + "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==" + }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", + "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", + "requires": { + "array.prototype.reduce": "^1.0.5", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "object.hasown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "requires": { + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "oblivious-set": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.0.0.tgz", + "integrity": "sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==" + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "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==", + "requires": { + "ee-first": "1.1.1" + } + }, + "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==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "requires": { + "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.3" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "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==", + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "requires": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + } + }, + "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==" + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "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==", + "requires": { + "callsites": "^3.0.0" + } + }, + "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==", + "requires": { + "@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" + } + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "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==" + }, + "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==" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "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==" + }, + "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==" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + }, + "pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" + }, + "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==", + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "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==", + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, + "pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + } + } + }, + "postcss": { + "version": "8.4.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", + "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-attribute-case-insensitive": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", + "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "postcss-browser-comments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", + "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", + "requires": {} + }, + "postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "requires": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-color-functional-notation": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", + "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-color-hex-alpha": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-color-rebeccapurple": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", + "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-colormin": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", + "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "requires": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-custom-media": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-custom-properties": { + "version": "12.1.10", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.10.tgz", + "integrity": "sha512-U3BHdgrYhCrwTVcByFHs9EOBoqcKq4Lf3kXwbTi4hhq0qWhl/pDWq2THbv/ICX/Fl9KqeHBb8OVrTf2OaYF07A==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-custom-selectors": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-dir-pseudo-class": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", + "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "requires": {} + }, + "postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "requires": {} + }, + "postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "requires": {} + }, + "postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "requires": {} + }, + "postcss-double-position-gradients": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", + "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", + "requires": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-env-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-flexbugs-fixes": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", + "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", + "requires": {} + }, + "postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "requires": {} + }, + "postcss-gap-properties": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", + "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", + "requires": {} + }, + "postcss-image-set-function": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", + "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "requires": {} + }, + "postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "requires": { + "camelcase-css": "^2.0.1" + } + }, + "postcss-lab-function": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", + "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", + "requires": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + } + }, + "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==", + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + } + }, + "postcss-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "requires": {} + }, + "postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "requires": {} + }, + "postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "requires": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + } + }, + "postcss-merge-rules": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", + "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "requires": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "requires": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "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==", + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-nested": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "postcss-nesting": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", + "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", + "requires": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + } + }, + "postcss-normalize": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", + "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", + "requires": { + "@csstools/normalize.css": "*", + "postcss-browser-comments": "^4", + "sanitize.css": "*" + } + }, + "postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "requires": {} + }, + "postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "requires": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "requires": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-opacity-percentage": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz", + "integrity": "sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==" + }, + "postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "requires": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-overflow-shorthand": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", + "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "requires": {} + }, + "postcss-place": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", + "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-preset-env": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", + "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", + "requires": { + "@csstools/postcss-cascade-layers": "^1.1.1", + "@csstools/postcss-color-function": "^1.1.1", + "@csstools/postcss-font-format-keywords": "^1.0.1", + "@csstools/postcss-hwb-function": "^1.0.2", + "@csstools/postcss-ic-unit": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^2.0.7", + "@csstools/postcss-nested-calc": "^1.0.0", + "@csstools/postcss-normalize-display-values": "^1.0.1", + "@csstools/postcss-oklab-function": "^1.1.1", + "@csstools/postcss-progressive-custom-properties": "^1.3.0", + "@csstools/postcss-stepped-value-functions": "^1.0.1", + "@csstools/postcss-text-decoration-shorthand": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.2", + "@csstools/postcss-unset-value": "^1.0.2", + "autoprefixer": "^10.4.13", + "browserslist": "^4.21.4", + "css-blank-pseudo": "^3.0.3", + "css-has-pseudo": "^3.0.4", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^7.1.0", + "postcss-attribute-case-insensitive": "^5.0.2", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^4.2.4", + "postcss-color-hex-alpha": "^8.0.4", + "postcss-color-rebeccapurple": "^7.1.1", + "postcss-custom-media": "^8.0.2", + "postcss-custom-properties": "^12.1.10", + "postcss-custom-selectors": "^6.0.3", + "postcss-dir-pseudo-class": "^6.0.5", + "postcss-double-position-gradients": "^3.1.2", + "postcss-env-function": "^4.0.6", + "postcss-focus-visible": "^6.0.4", + "postcss-focus-within": "^5.0.4", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.5", + "postcss-image-set-function": "^4.0.7", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.2.1", + "postcss-logical": "^5.0.4", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.2.0", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.4", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.5", + "postcss-pseudo-class-any-link": "^7.1.6", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^6.0.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-pseudo-class-any-link": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", + "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "postcss-reduce-initial": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", + "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "requires": {} + }, + "postcss-selector-not": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", + "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "postcss-selector-parser": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "requires": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + } + } + } + }, + "postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "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==" + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==" + }, + "pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "requires": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "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==" + } + } + }, + "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==" + }, + "promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "requires": { + "asap": "~2.0.6" + } + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + }, + "dependencies": { + "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==" + } + } + }, + "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==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "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==" + } + } + }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" + }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "requires": { + "performance-now": "^2.1.0" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "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==" + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "react-app-polyfill": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", + "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", + "requires": { + "core-js": "^3.19.2", + "object-assign": "^4.1.1", + "promise": "^8.1.0", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.9", + "whatwg-fetch": "^3.6.2" + } + }, + "react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "requires": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "requires": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + } + }, + "react-error-overlay": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" + }, + "react-i18next": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-12.0.0.tgz", + "integrity": "sha512-/O7N6aIEAl1FaWZBNvhdIo9itvF/MO/nRKr9pYqRc9LhuC1u21SlfwpiYQqvaeNSEW3g3qUXLREOWMt+gxrWbg==", + "requires": { + "@babel/runtime": "^7.14.5", + "html-parse-stringify": "^3.0.1" + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "react-query": { + "version": "3.39.2", + "resolved": "https://registry.npmjs.org/react-query/-/react-query-3.39.2.tgz", + "integrity": "sha512-F6hYDKyNgDQfQOuR1Rsp3VRzJnWHx6aRnnIZHMNGGgbL3SBgpZTDg8MQwmxOgpCAoqZJA+JSNCydF1xGJqKOCA==", + "requires": { + "@babel/runtime": "^7.5.5", + "broadcast-channel": "^3.4.1", + "match-sorter": "^6.0.2" + } + }, + "react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==" + }, + "react-router": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.4.3.tgz", + "integrity": "sha512-BT6DoGn6aV1FVP5yfODMOiieakp3z46P1Fk0RNzJMACzE7C339sFuHebfvWtnB4pzBvXXkHP2vscJzWRuUjTtA==", + "requires": { + "@remix-run/router": "1.0.3" + } + }, + "react-router-dom": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.4.3.tgz", + "integrity": "sha512-MiaYQU8CwVCaOfJdYvt84KQNjT78VF0TJrA17SIQgNHRvLnXDJO6qsFqq8F/zzB1BWZjCFIrQpu4QxcshitziQ==", + "requires": { + "@remix-run/router": "1.0.3", + "react-router": "6.4.3" + } + }, + "react-scripts": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", + "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", + "requires": { + "@babel/core": "^7.16.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@svgr/webpack": "^5.5.0", + "babel-jest": "^27.4.2", + "babel-loader": "^8.2.3", + "babel-plugin-named-asset-import": "^0.3.8", + "babel-preset-react-app": "^10.0.1", + "bfj": "^7.0.2", + "browserslist": "^4.18.1", + "camelcase": "^6.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "css-loader": "^6.5.1", + "css-minimizer-webpack-plugin": "^3.2.0", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "eslint": "^8.3.0", + "eslint-config-react-app": "^7.0.1", + "eslint-webpack-plugin": "^3.1.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "fsevents": "^2.3.2", + "html-webpack-plugin": "^5.5.0", + "identity-obj-proxy": "^3.0.0", + "jest": "^27.4.3", + "jest-resolve": "^27.4.2", + "jest-watch-typeahead": "^1.0.0", + "mini-css-extract-plugin": "^2.4.5", + "postcss": "^8.4.4", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-loader": "^6.2.1", + "postcss-normalize": "^10.0.1", + "postcss-preset-env": "^7.0.1", + "prompts": "^2.4.2", + "react-app-polyfill": "^3.0.0", + "react-dev-utils": "^12.0.1", + "react-refresh": "^0.11.0", + "resolve": "^1.20.0", + "resolve-url-loader": "^4.0.0", + "sass-loader": "^12.3.0", + "semver": "^7.3.5", + "source-map-loader": "^3.0.0", + "style-loader": "^3.3.1", + "tailwindcss": "^3.0.2", + "terser-webpack-plugin": "^5.2.5", + "webpack": "^5.64.4", + "webpack-dev-server": "^4.6.0", + "webpack-manifest-plugin": "^4.0.2", + "workbox-webpack-plugin": "^6.4.1" + } + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "requires": { + "pify": "^2.3.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "requires": { + "minimatch": "^3.0.5" + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" + }, + "regexpu-core": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", + "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regjsgen": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" + }, + "remove-accents": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", + "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==" + }, + "renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "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==" + }, + "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==" + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "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==", + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + }, + "resolve-url-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", + "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", + "requires": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^7.0.35", + "source-map": "0.6.1" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==" + }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "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==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "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==" + }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sanitize.css": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", + "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==" + }, + "sass": { + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.56.1.tgz", + "integrity": "sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==", + "devOptional": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", + "requires": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "requires": { + "xmlchars": "^2.2.0" + } + }, + "scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" + }, + "selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "requires": { + "node-forge": "^1" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "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" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "requires": { + "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" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" + } + } + }, + "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==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "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==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "shell-quote": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", + "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==" + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "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==" + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "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==", + "requires": { + "abab": "^2.0.5", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.1" + } + }, + "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==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "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==", + "requires": { + "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" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "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==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" + }, + "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==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "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==" + } + } + }, + "string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "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==" + }, + "strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==" + }, + "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==" + }, + "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==", + "requires": { + "min-indent": "^1.0.0" + } + }, + "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==" + }, + "style-loader": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", + "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", + "requires": {} + }, + "stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "requires": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "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==" + }, + "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==" + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "dependencies": { + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + }, + "dependencies": { + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + } + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "requires": { + "boolbase": "~1.0.0" + } + } + } + }, + "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==" + }, + "tailwindcss": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.4.tgz", + "integrity": "sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==", + "requires": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.6", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.18", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "6.0.0", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" + }, + "dependencies": { + "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==" + } + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" + }, + "temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==" + }, + "tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "requires": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "dependencies": { + "type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==" + } + } + }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } + }, + "terser": { + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", + "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "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==" + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "requires": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + } + }, + "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==", + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "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==" + }, + "throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==" + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + }, + "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==" + }, + "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==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "tough-cookie": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", + "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "dependencies": { + "universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" + } + } + }, + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "requires": { + "punycode": "^2.1.1" + } + }, + "tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" + }, + "tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "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==" + } + } + }, + "tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "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==" + }, + "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==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "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==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", + "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", + "peer": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "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==" + }, + "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==", + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "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==" + }, + "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==" + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + }, + "unload": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz", + "integrity": "sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==", + "requires": { + "@babel/runtime": "^7.6.2", + "detect-node": "^2.0.4" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "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==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" + }, + "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==" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + }, + "void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==" + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "requires": { + "makeerror": "1.0.12" + } + }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "web-vitals": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz", + "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==" + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" + }, + "webpack": { + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "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.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "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==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + } + } + }, + "webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "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==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "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==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "webpack-dev-server": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", + "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", + "requires": { + "@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.1", + "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", + "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.1", + "ws": "^8.4.2" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "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==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "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==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "requires": {} + } + } + }, + "webpack-manifest-plugin": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", + "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", + "requires": { + "tapable": "^2.0.0", + "webpack-sources": "^2.2.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "webpack-sources": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", + "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", + "requires": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + } + } + } + }, + "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==" + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "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==" + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "requires": { + "iconv-lite": "0.4.24" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + }, + "whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "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==", + "requires": { + "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" + } + }, + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "workbox-background-sync": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz", + "integrity": "sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==", + "requires": { + "idb": "^7.0.1", + "workbox-core": "6.5.4" + } + }, + "workbox-broadcast-update": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz", + "integrity": "sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==", + "requires": { + "workbox-core": "6.5.4" + } + }, + "workbox-build": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.4.tgz", + "integrity": "sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==", + "requires": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.5.4", + "workbox-broadcast-update": "6.5.4", + "workbox-cacheable-response": "6.5.4", + "workbox-core": "6.5.4", + "workbox-expiration": "6.5.4", + "workbox-google-analytics": "6.5.4", + "workbox-navigation-preload": "6.5.4", + "workbox-precaching": "6.5.4", + "workbox-range-requests": "6.5.4", + "workbox-recipes": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4", + "workbox-streams": "6.5.4", + "workbox-sw": "6.5.4", + "workbox-window": "6.5.4" + }, + "dependencies": { + "@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "requires": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + } + }, + "ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "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==" + }, + "source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "requires": { + "whatwg-url": "^7.0.0" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "requires": { + "punycode": "^2.1.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, + "workbox-cacheable-response": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz", + "integrity": "sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==", + "requires": { + "workbox-core": "6.5.4" + } + }, + "workbox-core": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.4.tgz", + "integrity": "sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==" + }, + "workbox-expiration": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.4.tgz", + "integrity": "sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==", + "requires": { + "idb": "^7.0.1", + "workbox-core": "6.5.4" + } + }, + "workbox-google-analytics": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz", + "integrity": "sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==", + "requires": { + "workbox-background-sync": "6.5.4", + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "workbox-navigation-preload": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz", + "integrity": "sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==", + "requires": { + "workbox-core": "6.5.4" + } + }, + "workbox-precaching": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.4.tgz", + "integrity": "sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==", + "requires": { + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "workbox-range-requests": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz", + "integrity": "sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==", + "requires": { + "workbox-core": "6.5.4" + } + }, + "workbox-recipes": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.4.tgz", + "integrity": "sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==", + "requires": { + "workbox-cacheable-response": "6.5.4", + "workbox-core": "6.5.4", + "workbox-expiration": "6.5.4", + "workbox-precaching": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "workbox-routing": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.4.tgz", + "integrity": "sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==", + "requires": { + "workbox-core": "6.5.4" + } + }, + "workbox-strategies": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.4.tgz", + "integrity": "sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==", + "requires": { + "workbox-core": "6.5.4" + } + }, + "workbox-streams": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.4.tgz", + "integrity": "sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==", + "requires": { + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4" + } + }, + "workbox-sw": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.4.tgz", + "integrity": "sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==" + }, + "workbox-webpack-plugin": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.5.4.tgz", + "integrity": "sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg==", + "requires": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "6.5.4" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } + } + }, + "workbox-window": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.4.tgz", + "integrity": "sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==", + "requires": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.5.4" + } + }, + "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==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "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==", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "requires": {} + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "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==" + }, + "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==" + } + } +} diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/package.json b/src/apps/Rsdo.Concordancer.Api/WebApp/package.json new file mode 100644 index 0000000..b3e9c45 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/package.json @@ -0,0 +1,45 @@ +{ + "name": "concordancer-web", + "version": "1.0.0", + "private": true, + "dependencies": { + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^13.5.0", + "bootstrap": "^5.2.3", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-i18next": "^12.0.0", + "react-query": "^3.39.2", + "react-router-dom": "^6.4.3", + "react-scripts": "5.0.1", + "web-vitals": "^2.1.4" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "devDependencies": { + "sass": "^1.56.1" + } +} diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/public/favicon.ico b/src/apps/Rsdo.Concordancer.Api/WebApp/public/favicon.ico new file mode 100644 index 0000000..9322811 Binary files /dev/null and b/src/apps/Rsdo.Concordancer.Api/WebApp/public/favicon.ico differ diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/public/index.html b/src/apps/Rsdo.Concordancer.Api/WebApp/public/index.html new file mode 100644 index 0000000..aac82e4 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/public/index.html @@ -0,0 +1,44 @@ + + + + + + + + + + + + + TP | Konkordančnik + + + + +
+ + + diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/public/logo192.png b/src/apps/Rsdo.Concordancer.Api/WebApp/public/logo192.png new file mode 100644 index 0000000..fc44b0a Binary files /dev/null and b/src/apps/Rsdo.Concordancer.Api/WebApp/public/logo192.png differ diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/public/logo512.png b/src/apps/Rsdo.Concordancer.Api/WebApp/public/logo512.png new file mode 100644 index 0000000..a4e47a6 Binary files /dev/null and b/src/apps/Rsdo.Concordancer.Api/WebApp/public/logo512.png differ diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/public/manifest.json b/src/apps/Rsdo.Concordancer.Api/WebApp/public/manifest.json new file mode 100644 index 0000000..080d6c7 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/public/robots.txt b/src/apps/Rsdo.Concordancer.Api/WebApp/public/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/App.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/App.js new file mode 100644 index 0000000..d003e04 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/App.js @@ -0,0 +1,28 @@ +import { Routes, Route } from 'react-router-dom'; +import { + QueryClient, + QueryClientProvider +} from 'react-query' +import ConcordanceIndex from './pages/concordance/ConcordanceIndex'; +import ConcordanceResults from './pages/concordance/ConcordanceResults'; +import ListIndex from './pages/list/ListIndex'; +import ListResults from './pages/list/ListResults'; +import NoCorpus from './pages/NoCorpus'; + +function App() { + const queryClient = new QueryClient(); + return ( + + + } /> + } /> + } /> + } /> + } /> + } /> + + + ); +} + +export default App; diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/App.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/App.module.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/chevron-down.svg b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/chevron-down.svg new file mode 100644 index 0000000..cf75b97 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/chevron-down.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/chevron-up.svg b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/chevron-up.svg new file mode 100644 index 0000000..fd7fe6a --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/chevron-up.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/close.svg b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/close.svg new file mode 100644 index 0000000..242a811 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/close.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/concordance-active.svg b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/concordance-active.svg new file mode 100644 index 0000000..5fd5f0c --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/concordance-active.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/concordance-inactive.svg b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/concordance-inactive.svg new file mode 100644 index 0000000..52cdd2a --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/concordance-inactive.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/export.svg b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/export.svg new file mode 100644 index 0000000..3b59c46 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/export.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/help.svg b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/help.svg new file mode 100644 index 0000000..36e6f5e --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/help.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/history.svg b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/history.svg new file mode 100644 index 0000000..0f5089c --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/history.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/language.svg b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/language.svg new file mode 100644 index 0000000..d1ce1c3 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/language.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/list-active.svg b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/list-active.svg new file mode 100644 index 0000000..1a99b2b --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/list-active.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/list-inactive.svg b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/list-inactive.svg new file mode 100644 index 0000000..d7d23ac --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/list-inactive.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/logo-small.png b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/logo-small.png new file mode 100644 index 0000000..3b65a56 Binary files /dev/null and b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/logo-small.png differ diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/logo.png b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/logo.png new file mode 100644 index 0000000..d684d0c Binary files /dev/null and b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/logo.png differ diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/search.svg b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/search.svg new file mode 100644 index 0000000..40fb5ae --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/assets/search.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAggregation.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAggregation.js new file mode 100644 index 0000000..23a2e60 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAggregation.js @@ -0,0 +1,30 @@ +import { useState } from 'react'; + +import ConcordanceAggregationItem from './ConcordanceAggregationItem'; + +import styles from './ConcordanceAggregation.module.scss'; +import chevronDown from '../../assets/chevron-down.svg'; +import chevronUp from '../../assets/chevron-up.svg' + +const ConcordanceAggregation = (props) => { + const expandable = props.items.length > 5; + const [isExpanded, setIsExpanded] = useState(false); + const items = expandable && !isExpanded ? props.items.slice(0, 5) : props.items; + + const expandHandler = () => { + setIsExpanded((prevState) => !prevState); + }; + + const headerEl = expandable ?

{props.title} {isExpanded

:

{props.title}

+ + return ( +
+ {headerEl} +
    + {items.map(x => )} +
+
+ ); +}; + +export default ConcordanceAggregation; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAggregation.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAggregation.module.scss new file mode 100644 index 0000000..f5b7a62 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAggregation.module.scss @@ -0,0 +1,21 @@ +@import '../../variables'; + +.aggregation { + h2 { + border-bottom: 1px solid $border-color; + color: $primary-color; + font-size: 1.6rem; + line-height: 1.9rem; + padding-bottom: 0.7rem; + + img { + color: $primary-color; + } + } + + ul { + list-style: none; + margin: 0 0 2.7rem 0; + padding: 0; + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAggregationItem.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAggregationItem.js new file mode 100644 index 0000000..6a84cc7 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAggregationItem.js @@ -0,0 +1,15 @@ +import { Link } from 'react-router-dom'; +import useSearch from '../../hooks/use-search'; +import styles from './ConcordanceAggregationItem.module.scss'; + +const ConcordanceAggregationItem = (props) => { + const search = useSearch(); + const isSelected = search.isFiltered('TextIds', props.filterKey) === true; + const link = isSelected ? search.getClearFilterLink('TextIds', props.filterKey) : search.getFilterLink('TextIds', props.filterKey); + + return ( +
  • {isSelected && X - }{props.title}{props.count}
  • + ); +}; + +export default ConcordanceAggregationItem; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAggregationItem.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAggregationItem.module.scss new file mode 100644 index 0000000..3923b38 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAggregationItem.module.scss @@ -0,0 +1,12 @@ +@import '../../variables'; + +.aggregationItem { + border-bottom: 1px solid $border-color; + margin-bottom: 0.8rem; + padding-bottom: 0.8rem; + + a { + color: $text-color; + text-decoration: none; + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAggregations.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAggregations.js new file mode 100644 index 0000000..aa87147 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAggregations.js @@ -0,0 +1,19 @@ +import { useTranslation } from 'react-i18next'; + +import ConcordanceAlternateSearch from './ConcordanceAlternateSearch'; +import ConcordanceAggregation from './ConcordanceAggregation'; +import styles from './ConcordanceAggregations.module.scss'; + +const ConcordanceAggregations = (props) => { + // Hooks + const { t } = useTranslation(); + + return ( +
    + + {props.aggregations.map(x => )} +
    + ); +}; + +export default ConcordanceAggregations; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAggregations.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAggregations.module.scss new file mode 100644 index 0000000..534a8bc --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAggregations.module.scss @@ -0,0 +1,8 @@ +.aggregations { + padding-top: 1.8rem; + padding-right: 6.4rem; + + @media (max-width: 991.98px) { + padding-right: 0; + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAlternateSearch.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAlternateSearch.js new file mode 100644 index 0000000..7e011a1 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAlternateSearch.js @@ -0,0 +1,15 @@ +import ConcordanceAlternateSearchItem from './ConcordanceAlternateSearchItem'; +import styles from './ConcordanceAlternateSearch.module.scss'; + +const ConcordanceAlternateSearch = (props) => { + return ( +
    +

    {props.title}

    +
      + {props.items.map((x,i) => )} +
    +
    + ); +}; + +export default ConcordanceAlternateSearch; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAlternateSearch.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAlternateSearch.module.scss new file mode 100644 index 0000000..ae16954 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAlternateSearch.module.scss @@ -0,0 +1,21 @@ +@import '../../variables'; + +.alternateSearch { + h2 { + border-bottom: 1px solid $border-color; + color: $primary-color; + font-size: 1.6rem; + line-height: 1.9rem; + padding-bottom: 0.7rem; + + img { + color: $primary-color; + } + } + + ul { + list-style: none; + margin: 0 0 2.7rem 0; + padding: 0; + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAlternateSearchItem.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAlternateSearchItem.js new file mode 100644 index 0000000..d8d3289 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAlternateSearchItem.js @@ -0,0 +1,13 @@ +import { Link } from 'react-router-dom'; +import useSearch from '../../hooks/use-search'; +import styles from './ConcordanceAlternateSearchItem.module.scss'; + +const ConcordanceAlternateSearchItem = (props) => { + const search = useSearch(); + const link = search.getAlternateSearchLink(props.search); + return ( +
  • {props.title}{props.count}
  • + ); +}; + +export default ConcordanceAlternateSearchItem; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAlternateSearchItem.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAlternateSearchItem.module.scss new file mode 100644 index 0000000..def200b --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceAlternateSearchItem.module.scss @@ -0,0 +1,12 @@ +@import '../../variables'; + +.alternateSearchItem { + border-bottom: 1px solid $border-color; + margin-bottom: 0.8rem; + padding-bottom: 0.8rem; + + a { + color: $text-color; + text-decoration: none; + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetails.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetails.js new file mode 100644 index 0000000..f0b88dc --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetails.js @@ -0,0 +1,82 @@ +import { useState } from 'react'; +import { useQuery } from 'react-query'; +import { useTranslation } from 'react-i18next'; +import useSearch from '../../hooks/use-search'; + +import Spinner from '../shared/Spinner'; +import ConcordanceDetailsParagraph from './ConcordanceDetailsParagraph'; +import ConcordanceDetailsText from './ConcordanceDetailsText'; +import ConcordanceDetailsTokens from './ConcordanceDetailsTokens'; + +import closeIcon from '../../assets/close.svg'; +import styles from './ConcordanceDetails.module.scss'; + + +const ConcordanceDetails = (props) => { + const [activeTab, setActiveTab] = useState(0); + + // Hooks + const { t } = useTranslation(); + const search = useSearch(); + const body = search.getDetailsRequest(props.paragraphId, props.tokenOrder); + + const fetchDetails = () => fetch(`${window.baseAppPath}/concordancer/corpus/${search.corpusId}/concordances/details`, { + method: 'POST', + body: JSON.stringify(body), + headers: { + 'Content-Type': 'application/json' + } + }).then((res) => res.json()); + + const { isLoading, isError, data, error } = useQuery(['details', body], fetchDetails, { refetchOnWindowFocus: false }); + + const selectParagraphTab = (e) => { + e.preventDefault(); + setActiveTab(0); + }; + + const selectTokensTab = (e) => { + e.preventDefault(); + setActiveTab(1); + } + + if (!isLoading && data) { + return ( +
    +
    +
      +
    • +
    • +
    + +
    +
    +
    + {activeTab === 0 && } + {activeTab === 1 && } +
    +
    + +
    +
    +
    + ); + } else { + let content = <>; + if (isLoading) { + content = + } else if (isError) { + content =

    {t('shared.searchError')}

    + } else if (!isLoading && data && data.items.length === 0) { + content =

    {t('shared.noResults')}

    + } + + return ( +
    + {content} +
    + ); + } +}; + +export default ConcordanceDetails; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetails.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetails.module.scss new file mode 100644 index 0000000..a9702aa --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetails.module.scss @@ -0,0 +1,72 @@ +@import '../../variables'; + +.details { + background-color: #ffffff; + border-radius: 0.8rem; + box-shadow: 0 0.4rem 1.6rem rgba(0, 0, 0, 0.08); + margin: 1.6rem 0; + padding: 2.4rem 2.8rem; + position: relative; + + .tabs { + border-bottom: 1px solid $border-color; + margin-bottom: 2.2rem; + + ul { + list-style: none; + margin: 0; + padding: 0; + + li { + display: inline-block; + padding: 0 2rem; + + button { + color: $text-color-secondary; + font-size: 1.6rem; + font-weight: 500; + text-decoration: none; + + &:focus, + &:hover { + color: $primary-color; + box-shadow: none; + } + } + + &.active { + border-bottom: 3px solid $primary-color; + + button { + color: $primary-color; + } + } + } + } + + .close { + position: absolute; + right: 2.8rem; + top: 2.4rem; + } + } + + .mainContent { + border-right: 2px solid $border-color; + padding-right: 3rem; + + @media (max-width: 991.98px) { + border-right: none; + margin-bottom: 3rem; + padding-right: 0; + } + } + + .textInfo { + padding-left: 3rem; + + @media (max-width: 991.98px) { + padding-left: 0; + } + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetailsParagraph.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetailsParagraph.js new file mode 100644 index 0000000..c9f841b --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetailsParagraph.js @@ -0,0 +1,11 @@ +import ConcordanceTokens from './ConcordanceTokens'; + +const ConcordanceDetailsParagraph = (props) => { + return ( +
    + +
    + ) +}; + +export default ConcordanceDetailsParagraph; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetailsText.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetailsText.js new file mode 100644 index 0000000..7a3dfb7 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetailsText.js @@ -0,0 +1,31 @@ +import { useTranslation } from 'react-i18next'; + +import sytles from './ConcordanceDetailsText.module.scss'; + +const ConcordanceDetailsText = (props) => { + // Hooks + const { t } = useTranslation(); + + return ( + <> +
    +
    {t('concordance.detailsTextSource')}
    +

    {props.source}

    +
    +
    +
    {t('concordance.detailsTextYear')}
    +

    {props.year}

    +
    +
    +
    {t('concordance.detailsTextTitle')}
    +

    {props.title}

    +
    +
    +
    {t('concordance.detailsTextAuthor')}
    +

    {props.author}

    +
    + + ); +}; + +export default ConcordanceDetailsText; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetailsText.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetailsText.module.scss new file mode 100644 index 0000000..89d94be --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetailsText.module.scss @@ -0,0 +1,22 @@ +@import '../../variables'; + +.textInfo { + border-bottom: 1px solid $border-color; + margin-bottom: 1rem; + padding-bottom: 1rem; + + &:last-child { + border-bottom: none; + } + + h5 { + color: $primary-color; + font-size: 1.6rem; + font-weight: 500; + margin-bottom: 1.6rem; + } + + p { + margin: 0; + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetailsTokens.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetailsTokens.js new file mode 100644 index 0000000..2720585 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetailsTokens.js @@ -0,0 +1,21 @@ +import { useTranslation } from 'react-i18next'; +import ConcordanceDetailsTokensItem from "./ConcordanceDetailsTokensItem"; +import styles from './ConcordanceDetailsTokens.module.scss'; + +const ConcordanceDetailsTokens = (props) => { + // Hooks + const { t } = useTranslation(); + + return ( + <> +
    +
    {t('concordance.detailsAnnotationWord')}
    +
    {t('concordance.detailsAnnotationBasicForm')}
    +
    {t('concordance.detailsAnnotationPos')}
    +
    + {props.tokens.filter(x => x.type === 'Word').map((x, i) => )} + + ); +}; + +export default ConcordanceDetailsTokens; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetailsTokens.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetailsTokens.module.scss new file mode 100644 index 0000000..a5867be --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetailsTokens.module.scss @@ -0,0 +1,7 @@ +@import '../../variables'; + +.header { + border-bottom: 1px solid $border-color; + margin-bottom: 0.5rem; + padding-bottom: 0.5rem; +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetailsTokensItem.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetailsTokensItem.js new file mode 100644 index 0000000..0345ba3 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetailsTokensItem.js @@ -0,0 +1,16 @@ +import ConcordanceToken from './ConcordanceToken'; + +import styles from './ConcordanceDetailsTokensItem.module.scss'; + +const ConcordanceDetailsTokensItem = (props) => { + const token = props.token; + return ( +
    +
    +
    +
    +
    + ); +}; + +export default ConcordanceDetailsTokensItem; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetailsTokensItem.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetailsTokensItem.module.scss new file mode 100644 index 0000000..2155caa --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceDetailsTokensItem.module.scss @@ -0,0 +1,7 @@ +@import '../../variables'; + +.item { + border-bottom: 1px solid $border-color; + margin-bottom: 0.5rem; + padding-bottom: 0.5rem; +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceHelp.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceHelp.js new file mode 100644 index 0000000..b84af33 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceHelp.js @@ -0,0 +1,20 @@ +import SearchHelp from '../shared/SearchHelp.js'; + +const ConcordanceHelp = () => { + return ( + +
      +
    • +

      rdeča jagoda

      +

      rdeča jagoda, rdeče jagode, rdeči jagodi

      +
    • +
    • +

      "rdečimi jagodami"

      +

      rdečimi jagodami

      +
    • +
    +
    + ) +}; + +export default ConcordanceHelp; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceList.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceList.js new file mode 100644 index 0000000..6a4b0d7 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceList.js @@ -0,0 +1,14 @@ +import { useState } from 'react'; +import ConcordanceListItem from './ConcordanceListItem'; + +const ConcordanceList = (props) => { + const [expandedIndex, setExpandedIndex] = useState(null); + + return ( +
    + {props.items.map((x, i) => setExpandedIndex(index)} />)} +
    + ); +}; + +export default ConcordanceList; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceListItem.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceListItem.js new file mode 100644 index 0000000..f11ee31 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceListItem.js @@ -0,0 +1,17 @@ +import ConcordanceDetails from './ConcordanceDetails'; +import ConcordanceTokens from './ConcordanceTokens'; +import styles from './ConcordanceListItem.module.scss'; + +const ConcordanceListItem = (props) => { + return ( + <> +
    { props.toggleDetails(props.index) }}> +
     
    +
    +
    + {props.expanded && { props.toggleDetails(null) }} />} + + ); +}; + +export default ConcordanceListItem; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceListItem.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceListItem.module.scss new file mode 100644 index 0000000..69fb80f --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceListItem.module.scss @@ -0,0 +1,8 @@ +@import '../../variables'; + +.item { + border-bottom: 1px solid $border-color; + cursor: pointer; + margin-bottom: 0.5rem; + padding-bottom: 0.5rem; +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceTitle.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceTitle.js new file mode 100644 index 0000000..9a2864f --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceTitle.js @@ -0,0 +1,7 @@ +const ConcordanceTitle = () => { + return ( +

    Iskanje po konkordancah

    + ); +}; + +export default ConcordanceTitle; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceToken.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceToken.js new file mode 100644 index 0000000..a41bd03 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceToken.js @@ -0,0 +1,14 @@ +import styles from './ConcordanceToken.module.scss'; + +const ConcordanceToken = (props) => { + if (props.isCenterMatch === true) { + return {props.content} + } else if (props.isWordInContextMatch === true) { + return {props.content} + } else { + return <>{props.content} + } +}; + +export default ConcordanceToken; + diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceToken.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceToken.module.scss new file mode 100644 index 0000000..c87888b --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceToken.module.scss @@ -0,0 +1,7 @@ +@import '../../variables'; + +.center, +.wordInContext { + color: $primary-color; + font-weight: 600; +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceTokens.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceTokens.js new file mode 100644 index 0000000..c79fb91 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/concordance/ConcordanceTokens.js @@ -0,0 +1,11 @@ +import ConcordanceToken from "./ConcordanceToken"; + +const ConcordanceTokens = (props) => { + return ( + <> + {props.tokens.map((x,i) => )} + + ); +}; + +export default ConcordanceTokens; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/index/IndexMenu.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/index/IndexMenu.js new file mode 100644 index 0000000..c1d1321 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/index/IndexMenu.js @@ -0,0 +1,29 @@ +import styles from './IndexMenu.module.scss'; +import logo from '../../assets/logo.png'; +import langIcon from '../../assets/language.svg'; +import { useTranslation } from 'react-i18next'; + +const IndexTopBar = () => { + const { i18n } = useTranslation(); + const changeLanguageTitle = i18n.language === 'sl' ? 'English' : 'Slovensko'; + const changeLanguageCode = i18n.language === 'sl' ? 'EN' : 'SL'; + + const languageClickHandler = () => { + const newLanguage = i18n.language === 'sl' ? 'en' : 'sl'; + i18n.changeLanguage(newLanguage); + localStorage.setItem('language', newLanguage); + }; + + return ( +
    +
    +
    +
    Logo
    +
    +
    +
    +
    + ); +}; + +export default IndexTopBar; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/index/IndexMenu.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/index/IndexMenu.module.scss new file mode 100644 index 0000000..7c77a14 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/index/IndexMenu.module.scss @@ -0,0 +1,25 @@ +@import '../../variables'; + +.menu { + background-color: $primary-color; + height: 15.4rem; + + :global(.container-fluid), + :global(.row) { + height: 100%; + } + + .links { + text-align: right; + + button { + background-color: transparent; + border: none; + color: #f5f5f5; + + img { + margin-right: 0.625rem; + } + } + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/index/IndexStatistics.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/index/IndexStatistics.js new file mode 100644 index 0000000..83a7504 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/index/IndexStatistics.js @@ -0,0 +1,34 @@ +import { useTranslation } from 'react-i18next'; +import { useQuery } from 'react-query'; +import useSearch from '../../hooks/use-search'; +import styles from './IndexStatistics.module.scss'; + +const IndexStatistics = () => { + const { t } = useTranslation(); + + const search = useSearch(); + const corpusId = search.corpusId; + + const fetchStatistics = () => fetch(`${window.baseAppPath}/concordancer/corpus/${corpusId}/stats`, { + method: 'GET', + headers: { + 'Content-Type': 'application/json' + } + }).then((res) => { + return res.json(); + }); + + const { isLoading, isSuccess, isError, data, error } = useQuery(['statistics', corpusId], fetchStatistics, { keepPreviousData: true, refetchOnWindowFocus: false }); + + return ( +
    +
    +

    {(!isLoading && isSuccess) ? data.texts : "..."}

    {t('shared.countTexts')}

    +

    {(!isLoading && isSuccess) ? data.sentences : "..."}

    {t('shared.countSentences')}

    +

    {(!isLoading && isSuccess) ? data.words : "..."}

    {t('shared.countWords')}

    +
    +
    + ); +}; + +export default IndexStatistics; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/index/IndexStatistics.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/index/IndexStatistics.module.scss new file mode 100644 index 0000000..a5dcfee --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/index/IndexStatistics.module.scss @@ -0,0 +1,35 @@ +@import '../../variables'; + +.stats { + background: #ffffff; + border-radius: 1.2rem; + box-shadow: 0 0.4rem 2rem rgba(0, 0, 0, 0.2); + margin-top: 5.1rem; + padding: 3.2rem 0 3.1rem 0; + + .counter { + border-right: 1px solid #d9d9d9; + + &:last-child { + border-right: none; + } + + h2 { + color: $primary-color; + font-size: 4.8rem; + font-weight: 100; + line-height: 5.6rem; + margin: 0; + text-align: center; + } + + p { + color: #848c91; + font-size: 1.8rem; + font-weight: 400; + line-height: 2.1rem; + margin: 0; + text-align: center; + } + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/list/ListHelp.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/list/ListHelp.js new file mode 100644 index 0000000..17653a6 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/list/ListHelp.js @@ -0,0 +1,20 @@ +import SearchHelp from '../shared/SearchHelp.js'; + +const ListHelp = () => { + return ( + +
      +
    • +

      *pisati

      +

      pisati, napisati, zapisati, podpisati…

      +
    • +
    • +

      ?pisati

      +

      vpisati, opisati, spisati…

      +
    • +
    +
    + ); +}; + +export default ListHelp; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/list/ListItem.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/list/ListItem.js new file mode 100644 index 0000000..8aeefdc --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/list/ListItem.js @@ -0,0 +1,13 @@ +import styles from './ListItem.module.scss'; + +const ListItem = (props) => { + return ( +
    +
    {props.item.form}
    +
    {props.item.lemma}
    +
    {props.item.frequency}
    +
    + ); +}; + +export default ListItem; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/list/ListItem.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/list/ListItem.module.scss new file mode 100644 index 0000000..2155caa --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/list/ListItem.module.scss @@ -0,0 +1,7 @@ +@import '../../variables'; + +.item { + border-bottom: 1px solid $border-color; + margin-bottom: 0.5rem; + padding-bottom: 0.5rem; +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/list/ListItems.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/list/ListItems.js new file mode 100644 index 0000000..ea945c8 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/list/ListItems.js @@ -0,0 +1,18 @@ +import ListItem from './ListItem'; + +import styles from './ListItems.module.scss'; + +const ListItems = (props) => { + return ( +
    +
    +
    Termin
    +
    Osnovna oblika
    +
    Število pojavitev
    +
    + {props.items.map((x, i) => )} +
    + ); +}; + +export default ListItems; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/list/ListItems.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/list/ListItems.module.scss new file mode 100644 index 0000000..a5867be --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/list/ListItems.module.scss @@ -0,0 +1,7 @@ +@import '../../variables'; + +.header { + border-bottom: 1px solid $border-color; + margin-bottom: 0.5rem; + padding-bottom: 0.5rem; +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/results/ResultsExport.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/results/ResultsExport.js new file mode 100644 index 0000000..67316c6 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/results/ResultsExport.js @@ -0,0 +1,70 @@ +import { useEffect, useState } from 'react'; +import { useTranslation } from 'react-i18next'; + +import closeIcon from '../../assets/close.svg'; +import exportIcon from '../../assets/export.svg'; +import styles from './ResultsExport.module.scss'; + +const ResultsExport = (props) => { + // Hooks + const { t } = useTranslation(); + + const allResults = props.results; + const defaultValue = allResults < 100 ? allResults : 100; + const maxValue = allResults > 1000 ? 1000 : allResults; + + const [numFirst, setNumFirst] = useState(defaultValue); + const [numRandom, setNumRandom] = useState(defaultValue); + const [type, setType] = useState('FirstRows'); + const [isValid, setIsValid] = useState(true); + + useEffect(() => { + let value = type === 'FirstRows' ? numFirst : numRandom; + let isValid = value >= 1 && value <= maxValue; + setIsValid(isValid); + }, [type, numFirst, numRandom, maxValue]); + + const onNumFirstChanged = (e) => { + setNumFirst(e.target.value); + }; + + const onNumRandomChanged = (e) => { + setNumRandom(e.target.value); + }; + + const confirm = () => { + if (isValid) { + let value = type === 'FirstRows' ? numFirst : numRandom; + props.onConfirm(type, value); + } + }; + + return ( +
    +
    +
    + + Export +

    {t('shared.exportTitle')}

    +
    +
    +
    +
    {t('shared.exportTotal', { total: allResults })}
    +
    +
    +
    setType(e.target.value)} /> {t('shared.exportFirst')} {t('shared.exportRecords')}
    +
    +
    +
    setType(e.target.value)} /> {t('shared.exportRandom')} {t('shared.exportRecords')}
    +
    + {!isValid &&
    {t('shared.exportMax', { max: maxValue })}
    } +
    +
    + +
    +
    +
    + ); +}; + +export default ResultsExport; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/results/ResultsExport.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/results/ResultsExport.module.scss new file mode 100644 index 0000000..faa25c2 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/results/ResultsExport.module.scss @@ -0,0 +1,85 @@ +@import '../../variables'; + +.export { + background-color: rgba(0, 0, 0, 0.4); + height: 100%; + left: 0; + overflow: auto; + position: fixed; + top: 0; + width: 100%; + z-index: 1; + + .modal { + background-color: #ffffff; + border-radius: 0.6rem; + box-shadow: 0 0.4rem 4rem rgba(0, 0, 0, 0.35); + max-width: 70rem; + margin: 15% auto; + position: relative; + width: auto; + + .header { + background-color: #f5f5f5; + border-radius: 0.6rem 0.6rem 0 0; + padding: 2.4rem 2.1rem 2.3rem 2.1rem; + + .close { + background-color: transparent; + border: none; + position: absolute; + top: 2.4rem; + right: 2.1rem; + } + + .icon { + display: block; + height: 3.4rem; + margin: 4.2rem auto 2.2rem auto; + width: 3.4rem; + } + + h1 { + color: $primary-color; + font-size: 3.6rem; + font-weight: 300; + line-height: 4.2rem; + margin: 0; + text-align: center; + } + } + + .content { + padding: 2.8rem 9.5rem 0 9.5rem; + + :global(.row) { + margin-bottom: 1.6rem; + } + + input { + background-color: #f5f5f5; + border: 1px solid #b6bec4; + } + + } + + .actions { + padding: 5.9rem 2.1rem 3.9rem 2.1rem; + display: flex; + justify-content: center; + + button { + background-color: $primary-color; + box-shadow: 0 0.4rem 0.4rem rgba(0, 0, 0, 0.12); + border: none; + border-radius: 0.6rem; + color: #ffffff; + font-size: 1.8rem; + font-weight: 400; + line-height: 2.1rem; + padding: 1rem 6rem 1rem 6rem; + } + + } + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/results/ResultsHeader.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/results/ResultsHeader.js new file mode 100644 index 0000000..887663d --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/results/ResultsHeader.js @@ -0,0 +1,13 @@ +import exportIcon from '../../assets/export.svg'; +import styles from './ResultsHeader.module.scss'; + +const ResultsHeader = (props) => { + return ( +
    +

    {props.query}

    +
    +
    + ); +}; + +export default ResultsHeader; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/results/ResultsHeader.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/results/ResultsHeader.module.scss new file mode 100644 index 0000000..7b0c79b --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/results/ResultsHeader.module.scss @@ -0,0 +1,10 @@ +@import '../../variables'; + +.resultsHeader { + h1 { + color: $primary-color; + font-size: 3.6rem; + font-weight: 400; + line-height: 4.2rem; + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/results/ResultsPager.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/results/ResultsPager.js new file mode 100644 index 0000000..74967e5 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/results/ResultsPager.js @@ -0,0 +1,66 @@ +import { Link } from 'react-router-dom'; +import { useTranslation } from 'react-i18next'; + +import useSearch from '../../hooks/use-search'; +import styles from './ResultsPager.module.scss'; + +const ResultsPager = (props) => { + const pageSize = 20; + const offset = props.offset; + const total = props.total; + const totalPages = Math.ceil(total / pageSize); + const currentPage = Math.floor(offset / pageSize) + 1; + + // Hooks + const { t } = useTranslation(); + const search = useSearch(); + + const renderPreviousPage = () => { + const className = currentPage <= 1 ? 'disabled' : null; + return renderPage(currentPage - 1, '<<', className); + }; + + const renderFirstPage = () => { + const className = currentPage === 1 ? 'active' : null; + return renderPage(1, '1', className); + }; + + const renderCurrentPage = () => { + return renderPage(currentPage, currentPage, 'active'); + }; + + const renderLastPage = () => { + const className = currentPage === totalPages ? 'active' : null; + return renderPage(totalPages, totalPages, className); + }; + + const renderNextPage = () => { + const className = currentPage >= totalPages ? 'disabled' : null; + return renderPage(currentPage + 1, '>>', className); + }; + + const renderPage = (page, title, className) => { + const link = search.getPagerLink(page); + return ( + {title} + ); + }; + + return ( +
    +
    {t('shared.searchRecords', { start: offset + 1, end: offset + pageSize, total: total })}
    +
    +
    + {renderPreviousPage()} + {currentPage > 1 && renderFirstPage()} + {renderCurrentPage()} + {currentPage < totalPages && renderLastPage()} + {renderNextPage()} +
    +
    +
    + ); +}; + + +export default ResultsPager; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/results/ResultsPager.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/results/ResultsPager.module.scss new file mode 100644 index 0000000..851d524 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/results/ResultsPager.module.scss @@ -0,0 +1,32 @@ +@import '../../variables'; + +.pager { + border-bottom: 2px solid $border-color; + padding-bottom: 1.1rem; + margin-bottom: 2.2rem; + + .pages { + display: inline-block; + + a { + color: $text-color; + display: inline-block; + padding: 1rem; + text-decoration: none; + + &.active { + background-color: #b6bec3; + border-radius: 0.4rem; + color: #f5f5f5; + } + + &.disabled { + color: $text-color-secondary; + cursor: auto; + pointer-events: none; + } + } + } + +} + diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/History.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/History.js new file mode 100644 index 0000000..f33f7c3 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/History.js @@ -0,0 +1,27 @@ +import { useTranslation } from 'react-i18next'; + +import SearchDropdown from "./SearchDropdown"; +import HistoryItem from "./HistoryItem"; +import styles from './History.module.scss'; +import useHistory from "../../hooks/use-history"; + +const History = (props) => { + // Hooks + const { t } = useTranslation(); + const history = useHistory(); + + const source = props.source; + + return ( + +
    +

    {t('shared.searchHistory')}

    +
      + {history.getHistory(props.source).map((x, i) => )} +
    +
    +
    + ); +}; + +export default History; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/History.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/History.module.scss new file mode 100644 index 0000000..ba0474e --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/History.module.scss @@ -0,0 +1,18 @@ +@import '../../variables'; + +.history { + padding: 0 5rem 4.9rem 3.8rem; + + h3 { + color: $primary-color; + font-size: 1.8rem; + margin-bottom: 2.8rem; + margin-top: 1.9rem; + } + + ul.historyList { + list-style: none; + margin: 0; + padding: 0; + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/HistoryItem.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/HistoryItem.js new file mode 100644 index 0000000..782794d --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/HistoryItem.js @@ -0,0 +1,17 @@ +import { Link } from 'react-router-dom'; +import useSearch from '../../hooks/use-search'; + +import styles from './HistoryItem.module.scss'; + +const HistoryItem = (props) => { + const search = useSearch(); + const source = props.source; + + return ( +
  • + {props.query} +
  • + ); +}; + +export default HistoryItem; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/HistoryItem.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/HistoryItem.module.scss new file mode 100644 index 0000000..fb2b73c --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/HistoryItem.module.scss @@ -0,0 +1,12 @@ +@import '../../variables'; + +li.historyListItem { + border-bottom: 1px solid $border-color; + margin-bottom: 0.8rem; + padding-bottom: 0.8rem; + + a { + color: $text-color; + text-decoration: none; + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/SearchDropdown.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/SearchDropdown.js new file mode 100644 index 0000000..cf5d1ec --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/SearchDropdown.js @@ -0,0 +1,13 @@ +import styles from './SearchDropdown.module.scss'; + +const SearchDropdown = (props) => { + return ( +
    +
    + {props.children} +
    +
    + ); +} + +export default SearchDropdown; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/SearchDropdown.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/SearchDropdown.module.scss new file mode 100644 index 0000000..a7bdc14 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/SearchDropdown.module.scss @@ -0,0 +1,13 @@ +.dropdown { + position: relative; + + .dropdownContent { + background-color: #f5f5f5; + border-radius: 0 0 0.6rem 0.6rem; + box-shadow: 0 0.4rem 1.2rem rgba(0, 0, 0, 0.25); + padding: 1.6rem; + position: absolute; + width: 100%; + z-index: 1; + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/SearchHelp.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/SearchHelp.js new file mode 100644 index 0000000..3a99a8a --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/SearchHelp.js @@ -0,0 +1,20 @@ +import { useTranslation } from 'react-i18next'; + +import SearchDropdown from './../shared/SearchDropdown.js'; +import styles from './SearchHelp.module.scss'; + +const SearchHelp = (props) => { + // Hooks + const { t } = useTranslation(); + + return ( + +
    +

    {t('shared.searchHelp')}

    + {props.children} +
    +
    + ) +}; + +export default SearchHelp; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/SearchHelp.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/SearchHelp.module.scss new file mode 100644 index 0000000..57e18b2 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/SearchHelp.module.scss @@ -0,0 +1,36 @@ +@import '../../variables'; + +.help { + padding: 0 5rem 4.9rem 3.8rem; + + h3 { + color: $primary-color; + font-size: 1.8rem; + margin-bottom: 2.8rem; + margin-top: 1.9rem; + } + + ul { + list-style: none; + margin: 0; + padding: 0; + + li { + border-bottom: 1px solid $border-color; + margin-bottom: 2.8rem; + padding-bottom: 2.6rem; + + h4 { + color: $primary-color; + font-size: 1.6rem; + } + + p { + color: $text-color; + font-size: 1.6rem; + margin: 0; + padding: 0; + } + } + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/Spinner.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/Spinner.js new file mode 100644 index 0000000..d0c569f --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/Spinner.js @@ -0,0 +1,9 @@ +import styles from './Spinner.module.scss'; + +const Spinner = () => { + return ( +
    + ); +}; + +export default Spinner; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/Spinner.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/Spinner.module.scss new file mode 100644 index 0000000..2440ed1 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/components/shared/Spinner.module.scss @@ -0,0 +1,29 @@ +@import '../../variables'; + +.ldsDualRing { + display: inline-block; + width: 80px; + height: 80px; +} + +.ldsDualRing:after { + content: " "; + display: block; + width: 64px; + height: 64px; + margin: 8px; + border-radius: 50%; + border: 6px solid $text-color; + border-color: $text-color transparent $text-color transparent; + animation: ldsDualRing 1.2s linear infinite; +} + +@keyframes ldsDualRing { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/hooks/use-download.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/hooks/use-download.js new file mode 100644 index 0000000..46bf9e4 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/hooks/use-download.js @@ -0,0 +1,27 @@ +const useDownload = (url) => { + const start = (body) => { + fetch(url, { + method: 'POST', + body: JSON.stringify(body), + headers: { + 'Content-Type': 'application/json' + } + }) + .then((res) => res.blob()) + .then(blob => { + var url = window.URL.createObjectURL(blob); + var a = document.createElement('a'); + a.href = url; + a.download = "export.csv"; + document.body.appendChild(a); // we need to append the element to the dom -> otherwise it will not work in firefox + a.click(); + a.remove(); //afterwards we remove the element again + }); + }; + + return { + start + }; +}; + +export default useDownload; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/hooks/use-history.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/hooks/use-history.js new file mode 100644 index 0000000..b29169f --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/hooks/use-history.js @@ -0,0 +1,37 @@ +import { useParams, useSearchParams } from "react-router-dom"; + +const useHistory = () => { + const { corpusId } = useParams(); + const [searchParams] = useSearchParams(); + + const getStorageKey = (source) => { + return `${source}_history`; + }; + + const getHistory = (source) => { + const storageKey = getStorageKey(source); + return JSON.parse(localStorage.getItem(storageKey)) ?? []; + }; + + const saveSearch = (source) => { + const query = searchParams.get('query'); + const storageKey = getStorageKey(source); + let searchItem = { corpusId: corpusId, query: query }; + + let currentHistory = getHistory(source); + + // Check if the item already exists in the history + let searchItemJson = JSON.stringify(searchItem); + if (!currentHistory.some(x => JSON.stringify(x) === searchItemJson)) { + var newHistory = [searchItem, ...currentHistory.slice(0, 9)]; + localStorage.setItem(storageKey, JSON.stringify(newHistory)); + } + }; + + return { + getHistory, + saveSearch, + }; +}; + +export default useHistory; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/hooks/use-search.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/hooks/use-search.js new file mode 100644 index 0000000..7d06500 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/hooks/use-search.js @@ -0,0 +1,156 @@ +import { useLocation, useNavigate, useParams, useSearchParams } from 'react-router-dom'; + +const useSearch = () => { + const navigate = useNavigate(); + const { corpusId } = useParams(); + const [searchParams] = useSearchParams(); + const location = useLocation(); + const rootUrl = `/${corpusId}`; + + const newSearch = (source, query) => { + const link = `/${corpusId}/${source}/search?query=${query}`; + navigate(link); + }; + + const getSearchLink = (source, query) => { + return `/${corpusId}/${source}/search?query=${query}`; + }; + + const getSearchRequest = (includePage = true) => { + // Common properties + var request = { + corpusId: corpusId, + }; + + if (includePage) { + const page = searchParams.get('page') ? searchParams.get('page') : 1; + const from = (page - 1) * 20; + const size = 20; + + request['from'] = from; + request['size'] = size; + } + + // Query + if (searchParams.get('query')) { + request['query'] = searchParams.get('query'); + + } else { + // Main word + let mainWord = { + form: searchParams.get('mainWord.form'), + lemma: searchParams.get('mainWord.lemma'), + formSearchType: searchParams.get('mainWord.formSearchType'), + }; + request['mainWord'] = mainWord; + + // Word in context + let wordsInContext = []; + for (let i = 0; i < 100; i++) { + if (searchParams.has('wordInContext[' + i + '].lemma')) { + let wordInContext = { + form: searchParams.get('wordInContext[' + i + '].form'), + lemma: searchParams.get('wordInContext[' + i + '].lemma'), + formSearchType: searchParams.get('wordInContext[' + i + '].formSearchType'), + distanceType: searchParams.get('wordInContext[' + i + '].distanceType'), + leftPosition: searchParams.get('wordInContext[' + i + '].leftPosition'), + rightPosition: searchParams.get('wordInContext[' + i + '].rightPosition') + }; + wordsInContext.push(wordInContext); + } + } + if (wordsInContext.length > 0) { + request['wordsInContext'] = wordsInContext; + } + } + + // Filters + if (searchParams.has('TextIds') === true) { + request['TextIds'] = searchParams.getAll('TextIds'); + } + return request; + }; + + const getDetailsRequest = (paragraphId, tokenOrder) => { + var request = getSearchRequest(false); + request['ParagraphId'] = paragraphId; + request['TokenOrder'] = tokenOrder; + return request; + }; + + const getQuery = () => { + return searchParams.get('query'); + } + + const getPage = () => { + return searchParams.get('page'); + } + + const getPagerLink = (page) => { + + searchParams.set('page', page); + + return `${location.pathname}?${searchParams.toString()}`; + }; + + const getFilterLink = (name, key) => { + let newParams = new URLSearchParams(searchParams); + newParams.append(name, key); + return `${location.pathname}?${newParams.toString()}`; + }; + + const getClearFilterLink = (name, key) => { + var newParams = new URLSearchParams(); + searchParams.forEach((v, k) => { + if (k !== name || v !== key) { + newParams.append(k, v); + } + }); + + return `${location.pathname}?${newParams.toString()}`; + } + + const isFiltered = (name, key) => { + var values = searchParams.getAll(name); + return values.indexOf(key) !== -1; + }; + + const getAlternateSearchLink = (search) => { + let newParams = new URLSearchParams(); + newParams.append('mainWord.form', search.mainWord.form); + newParams.append('mainWord.lemma', search.mainWord.lemma); + newParams.append('mainWord.formSearchType', search.mainWord.formSearchType); + + if (search.wordsInContext) { + search.wordsInContext.forEach((w, i) => { + newParams.append('wordInContext[' + i + '].form', w.form); + newParams.append('wordInContext[' + i + '].lemma', w.lemma); + newParams.append('wordInContext[' + i + '].formSearchType', w.formSearchType); + newParams.append('wordInContext[' + i + '].distanceType', w.distanceType); + newParams.append('wordInContext[' + i + '].leftPosition', 0); + newParams.append('wordInContext[' + i + '].rightPosition', i + 1); + + }); + } + + return `${location.pathname}?${newParams.toString()}`; + }; + + return { + corpusId, + rootUrl, + newSearch, + getSearchLink, + getSearchRequest, + getDetailsRequest, + getQuery, + getPage, + getPagerLink, + getFilterLink, + getClearFilterLink, + isFiltered, + getAlternateSearchLink, + }; +}; + +export default useSearch; diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/i18n.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/i18n.js new file mode 100644 index 0000000..722fd3a --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/i18n.js @@ -0,0 +1,99 @@ +import i18n from 'i18next'; +import { initReactI18next } from 'react-i18next'; + +const resources = { + en: { + translation: { + shared: { + 'concordance': 'Search', + 'countSentences': 'sentences', + 'countTexts': 'texts', + 'countWords': 'words', + 'enterSearch': 'Enter search query', + 'export': 'Export', + 'exportFirst': 'Export first', + 'exportMax': 'You can export up to {{max}} records!', + 'exportRandom': 'Export random', + 'exportRecords': 'records.', + 'exportTitle': 'Export data', + 'exportTotal': 'The number of records is {{total}}.', + 'list': 'List', + 'noResults': 'No results were found for your search.', + 'searchError': 'Server returned error when searching.', + 'searchHelp': 'Help', + 'searchHistory': 'Search history', + 'searchRecords': 'Showing {{start}}-{{end}} from {{total}} records.' + }, + concordance: { + 'title': 'Search concordances', + 'detailsAnnotation': 'Corpus annotation', + 'detailsAnnotationBasicForm': 'Basic form', + 'detailsAnnotationPos': 'Morphological properties', + 'detailsAnnotationWord': 'Word', + 'detailsParagraph': 'Paragraph', + 'detailsTextAuthor': 'Author', + 'detailsTextSource': 'Source', + 'detailsTextTitle': 'Title', + 'detailsTextYear': 'Year', + 'aggregationLemmas': 'Basic forms', + 'aggregationText': 'Source' + }, + list: { + 'title': 'Search list' + } + } + }, + sl: { + translation: { + shared: { + 'concordance': 'Iskanje', + 'countSentences': 'stavkov', + 'countTexts': 'besedil', + 'countWords': 'besed', + 'enterSearch': 'Vpišite iskalni niz', + 'export': 'Izvozi', + 'exportFirst': 'Izvozi prvih', + 'exportMax': 'Izvozite lahko največ {{max}} zapisov!', + 'exportRandom': 'Izvozi naključnih', + 'exportRecords': 'zapisov.', + 'exportTitle': 'Izvoz podatkov', + 'exportTotal': 'Število zapisov je {{total}}.', + 'list': 'Seznami', + 'noResults': 'Vaše iskanje ni obrodilo sadov.', + 'searchError': 'Strežnik je vrnil napako pri iskanju.', + 'searchHelp': 'Pomoč', + 'searchHistory': 'Zgodovina iskanj', + 'searchRecords': 'Prikazujem {{start}}-{{end}} od {{total}} zapisov.' + }, + concordance: { + 'title': 'Iskanje po konkordancah', + 'detailsAnnotation': 'Korpusne oznake', + 'detailsAnnotationBasicForm': 'Osnovna oblika', + 'detailsAnnotationPos': 'Oblikoslovne značilnosti osnovne oblike', + 'detailsAnnotationWord': 'Beseda', + 'detailsParagraph': 'Prikaz odstavka', + 'detailsTextAuthor': 'avtor', + 'detailsTextSource': 'vir', + 'detailsTextTitle': 'naslov', + 'detailsTextYear': 'leto nastanka', + 'aggregationLemmas': 'Osnovne oblike', + 'aggregationText': 'Vir' + }, + list: { + 'title': 'Iskanje po seznamih' + } + } + } +}; + +i18n + .use(initReactI18next) + .init({ + resources, + lng: 'sl', + interpolation: { + escapeValue: false + } + }); + +export default i18n; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/index.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/index.js new file mode 100644 index 0000000..ace3c9d --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/index.js @@ -0,0 +1,23 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import { BrowserRouter } from 'react-router-dom'; +import App from './App'; +import i18n from './i18n'; + +import './index.scss'; + + +// Set default language +const language = localStorage.getItem("language"); +if (language) { + i18n.changeLanguage(language); +} + +const root = ReactDOM.createRoot(document.getElementById('root')); +root.render( + + + + + +); \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/index.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/index.scss new file mode 100644 index 0000000..25b1b66 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/index.scss @@ -0,0 +1,25 @@ +// Bootstrap variables overrides +$grid-gutter-width: 0; + +// Import Bootstrap +@import '../node_modules/bootstrap/scss/bootstrap'; + +// RSDO + +@import 'variables'; + +html { + font-size: 62.5%; +} + +body { + background-color: #f5f5f5; + color: $text-color; + font-family: 'Roboto', 'Helvetica'; + font-size: 1.6rem; +} + +.container-fluid { + padding-left: 3.2rem; + padding-right: 3.2rem; +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/layout/IndexLayout.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/layout/IndexLayout.js new file mode 100644 index 0000000..ea273a1 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/layout/IndexLayout.js @@ -0,0 +1,80 @@ +import { useState } from 'react'; +import { Link } from 'react-router-dom'; +import { useTranslation } from 'react-i18next'; + +import styles from './IndexLayout.module.scss'; +import searchIcon from '../assets/search.svg'; +import historyIcon from '../assets/history.svg'; +import helpIcon from '../assets/help.svg'; +import concordanceActiveIcon from '../assets/concordance-active.svg'; +import concordanceInactiveIcon from '../assets/concordance-inactive.svg'; +import listActiveIcon from '../assets/list-active.svg'; +import listInactiveIcon from '../assets/list-inactive.svg'; +import IndexStatistics from '../components/index/IndexStatistics'; +import IndexMenu from '../components/index/IndexMenu'; +import useSearch from '../hooks/use-search'; +import History from '../components/shared/History'; + +const IndexLayout = (props) => { + // Hooks + const { t } = useTranslation(); + const search = useSearch(); + + // State + const [query, setQuery] = useState(search.getQuery()); + const [isHelpVisible, setIsHelpVisible] = useState(false); + const [isHistoryVisible, setIsHistoryVisible] = useState(false); + + // Props + const { source, help, title } = props; + const isConcordance = source === 'concordance'; + + const onSubmitHandler = (e) => { + e.preventDefault(); + if (query) { + search.newSearch(source, query); + } + }; + + const onHistoryClickHandler = () => { + setIsHistoryVisible(isHistoryVisibleOld => !isHistoryVisibleOld); + } + + const onHelpClickHandler = () => { + setIsHelpVisible(isHelpVisibleOld => !isHelpVisibleOld); + } + + return ( + <> + +
    +
    +
    +
    +

    {title}

    +
      +
    • {t('shared.concordance')}{t('shared.concordance')}
    • +
    • {t('shared.list')}{t('shared.list')}
    • +
    +
    +
    + + setQuery(e.target.value)} /> + + +
    +
    + {isHistoryVisible && } + {isHelpVisible && help} +
    +
    +
    +
    +
    + +
    + + ); +}; + +export default IndexLayout; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/layout/IndexLayout.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/layout/IndexLayout.module.scss new file mode 100644 index 0000000..510c6d1 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/layout/IndexLayout.module.scss @@ -0,0 +1,97 @@ +@import '../variables'; + +.search { + background-color: $primary-color; + padding-bottom: 5.6rem; + + h1 { + color: #d9d9d9; + font-size: 3.6rem; + font-weight: 300; + line-height: 4.2rem; + margin-top: 0.5rem; + text-align: center; + } + + ul.areas { + list-style: none; + padding: 0; + margin: 3.5rem 0 0 0; + + li { + align-items: center; + background-color: #eeeeee; + display: inline-flex; + height: 4.7rem; + padding-left: 1.3rem; + width: 18.1rem; + + &:first-child { + border-radius: 0.6rem 0 0 0; + } + + &:last-child { + border-radius: 0 0.6rem 0 0; + } + + a { + color: #848c91; + padding-left: 1.4rem; + text-decoration: none; + } + + &.active { + background-color: #f5f5f5; + + a { + color: $primary-color; + } + } + } + } + + .searchInput { + align-items: center; + background-color: #f5f5f5; + border-radius: 0 0.6rem 0.6rem 0.6rem; + box-shadow: 0 0.4rem 1.4rem rgba(0, 0, 0, 0.16); + display: flex; + height: 8rem; + + &.dropdownActive { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + + button { + background-color: transparent; + border: none; + } + + .searchButton { + margin-left: 1.3rem; + } + + input { + background: transparent; + border: none; + color: #848c91; + flex-grow: 1; + font-size: 2.4rem; + line-height: 2.8rem; + margin-left: 4.9rem; + + &:focus { + outline: none; + } + } + + .historyButton { + margin-left: 2.1rem; + } + + .helpButton { + margin: 0 2.8rem 0 2.1rem; + } + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/layout/ResultsLayout.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/layout/ResultsLayout.js new file mode 100644 index 0000000..bfba73b --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/layout/ResultsLayout.js @@ -0,0 +1,90 @@ +import { useState } from 'react'; +import { Link } from 'react-router-dom'; +import { useTranslation } from 'react-i18next'; +import useSearch from '../hooks/use-search'; + +import History from '../components/shared/History'; +import logo from '../assets/logo-small.png'; +import styles from './ResultsLayout.module.scss'; +import searchIcon from '../assets/search.svg'; +import historyIcon from '../assets/history.svg'; +import helpIcon from '../assets/help.svg'; +import concordanceActiveIcon from '../assets/concordance-active.svg'; +import concordanceInactiveIcon from '../assets/concordance-inactive.svg'; +import listActiveIcon from '../assets/list-active.svg'; +import listInactiveIcon from '../assets/list-inactive.svg'; + +const ResultsLayout = (props) => { + // Hooks + const { t } = useTranslation(); + const search = useSearch(); + + // State + const [query, setQuery] = useState(search.getQuery()); + const [isHelpVisible, setIsHelpVisible] = useState(false); + const [isHistoryVisible, setIsHistoryVisible] = useState(false); + + // Props + const { source, help } = props; + const isConcordance = source === 'concordance'; + + const onSubmitHandler = (e) => { + e.preventDefault(); + if (query) { + search.newSearch(source, query); + } + }; + + const onHistoryClickHandler = () => { + setIsHistoryVisible(isHistoryVisibleOld => !isHistoryVisibleOld); + } + + const onHelpClickHandler = () => { + setIsHelpVisible(isHelpVisibleOld => !isHelpVisibleOld); + } + + return ( + <> +
    +
    +
    +
    + Logo +
      +
    • Concordance
    • +
    • List
    • +
    +
    +
    +
    +
    + + setQuery(e.target.value)} /> + + +
    +
    + {isHistoryVisible && } + {isHelpVisible && help} +
    +
    +
    +
    +
    +
    + {props.children} +
    +
    +
    +
    +
    +
    © Amebis, d. o. o., Kamnik
    +
    +
    +
    + + ); +}; + +export default ResultsLayout; + diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/layout/ResultsLayout.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/layout/ResultsLayout.module.scss new file mode 100644 index 0000000..b99f59c --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/layout/ResultsLayout.module.scss @@ -0,0 +1,89 @@ +@import '../variables'; + +.menu { + background-color: $primary-color; + height: 6.4rem; + + :global(.container-fluid), + :global(.row) { + height: 100%; + } + + ul.areaButtons { + list-style: none; + margin: 0; + padding: 0; + float: right; + + li.areaButton { + align-items: center; + display: inline-flex; + background-color: #ffffff; + border-radius: 0.8rem; + height: 4.6rem; + justify-content: center; + margin-right: 0.4rem; + width: 4.6rem; + } + } + + .searchInput { + align-items: center; + background-color: #f5f5f5; + border-radius: 0.6rem 0.6rem 0.6rem 0.6rem; + display: flex; + height: 4.6rem; + + &.dropdownActive { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + + button { + background-color: transparent; + border: none; + } + + .searchButton { + margin-left: 2.5rem; + } + + input { + background: transparent; + border: none; + color: #3a464e; + flex-grow: 1; + font-size: 1.6rem; + font-weight: 500; + line-height: 1.9rem; + margin-left: 2.6rem; + + &:focus { + outline: none; + } + } + + .historyButton { + margin-left: 1.9rem; + } + + .helpButton { + margin: 0 1.8rem 0 1.9rem; + } + } +} + +.results { + padding-top: 4.6rem; +} + +.footer { + background-color: #d9d9d9; + height: 4rem; + margin-top: 1.6rem; + + :global(.container-fluid), + :global(.row) { + height: 100%; + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/pages/NoCorpus.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/pages/NoCorpus.js new file mode 100644 index 0000000..74218e9 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/pages/NoCorpus.js @@ -0,0 +1,9 @@ +const NoCorpus = () => { + return ( +
    + No corpus selected! +
    + ); +}; + +export default NoCorpus; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/pages/concordance/ConcordanceIndex.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/pages/concordance/ConcordanceIndex.js new file mode 100644 index 0000000..1da6ef9 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/pages/concordance/ConcordanceIndex.js @@ -0,0 +1,15 @@ +import { useTranslation } from 'react-i18next'; + +import IndexLayout from '../../layout/IndexLayout'; +import ConcordanceHelp from '../../components/concordance/ConcordanceHelp'; + +const ConcordanceIndex = () => { + // Hooks + const { t } = useTranslation(); + + return ( + } /> + ); +} + +export default ConcordanceIndex; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/pages/concordance/ConcordanceResults.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/pages/concordance/ConcordanceResults.js new file mode 100644 index 0000000..6b731fe --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/pages/concordance/ConcordanceResults.js @@ -0,0 +1,87 @@ +import ConcordanceAggregations from '../../components/concordance/ConcordanceAggregations'; +import ConcordanceList from '../../components/concordance/ConcordanceList'; +import ConcordanceHelp from '../../components/concordance/ConcordanceHelp'; +import ResultsHeader from '../../components/results/ResultsHeader'; +import ResultsPager from '../../components/results/ResultsPager'; +import ResultsExport from '../../components/results/ResultsExport'; +import useHistory from '../../hooks/use-history'; +import useSearch from '../../hooks/use-search'; +import useDownload from '../../hooks/use-download'; +import ResultsLayout from '../../layout/ResultsLayout'; +import Spinner from '../../components/shared/Spinner'; +import { useQuery } from 'react-query'; +import { useState } from 'react'; +import { useTranslation } from 'react-i18next'; + +const ConcordanceResults = () => { + // Hooks + const { t } = useTranslation(); + const search = useSearch(); + const history = useHistory(); + + const body = search.getSearchRequest(); + + const fetchConcordances = () => fetch(`${window.baseAppPath}/concordancer/corpus/${search.corpusId}/concordances/search`, { + method: 'POST', + body: JSON.stringify(body), + headers: { + 'Content-Type': 'application/json' + } + }).then((res) => { + history.saveSearch('concordance'); + return res.json(); + }); + + const { isLoading, isSuccess, isError, data, error } = useQuery(['concordances', body], fetchConcordances, { keepPreviousData: true, refetchOnWindowFocus: false }); + const [isVisible, setIsVisible] = useState(false); + const download = useDownload(`${window.baseAppPath}/concordancer/corpus/${search.corpusId}/concordances/export`); + + const onExportClose = () => { + setIsVisible(false); + }; + + const onExportConfirm = (type, rows) => { + setIsVisible(false); + body.type = type; + body.rows = rows; + download.start(body); + }; + + if (!isLoading && isSuccess && data.items.length > 0) { + return ( + }> +
    +
    + +
    +
    + setIsVisible(prevIsVisible => !prevIsVisible)} /> + + {isVisible && } + +
    +
    +
    + ); + } else { + let content = <>; + if (isLoading) { + content = + } else if (isError) { + content =

    {t('shared.searchError')}

    + } else if (!isLoading && data && data.items.length === 0) { + content =

    {t('shared.noResults')}

    + } + return ( + +
    +
    + {content} +
    +
    +
    + ); + }; +}; + +export default ConcordanceResults; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/pages/list/ListIndex.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/pages/list/ListIndex.js new file mode 100644 index 0000000..2157d66 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/pages/list/ListIndex.js @@ -0,0 +1,15 @@ +import { useTranslation } from 'react-i18next'; + +import IndexLayout from '../../layout/IndexLayout'; +import ListHelp from '../../components/list/ListHelp'; + +const ListIndex = () => { + // Hooks + const { t } = useTranslation(); + + return ( + } /> + ); +}; + +export default ListIndex; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/pages/list/ListResults.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/pages/list/ListResults.js new file mode 100644 index 0000000..e82ef58 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/pages/list/ListResults.js @@ -0,0 +1,83 @@ +import { useQuery } from 'react-query'; +import { useTranslation } from 'react-i18next'; +import { useState } from 'react'; + +import useSearch from '../../hooks/use-search'; +import useDownload from '../../hooks/use-download'; +import useHistory from '../../hooks/use-history'; + +import ResultsLayout from '../../layout/ResultsLayout'; +import ResultsHeader from '../../components/results/ResultsHeader'; +import ResultsPager from '../../components/results/ResultsPager'; +import ResultsExport from '../../components/results/ResultsExport'; +import ListItems from '../../components/list/ListItems'; +import Spinner from '../../components/shared/Spinner'; + +const ListResults = () => { + // Hooks + const { t } = useTranslation(); + const search = useSearch(); + const history = useHistory(); + const body = search.getSearchRequest(); + + const fetchList = () => fetch(`${window.baseAppPath}/concordancer/corpus/${search.corpusId}/list/search`, { + method: 'POST', + body: JSON.stringify(body), + headers: { + 'Content-Type': 'application/json' + } + }).then((res) => { + history.saveSearch('list'); + return res.json(); + }); + + const { isLoading, isSuccess, isError, data, error } = useQuery(['list', body], fetchList, { keepPreviousData: true, refetchOnWindowFocus: false }); + const [isVisible, setIsVisible] = useState(false); + const download = useDownload(`${window.baseAppPath}/concordancer/corpus/${search.corpusId}/list/export`); + + const onExportClose = () => { + setIsVisible(false); + }; + + const onExportConfirm = (type, rows) => { + setIsVisible(false); + body.type = type; + body.rows = rows; + download.start(body); + }; + + if (!isLoading && isSuccess && data.items.length > 0) { + return ( + +
    +
    + setIsVisible(prevIsVisible => !prevIsVisible)} /> + + {isVisible && } + +
    +
    +
    + ); + } else { + let content = <>; + if (isLoading) { + content = + } else if (isError) { + content =

    {t('shared.searchError')}

    + } else if (!isLoading && data && data.items.length === 0) { + content =

    {t('shared.noResults')}

    + } + return ( + +
    +
    + {content} +
    +
    +
    + ); + } +}; + +export default ListResults; diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/pages/list/ListResults.module.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/pages/list/ListResults.module.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/pages/list/ListResultsData.js b/src/apps/Rsdo.Concordancer.Api/WebApp/src/pages/list/ListResultsData.js new file mode 100644 index 0000000..8be1248 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/pages/list/ListResultsData.js @@ -0,0 +1,32 @@ +const response = { + items: [ + { term: 'cemènt', lemma: 'cemènt', frequency: 9023 }, + { term: 'aluminátni cemènt', lemma: 'aluminátni cemènt', frequency: 7646 }, + { term: 'béli cemènt', lemma: 'béli cemènt', frequency: 3183 }, + { term: 'cemènt visôke zgódnje tŕdnosti', lemma: 'cemènt visôke zgódnje tŕdnosti', frequency: 5096 }, + { term: 'cemènt z nízko hidratácijsko toplôto', lemma: 'cemènt z nízko hidratácijsko toplôto', frequency: 8468 }, + { term: 'ekspanzívni cemènt', lemma: 'ekspanzívni cemènt', frequency: 1525 }, + { term: 'hidrávlični cemènt', lemma: 'hidrávlični cemènt', frequency: 9036 }, + { term: 'hidrofóbni cemènt', lemma: 'hidrofóbni cemènt', frequency: 7425 }, + { term: 'hitrovézni cemènt', lemma: 'hitrovézni cemènt', frequency: 8029 }, + { term: 'hitrovezóči cemènt', lemma: 'hitrovezóči cemènt', frequency: 4772 }, + { term: 'méšani cemènt', lemma: 'méšani cemènt', frequency: 3233 }, + { term: 'méšani pórtlandski cemènt', lemma: 'méšani pórtlandski cemènt', frequency: 9402 }, + { term: 'metalúrški cemènt', lemma: 'metalúrški cemènt', frequency: 1249 }, + { term: 'navádni pórtlandski cemènt', lemma: 'navádni pórtlandski cemènt', frequency: 8574 }, + { term: 'normálni cemènt', lemma: 'normálni cemènt', frequency: 1501 }, + { term: 'normálnovezóči cemènt', lemma: 'normálnovezóči cemènt', frequency: 7748 }, + { term: 'počásivezóči cemènt', lemma: 'počásivezóči cemènt', frequency: 1992 }, + { term: 'pórtland cemènt', lemma: 'pórtland cemènt', frequency: 7025 }, + { term: 'pórtlandski cemènt', lemma: 'pórtlandski cemènt', frequency: 7975 }, + { term: 'pucolánski cemènt', lemma: 'pucolánski cemènt', frequency: 5747 }, + { term: 'sulfátnoodpórni cemènt', lemma: 'sulfátnoodpórni cemènt', frequency: 4074 }, + { term: 'súpersulfátni cemènt', lemma: 'súpersulfátni cemènt', frequency: 1389 }, + { term: 'vodoodpórni cemènt', lemma: 'vodoodpórni cemènt', frequency: 1986 }, + { term: 'žlíndrin cemènt', lemma: 'žlíndrin cemènt', frequency: 6759 }, + ], + total: 24, + offset: 0, +}; + +export default response; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/WebApp/src/variables.scss b/src/apps/Rsdo.Concordancer.Api/WebApp/src/variables.scss new file mode 100644 index 0000000..28857a5 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/WebApp/src/variables.scss @@ -0,0 +1,5 @@ +$primary-color: #006cb7; +$border-color: #d9d9d9; + +$text-color: #46535b; +$text-color-secondary: #848c90; \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.Api/appsettings.Development.json b/src/apps/Rsdo.Concordancer.Api/appsettings.Development.json new file mode 100644 index 0000000..8983e0f --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/appsettings.Development.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/src/apps/Rsdo.Concordancer.Api/appsettings.json b/src/apps/Rsdo.Concordancer.Api/appsettings.json new file mode 100644 index 0000000..7babf90 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.Api/appsettings.json @@ -0,0 +1,69 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "Kestrel": { + "Endpoints": { + "Http": { + "Url": "http://*:5000" + } + } + }, + "Serilog": { + "Using": [ + "Serilog.Sinks.Console", + "Serilog.Sinks.File", + "Rsdo.Concordancer.Api" + ], + "MinimumLevel": "Information", + "WriteTo": [ + { + "Name": "Console" + }, + { + "Name": "File", + "Args": { + "path": "log.txt", + "rollingInterval": "Day", + "retainedFileCountLimit": 7 + } + }, + { + "Name": "Logger", + "Args": { + "configureLogger": { + "WriteTo": [ + { + "Name": "RsdoEmail", + "Args": { + "FromEmail": "email@server.com", + "ToEmail": "email@server.com", + "EmailSubject": "Hangfire Error", + "MailServer": "mail.server.com", + "UserName": "username", + "Password": "mystrongpassword", + "Port": 465, + "EnableSsl": true + } + } + ], + "Filter": [ + { + "Name": "ByIncludingOnly", + "Args": { + "expression": "StartsWith(SourceContext, 'Hangfire.')" + } + } + ] + } + } + } + ] + }, + "AllowedHosts": "*" +} + \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.SystemManager/.dockerignore b/src/apps/Rsdo.Concordancer.SystemManager/.dockerignore new file mode 100644 index 0000000..cd967fc --- /dev/null +++ b/src/apps/Rsdo.Concordancer.SystemManager/.dockerignore @@ -0,0 +1,25 @@ +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/.idea +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.SystemManager/CompositionRoot/Bootstrapper.cs b/src/apps/Rsdo.Concordancer.SystemManager/CompositionRoot/Bootstrapper.cs new file mode 100644 index 0000000..a1f67d3 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.SystemManager/CompositionRoot/Bootstrapper.cs @@ -0,0 +1,24 @@ +using Autofac; +using Microsoft.Extensions.Logging; +using Rsdo.Concordancer.Data.CompositionRoot; +using Rsdo.Concordancer.Infrastructure.CompositionRoot; +using Rsdo.Concordancer.Services.CompositionRoot; + +namespace Rsdo.Concordancer.SystemManager.CompositionRoot; + +public class Bootstrapper +{ + public IContainer Bootstrap() + { + var builder = new ContainerBuilder(); + builder.RegisterModule(new ServicesModule()); + builder.RegisterModule(new InfrastructureModule()); + builder.RegisterModule(new DataModule()); + + // Logging + builder.RegisterInstance(new LoggerFactory()).As(); + builder.RegisterGeneric(typeof(Logger<>)).As(typeof(ILogger<>)).SingleInstance(); + + return builder.Build(); + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.SystemManager/Dockerfile b/src/apps/Rsdo.Concordancer.SystemManager/Dockerfile new file mode 100644 index 0000000..cfb042d --- /dev/null +++ b/src/apps/Rsdo.Concordancer.SystemManager/Dockerfile @@ -0,0 +1,47 @@ +FROM mcr.microsoft.com/dotnet/sdk:6.0 AS base +WORKDIR /app + +FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build + +# COPY LOCAL NUGET PACKAGES +WORKDIR /nuget +COPY local-packages/. . + +# ADD LOCAL NUGET SOURCE +RUN dotnet nuget add source /nuget + +# RESTORE PACKAGES (with project files only) +WORKDIR /src/apps +COPY src/apps/Rsdo.Concordancer.SystemManager/Rsdo.Concordancer.SystemManager.csproj Rsdo.Concordancer.SystemManager/Rsdo.Concordancer.SystemManager.csproj + +WORKDIR /src/core +COPY src/core/Rsdo.Concordancer.Core/Rsdo.Concordancer.Core.csproj Rsdo.Concordancer.Core/Rsdo.Concordancer.Core.csproj +COPY src/core/Rsdo.Concordancer.Data/Rsdo.Concordancer.Data.csproj Rsdo.Concordancer.Data/Rsdo.Concordancer.Data.csproj +COPY src/core/Rsdo.Concordancer.Infrastructure/Rsdo.Concordancer.Infrastructure.csproj Rsdo.Concordancer.Infrastructure/Rsdo.Concordancer.Infrastructure.csproj +COPY src/core/Rsdo.Concordancer.ServiceModel/Rsdo.Concordancer.ServiceModel.csproj Rsdo.Concordancer.ServiceModel/Rsdo.Concordancer.ServiceModel.csproj +COPY src/core/Rsdo.Concordancer.Services/Rsdo.Concordancer.Services.csproj Rsdo.Concordancer.Services/Rsdo.Concordancer.Services.csproj + +WORKDIR /src/apps/Rsdo.Concordancer.SystemManager +RUN dotnet restore Rsdo.Concordancer.SystemManager.csproj + +# COPY ALL FILES +WORKDIR /src/apps +COPY src/apps/Rsdo.Concordancer.SystemManager/. Rsdo.Concordancer.SystemManager/ + +WORKDIR /src/core +COPY src/core/Rsdo.Concordancer.Core/. Rsdo.Concordancer.Core/ +COPY src/core/Rsdo.Concordancer.Data/. Rsdo.Concordancer.Data/ +COPY src/core/Rsdo.Concordancer.Infrastructure/. Rsdo.Concordancer.Infrastructure/ +COPY src/core/Rsdo.Concordancer.ServiceModel/. Rsdo.Concordancer.ServiceModel/ +COPY src/core/Rsdo.Concordancer.Services/. Rsdo.Concordancer.Services/ + +# BUILD +FROM build AS publish +WORKDIR /src/apps/Rsdo.Concordancer.SystemManager +RUN dotnet publish "Rsdo.Concordancer.SystemManager.csproj" -c Release -o /app/publish + +# COPY TO FINAL +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +CMD tail -f /dev/null \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.SystemManager/Options/CreateMasterDbOptions.cs b/src/apps/Rsdo.Concordancer.SystemManager/Options/CreateMasterDbOptions.cs new file mode 100644 index 0000000..2c2bb8d --- /dev/null +++ b/src/apps/Rsdo.Concordancer.SystemManager/Options/CreateMasterDbOptions.cs @@ -0,0 +1,13 @@ +using CommandLine; + +namespace Rsdo.Concordancer.SystemManager.Options; + +[Verb("createMasterDb", HelpText = "Creates master database.")] +public class CreateMasterDbOptions +{ + [Option("connectionString", Required = true, HelpText = "Connection string to database server.")] + public string ConnectionString { get; set; } + + [Option("name", HelpText = "Master database name")] + public string MasterDbName { get; set; } = "Concordancer"; +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.SystemManager/Options/ImportSloleksOptions.cs b/src/apps/Rsdo.Concordancer.SystemManager/Options/ImportSloleksOptions.cs new file mode 100644 index 0000000..1ade627 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.SystemManager/Options/ImportSloleksOptions.cs @@ -0,0 +1,10 @@ +using CommandLine; + +namespace Rsdo.Concordancer.SystemManager.Options; + +[Verb("importSloleks", HelpText = "Imports Sloleks into master database.")] +public class ImportSloleksOptions +{ + [Option("sourceFile", Required = true, HelpText = "Path to xml file.")] + public string SourceFile { get; set; } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.SystemManager/Options/UpdateCorpusDbOptions.cs b/src/apps/Rsdo.Concordancer.SystemManager/Options/UpdateCorpusDbOptions.cs new file mode 100644 index 0000000..e643566 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.SystemManager/Options/UpdateCorpusDbOptions.cs @@ -0,0 +1,8 @@ +using CommandLine; + +namespace Rsdo.Concordancer.SystemManager.Options; + +[Verb("updateCorpusDb", HelpText = "Updates all corpus databases.")] +public class UpdateCorpusDbOptions +{ +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.SystemManager/Options/UpdateMasterDbOptions.cs b/src/apps/Rsdo.Concordancer.SystemManager/Options/UpdateMasterDbOptions.cs new file mode 100644 index 0000000..1544aee --- /dev/null +++ b/src/apps/Rsdo.Concordancer.SystemManager/Options/UpdateMasterDbOptions.cs @@ -0,0 +1,8 @@ +using CommandLine; + +namespace Rsdo.Concordancer.SystemManager.Options; + +[Verb("updateMasterDb", HelpText = "Updates master database.")] +public class UpdateMasterDbOptions +{ +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.SystemManager/Program.cs b/src/apps/Rsdo.Concordancer.SystemManager/Program.cs new file mode 100644 index 0000000..a34bcc4 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.SystemManager/Program.cs @@ -0,0 +1,68 @@ +using System; +using System.Threading.Tasks; +using Autofac; +using CommandLine; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.Sloleks; +using Rsdo.Concordancer.Services.Framework.DatabaseManager; +using Rsdo.Concordancer.SystemManager.CompositionRoot; +using Rsdo.Concordancer.SystemManager.Options; + +namespace Rsdo.Concordancer.SystemManager; + +public class Program +{ + private static IContainer container; + private static IMediator mediator; + + public static async Task Main(string[] args) + { + // Initialize container + container = new Bootstrapper().Bootstrap(); + mediator = container.Resolve(); + + // Parse arguments + await Parser.Default.ParseArguments(args) + .MapResult( + (CreateMasterDbOptions opt) => CreateMasterDb(opt), + (ImportSloleksOptions opt) => ImportSloleks(opt), + (UpdateMasterDbOptions _) => UpdateMasterDb(), + (UpdateCorpusDbOptions _) => UpdateCorpusDb(), + errors => Task.FromResult(-1)); + + // Finished + Console.WriteLine("Finished. Press any key to continue..."); + Console.ReadKey(); + } + + private static async Task CreateMasterDb(CreateMasterDbOptions options) + { + var databaseManager = container.Resolve(); + await databaseManager.CreateMasterDatabase(options.ConnectionString, options.MasterDbName); + return 0; + } + + private static async Task ImportSloleks(ImportSloleksOptions options) + { + var result = await mediator.Send( + new ImportSloleks() + { + SourceFile = options.SourceFile, + }); + return 0; + } + + private static async Task UpdateMasterDb() + { + var databaseManager = container.Resolve(); + await databaseManager.UpdateMasterDatabase(); + return 0; + } + + private static async Task UpdateCorpusDb() + { + var databaseManager = container.Resolve(); + await databaseManager.UpdateCorpusDatabases(); + return 0; + } +} \ No newline at end of file diff --git a/src/apps/Rsdo.Concordancer.SystemManager/Rsdo.Concordancer.SystemManager.csproj b/src/apps/Rsdo.Concordancer.SystemManager/Rsdo.Concordancer.SystemManager.csproj new file mode 100644 index 0000000..03e7254 --- /dev/null +++ b/src/apps/Rsdo.Concordancer.SystemManager/Rsdo.Concordancer.SystemManager.csproj @@ -0,0 +1,23 @@ + + + + Exe + net6.0 + true + false + 1.0.0 + + + + + + + + + + + + + + + diff --git a/src/core/Rsdo.Concordancer.Core/Constants/Cache.cs b/src/core/Rsdo.Concordancer.Core/Constants/Cache.cs new file mode 100644 index 0000000..989cf56 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Constants/Cache.cs @@ -0,0 +1,36 @@ +using System; + +namespace Rsdo.Concordancer.Core.Constants; + +public static class Cache +{ + public static class Duration + { + public static TimeSpan Short => TimeSpan.FromHours(1); + + public static TimeSpan Long => TimeSpan.FromDays(7); + } + + public static class CacheKeys + { + public static class Msd + { + private const string Prefix = nameof(Msd); + + public static string ByCode(string code) + { + return $"{Prefix}_{nameof(ByCode)}_{code}"; + } + } + + public static class Tokenizer + { + private const string Prefix = nameof(Tokenizer); + + public static string ByQuery(string query) + { + return $"{Prefix}_{nameof(ByQuery)}_{query}"; + } + } + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Constants/ConfigurationKey.cs b/src/core/Rsdo.Concordancer.Core/Constants/ConfigurationKey.cs new file mode 100644 index 0000000..86f4e7b --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Constants/ConfigurationKey.cs @@ -0,0 +1,24 @@ +namespace Rsdo.Concordancer.Core.Constants; + +public static class ConfigurationKey +{ + public static class Database + { + public const string MasterConnectionString = "RSDO:Database:MasterConnectionString"; + } + + public static class Search + { + public const string ElasticConnectionString = "RSDO:Elastic:ConnectionString"; + } + + public static class Tokenizer + { + public const string ClasslaTokenizerUrl = "RSDO:Tokenizer:ClasslaUrl"; + } + + public static class Web + { + public const string BaseAppPath = "RSDO:Web:BaseAppPath"; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Constants/Constants.cs b/src/core/Rsdo.Concordancer.Core/Constants/Constants.cs new file mode 100644 index 0000000..fb0e999 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Constants/Constants.cs @@ -0,0 +1,9 @@ +namespace Rsdo.Concordancer.Core.Constants; + +public static class Constants +{ + public static class Export + { + public const string DefaultContentType = "text/plain"; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Entities/Corpus.cs b/src/core/Rsdo.Concordancer.Core/Entities/Corpus.cs new file mode 100644 index 0000000..8636295 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Entities/Corpus.cs @@ -0,0 +1,12 @@ +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.Core.Entities; + +public class Corpus : Entity +{ + public string Description { get; set; } + + public CorpusStatus Status { get; set; } + + public string Title { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Entities/Entity.cs b/src/core/Rsdo.Concordancer.Core/Entities/Entity.cs new file mode 100644 index 0000000..ea855c9 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Entities/Entity.cs @@ -0,0 +1,14 @@ +using System; + +namespace Rsdo.Concordancer.Core.Entities; + +public abstract class Entity +{ + public long AutoId { get; set; } + + public DateTime CreatedDate { get; set; } + + public Guid Id { get; set; } + + public DateTime ModifiedDate { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Entities/LemmaFormPair.cs b/src/core/Rsdo.Concordancer.Core/Entities/LemmaFormPair.cs new file mode 100644 index 0000000..bed3c7f --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Entities/LemmaFormPair.cs @@ -0,0 +1,8 @@ +namespace Rsdo.Concordancer.Core.Entities; + +public class LemmaFormPair : Entity +{ + public string Form { get; set; } + + public string Lemma { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Entities/Msd.cs b/src/core/Rsdo.Concordancer.Core/Entities/Msd.cs new file mode 100644 index 0000000..6ac92d5 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Entities/Msd.cs @@ -0,0 +1,10 @@ +namespace Rsdo.Concordancer.Core.Entities; + +public class Msd : Entity +{ + public string Code { get; set; } + + public string Description { get; set; } + + public string EnglishDescription { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Entities/Paragraph.cs b/src/core/Rsdo.Concordancer.Core/Entities/Paragraph.cs new file mode 100644 index 0000000..b00d5d5 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Entities/Paragraph.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; + +namespace Rsdo.Concordancer.Core.Entities; + +public class Paragraph : Entity +{ + public int RecordOrder { get; set; } + + public List Sentences { get; set; } + + public Text Text { get; set; } + + public long TextAutoId { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Entities/Sentence.cs b/src/core/Rsdo.Concordancer.Core/Entities/Sentence.cs new file mode 100644 index 0000000..61ea8b1 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Entities/Sentence.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; + +namespace Rsdo.Concordancer.Core.Entities; + +public class Sentence : Entity +{ + public Paragraph Paragraph { get; set; } + + public long ParagraphAutoId { get; set; } + + public int RecordOrder { get; set; } + + public List Tokens { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Entities/Term.cs b/src/core/Rsdo.Concordancer.Core/Entities/Term.cs new file mode 100644 index 0000000..8753d66 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Entities/Term.cs @@ -0,0 +1,18 @@ +namespace Rsdo.Concordancer.Core.Entities; + +public class Term : Entity +{ + public string Form { get; set; } + + public int Frequency { get; set; } + + public string Lemma { get; set; } + + public string Msd { get; set; } + + public TermList TermList { get; set; } + + public long TermListAutoId { get; set; } + + public decimal Weight { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Entities/TermList.cs b/src/core/Rsdo.Concordancer.Core/Entities/TermList.cs new file mode 100644 index 0000000..2aeead1 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Entities/TermList.cs @@ -0,0 +1,13 @@ +using System.Collections.Generic; +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.Core.Entities; + +public class TermList : Entity +{ + public string SourceFile { get; set; } + + public ImportStatus Status { get; set; } + + public List Terms { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Entities/Text.cs b/src/core/Rsdo.Concordancer.Core/Entities/Text.cs new file mode 100644 index 0000000..e867c4b --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Entities/Text.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using System.IO; +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.Core.Entities; + +public class Text : Entity +{ + public string Author { get; set; } + + public List Paragraphs { get; set; } + + public string SourceFile { get; set; } + + public ImportStatus Status { get; set; } + + public string Title { get; set; } + + public short? Year { get; set; } + + public string DisplayFileName => Path.GetFileNameWithoutExtension(SourceFile); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Entities/Token.cs b/src/core/Rsdo.Concordancer.Core/Entities/Token.cs new file mode 100644 index 0000000..0de430f --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Entities/Token.cs @@ -0,0 +1,22 @@ +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.Core.Entities; + +public class Token : Entity +{ + public string Form { get; set; } + + public string Lemma { get; set; } + + public string Msd { get; set; } + + public int RecordOrder { get; set; } + + public Sentence Sentence { get; set; } + + public long SentenceAutoId { get; set; } + + public int TokenOrder { get; set; } + + public TokenType Type { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Exceptions/Errors.cs b/src/core/Rsdo.Concordancer.Core/Exceptions/Errors.cs new file mode 100644 index 0000000..05c8476 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Exceptions/Errors.cs @@ -0,0 +1,34 @@ +using System; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.Core.Exceptions; + +public static class Errors +{ + public static class Forbidden + { + public static string CorpusStatusIsNotValid(CorpusStatus currentStatus, CorpusStatus requiredStatus) + { + return $"To perform selected action, corpus status must be {requiredStatus.ToString()}. Current status is {currentStatus.ToString()}."; + } + } + + public static class NotFound + { + public static string EntityNotFound(EntityType entityType, Guid id) + { + return EntityNotFound(entityType, nameof(Entity.Id), id.ToString()); + } + + public static string EntityNotFound(EntityType entityType, string columnName, string value) + { + return $"Entity {entityType.ToString()} with {columnName}={value} not found."; + } + + public static string FileNotFound(string path) + { + return $"$File {path} not found."; + } + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Exceptions/XBadRequestException.cs b/src/core/Rsdo.Concordancer.Core/Exceptions/XBadRequestException.cs new file mode 100644 index 0000000..3e98ea1 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Exceptions/XBadRequestException.cs @@ -0,0 +1,20 @@ +using System; + +namespace Rsdo.Concordancer.Core.Exceptions; + +public class XBadRequestException : Exception +{ + public XBadRequestException() + { + } + + public XBadRequestException(string message) + : base(message) + { + } + + public XBadRequestException(string message, Exception inner) + : base(message, inner) + { + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Exceptions/XForbiddenException.cs b/src/core/Rsdo.Concordancer.Core/Exceptions/XForbiddenException.cs new file mode 100644 index 0000000..f89ecef --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Exceptions/XForbiddenException.cs @@ -0,0 +1,20 @@ +using System; + +namespace Rsdo.Concordancer.Core.Exceptions; + +public class XForbiddenException : Exception +{ + public XForbiddenException() + { + } + + public XForbiddenException(string message) + : base(message) + { + } + + public XForbiddenException(string message, Exception inner) + : base(message, inner) + { + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Exceptions/XInternalErrorException.cs b/src/core/Rsdo.Concordancer.Core/Exceptions/XInternalErrorException.cs new file mode 100644 index 0000000..05e4879 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Exceptions/XInternalErrorException.cs @@ -0,0 +1,20 @@ +using System; + +namespace Rsdo.Concordancer.Core.Exceptions; + +public class XInternalErrorException : Exception +{ + public XInternalErrorException() + { + } + + public XInternalErrorException(string message) + : base(message) + { + } + + public XInternalErrorException(string message, Exception inner) + : base(message, inner) + { + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Exceptions/XNotFoundException.cs b/src/core/Rsdo.Concordancer.Core/Exceptions/XNotFoundException.cs new file mode 100644 index 0000000..cff98f5 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Exceptions/XNotFoundException.cs @@ -0,0 +1,20 @@ +using System; + +namespace Rsdo.Concordancer.Core.Exceptions; + +public class XNotFoundException : Exception +{ + public XNotFoundException() + { + } + + public XNotFoundException(string message) + : base(message) + { + } + + public XNotFoundException(string message, Exception inner) + : base(message, inner) + { + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Extensions/ArrayExtensions.cs b/src/core/Rsdo.Concordancer.Core/Extensions/ArrayExtensions.cs new file mode 100644 index 0000000..5e850d2 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Extensions/ArrayExtensions.cs @@ -0,0 +1,57 @@ +using System; + +namespace Rsdo.Concordancer.Core.Extensions; + +public static class ArrayExtensions +{ + public static void ForEach(this Array array, Action action) + { + if (array.LongLength == 0) + { + return; + } + + var walker = new ArrayTraverse(array); + do + { + action(array, walker.Position); + } + while (walker.Step()); + } +} + +internal class ArrayTraverse +{ + public int[] Position; + private readonly int[] maxLengths; + + public ArrayTraverse(Array array) + { + maxLengths = new int[array.Rank]; + for (var i = 0; i < array.Rank; ++i) + { + maxLengths[i] = array.GetLength(i) - 1; + } + + Position = new int[array.Rank]; + } + + public bool Step() + { + for (var i = 0; i < Position.Length; ++i) + { + if (Position[i] < maxLengths[i]) + { + Position[i]++; + for (var j = 0; j < i; j++) + { + Position[j] = 0; + } + + return true; + } + } + + return false; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Extensions/ConcordanceExtensions.cs b/src/core/Rsdo.Concordancer.Core/Extensions/ConcordanceExtensions.cs new file mode 100644 index 0000000..0444c9e --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Extensions/ConcordanceExtensions.cs @@ -0,0 +1,80 @@ +using System; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.Core.Model; + +namespace Rsdo.Concordancer.Core.Extensions; + +public static class ConcordanceExtensions +{ + public static void SetToken(this Concordance concordance, Token token, int position) + { + switch (position) + { + case -10: + concordance.TokenLeft10 = token; + break; + case -9: + concordance.TokenLeft9 = token; + break; + case -8: + concordance.TokenLeft8 = token; + break; + case -7: + concordance.TokenLeft7 = token; + break; + case -6: + concordance.TokenLeft6 = token; + break; + case -5: + concordance.TokenLeft5 = token; + break; + case -4: + concordance.TokenLeft4 = token; + break; + case -3: + concordance.TokenLeft3 = token; + break; + case -2: + concordance.TokenLeft2 = token; + break; + case -1: + concordance.TokenLeft1 = token; + break; + case 0: + concordance.Token = token; + break; + case 1: + concordance.TokenRight1 = token; + break; + case 2: + concordance.TokenRight2 = token; + break; + case 3: + concordance.TokenRight3 = token; + break; + case 4: + concordance.TokenRight4 = token; + break; + case 5: + concordance.TokenRight5 = token; + break; + case 6: + concordance.TokenRight6 = token; + break; + case 7: + concordance.TokenRight7 = token; + break; + case 8: + concordance.TokenRight8 = token; + break; + case 9: + concordance.TokenRight9 = token; + break; + case 10: + concordance.TokenRight10 = token; + break; + default: + throw new ArgumentException($"Invalid position {position}. Position should be between -10 and 10.", nameof(position)); + } + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Extensions/EntityExtensions.cs b/src/core/Rsdo.Concordancer.Core/Extensions/EntityExtensions.cs new file mode 100644 index 0000000..52a801f --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Extensions/EntityExtensions.cs @@ -0,0 +1,23 @@ +using System; +using Rsdo.Concordancer.Core.Entities; + +namespace Rsdo.Concordancer.Core.Extensions; + +public static class EntityExtensions +{ + public static TEntity ApplyCreateValues(this TEntity entity) + where TEntity : Entity + { + entity.Id = Guid.NewGuid(); + entity.CreatedDate = DateTime.Now; + entity.ModifiedDate = entity.CreatedDate; + return entity; + } + + public static TEntity ApplyUpdateValues(this TEntity entity) + where TEntity : Entity + { + entity.ModifiedDate = DateTime.Now; + return entity; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Extensions/EnumerableExtensions.cs b/src/core/Rsdo.Concordancer.Core/Extensions/EnumerableExtensions.cs new file mode 100644 index 0000000..f28431c --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Extensions/EnumerableExtensions.cs @@ -0,0 +1,29 @@ +using System.Collections.Generic; +using System.Linq; + +namespace Rsdo.Concordancer.Core.Extensions; + +public static class EnumerableExtensions +{ + public static IEnumerable> CartesianProduct(this IEnumerable> sequences) + { + IEnumerable> emptyProduct = new[] + { + Enumerable.Empty(), + }; + return sequences.Aggregate( + emptyProduct, + (accumulator, sequence) => from accseq in accumulator + from item in sequence + select accseq.Concat( + new[] + { + item, + })); + } + + public static bool IsNullOrEmpty(this IEnumerable collection) + { + return collection == null || !collection.Any(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Extensions/ExecutionResultExtensions.cs b/src/core/Rsdo.Concordancer.Core/Extensions/ExecutionResultExtensions.cs new file mode 100644 index 0000000..3c88bce --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Extensions/ExecutionResultExtensions.cs @@ -0,0 +1,18 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Shared; +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.Core.Extensions; + +public static class ExecutionResultExtensions +{ + public static ExecutionResult WithEntityInfo(this ExecutionResult instance, EntityType entityType, Guid entityId) + { + instance.EntityInfo = new EntityInfo() + { + EntityType = entityType, + Id = entityId, + }; + return instance; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Extensions/ObjectExtensions.cs b/src/core/Rsdo.Concordancer.Core/Extensions/ObjectExtensions.cs new file mode 100644 index 0000000..5182964 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Extensions/ObjectExtensions.cs @@ -0,0 +1,123 @@ +using System; +using System.Collections.Generic; +using System.Reflection; + +namespace Rsdo.Concordancer.Core.Extensions; + +public static class ObjectExtensions +{ + private static readonly MethodInfo CloneMethod = typeof(object).GetMethod("MemberwiseClone", BindingFlags.NonPublic | BindingFlags.Instance); + + public static object Copy(this object originalObject) + { + return InternalCopy(originalObject, new Dictionary(new ReferenceEqualityComparer())); + } + + public static T Copy(this T original) + { + return (T)Copy((object)original); + } + + public static bool IsPrimitive(this Type type) + { + if (type == typeof(string)) + { + return true; + } + + return type.IsValueType & type.IsPrimitive; + } + + private static void CopyFields( + object originalObject, + IDictionary visited, + object cloneObject, + Type typeToReflect, + BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.FlattenHierarchy, + Func filter = null) + { + foreach (var fieldInfo in typeToReflect.GetFields(bindingFlags)) + { + if (filter != null && filter(fieldInfo) == false) + { + continue; + } + + if (IsPrimitive(fieldInfo.FieldType)) + { + continue; + } + + var originalFieldValue = fieldInfo.GetValue(originalObject); + var clonedFieldValue = InternalCopy(originalFieldValue, visited); + fieldInfo.SetValue(cloneObject, clonedFieldValue); + } + } + + private static object InternalCopy(object originalObject, IDictionary visited) + { + if (originalObject == null) + { + return null; + } + + var typeToReflect = originalObject.GetType(); + if (IsPrimitive(typeToReflect)) + { + return originalObject; + } + + if (visited.ContainsKey(originalObject)) + { + return visited[originalObject]; + } + + if (typeof(Delegate).IsAssignableFrom(typeToReflect)) + { + return null; + } + + var cloneObject = CloneMethod.Invoke(originalObject, null); + if (typeToReflect.IsArray) + { + var arrayType = typeToReflect.GetElementType(); + if (IsPrimitive(arrayType) == false) + { + var clonedArray = (Array)cloneObject; + clonedArray.ForEach((array, indices) => array.SetValue(InternalCopy(clonedArray.GetValue(indices), visited), indices)); + } + } + + visited.Add(originalObject, cloneObject); + CopyFields(originalObject, visited, cloneObject, typeToReflect); + RecursiveCopyBaseTypePrivateFields(originalObject, visited, cloneObject, typeToReflect); + return cloneObject; + } + + private static void RecursiveCopyBaseTypePrivateFields(object originalObject, IDictionary visited, object cloneObject, Type typeToReflect) + { + if (typeToReflect.BaseType != null) + { + RecursiveCopyBaseTypePrivateFields(originalObject, visited, cloneObject, typeToReflect.BaseType); + CopyFields(originalObject, visited, cloneObject, typeToReflect.BaseType, BindingFlags.Instance | BindingFlags.NonPublic, info => info.IsPrivate); + } + } +} + +public class ReferenceEqualityComparer : EqualityComparer +{ + public override bool Equals(object x, object y) + { + return ReferenceEquals(x, y); + } + + public override int GetHashCode(object obj) + { + if (obj == null) + { + return 0; + } + + return obj.GetHashCode(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Extensions/QueryExtensions.cs b/src/core/Rsdo.Concordancer.Core/Extensions/QueryExtensions.cs new file mode 100644 index 0000000..92da4aa --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Extensions/QueryExtensions.cs @@ -0,0 +1,14 @@ +using Rsdo.Concordancer.Core.Search.Queries; +using Rsdo.Concordancer.ServiceModel.Interfaces; + +namespace Rsdo.Concordancer.Core.Extensions; + +public static class QueryExtensions +{ + public static Query WithPageInfo(this Query query, IPagedSearch request) + { + query.From = request.From; + query.Size = request.Size; + return query; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Framework/CurrentContext.cs b/src/core/Rsdo.Concordancer.Core/Framework/CurrentContext.cs new file mode 100644 index 0000000..afa6460 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Framework/CurrentContext.cs @@ -0,0 +1,15 @@ +using System.Threading; +using Rsdo.Concordancer.Core.Interfaces; + +namespace Rsdo.Concordancer.Core.Framework; + +public static class CurrentContext +{ + private static readonly AsyncLocal CurrentContextValue = new(); + + public static ICurrentContext Current + { + get => CurrentContextValue.Value; + set => CurrentContextValue.Value = value; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Framework/CurrentContexts/CurrentContextBase.cs b/src/core/Rsdo.Concordancer.Core/Framework/CurrentContexts/CurrentContextBase.cs new file mode 100644 index 0000000..1a4f322 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Framework/CurrentContexts/CurrentContextBase.cs @@ -0,0 +1,9 @@ +using System; +using Rsdo.Concordancer.Core.Interfaces; + +namespace Rsdo.Concordancer.Core.Framework.CurrentContexts; + +public abstract class CurrentContextBase : ICurrentContext +{ + public Guid CorpusId { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Framework/CurrentContexts/DefaultCurrentContext.cs b/src/core/Rsdo.Concordancer.Core/Framework/CurrentContexts/DefaultCurrentContext.cs new file mode 100644 index 0000000..0c2ffc4 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Framework/CurrentContexts/DefaultCurrentContext.cs @@ -0,0 +1,5 @@ +namespace Rsdo.Concordancer.Core.Framework.CurrentContexts; + +public class DefaultCurrentContext : CurrentContextBase +{ +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Framework/CurrentContexts/SystemCurrentContext.cs b/src/core/Rsdo.Concordancer.Core/Framework/CurrentContexts/SystemCurrentContext.cs new file mode 100644 index 0000000..60079f7 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Framework/CurrentContexts/SystemCurrentContext.cs @@ -0,0 +1,5 @@ +namespace Rsdo.Concordancer.Core.Framework.CurrentContexts; + +public class SystemCurrentContext : CurrentContextBase +{ +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Interfaces/IConnectionStringProvider.cs b/src/core/Rsdo.Concordancer.Core/Interfaces/IConnectionStringProvider.cs new file mode 100644 index 0000000..ce38fcd --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Interfaces/IConnectionStringProvider.cs @@ -0,0 +1,14 @@ +using System; + +namespace Rsdo.Concordancer.Core.Interfaces; + +public interface IConnectionStringProvider +{ + string GetCorpusConnectionString(); + + string GetCorpusConnectionString(Guid corpusId); + + string GetCorpusDatabaseName(); + + string GetMasterConnectionString(); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Interfaces/ICurrentContext.cs b/src/core/Rsdo.Concordancer.Core/Interfaces/ICurrentContext.cs new file mode 100644 index 0000000..d57aa56 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Interfaces/ICurrentContext.cs @@ -0,0 +1,8 @@ +using System; + +namespace Rsdo.Concordancer.Core.Interfaces; + +public interface ICurrentContext +{ + Guid CorpusId { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Interfaces/IDatabaseMigrationRunner.cs b/src/core/Rsdo.Concordancer.Core/Interfaces/IDatabaseMigrationRunner.cs new file mode 100644 index 0000000..4cd4199 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Interfaces/IDatabaseMigrationRunner.cs @@ -0,0 +1,12 @@ +namespace Rsdo.Concordancer.Core.Interfaces; + +public enum MigrationTag +{ + Master, + Corpus, +} + +public interface IDatabaseMigrationRunner +{ + void MigrateUp(string connectionString, MigrationTag migrationTag); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Interfaces/IMediator.cs b/src/core/Rsdo.Concordancer.Core/Interfaces/IMediator.cs new file mode 100644 index 0000000..0096eee --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Interfaces/IMediator.cs @@ -0,0 +1,14 @@ +using System.ComponentModel; +using System.Threading; +using System.Threading.Tasks; +using Rsdo.Concordancer.ServiceModel.Interfaces; + +namespace Rsdo.Concordancer.Core.Interfaces; + +public interface IMediator +{ + Task Send(IRequest request, CancellationToken cancellationToken = default); + + [DisplayName("{0}")] + Task Send(string requestName, IRequest request, CancellationToken cancellationToken = default); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Interfaces/IRequestHandler.cs b/src/core/Rsdo.Concordancer.Core/Interfaces/IRequestHandler.cs new file mode 100644 index 0000000..de9b9da --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Interfaces/IRequestHandler.cs @@ -0,0 +1,11 @@ +using System.Threading; +using System.Threading.Tasks; +using Rsdo.Concordancer.ServiceModel.Interfaces; + +namespace Rsdo.Concordancer.Core.Interfaces; + +public interface IRequestHandler + where TRequest : IRequest +{ + Task Handle(TRequest request, CancellationToken cancellationToken); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Interfaces/IServiceBus.cs b/src/core/Rsdo.Concordancer.Core/Interfaces/IServiceBus.cs new file mode 100644 index 0000000..9a6ea7a --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Interfaces/IServiceBus.cs @@ -0,0 +1,9 @@ +using System.Threading.Tasks; +using Rsdo.Concordancer.ServiceModel.Interfaces; + +namespace Rsdo.Concordancer.Core.Interfaces; + +public interface IServiceBus +{ + Task Send(IRequest request); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Model/Concordance.cs b/src/core/Rsdo.Concordancer.Core/Model/Concordance.cs new file mode 100644 index 0000000..32aaf68 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Model/Concordance.cs @@ -0,0 +1,53 @@ +using System; +using Rsdo.Concordancer.Core.Entities; + +namespace Rsdo.Concordancer.Core.Model; + +public class Concordance +{ + public Guid ParagraphId { get; set; } + + public Guid TextId { get; set; } + + public Token Token { get; set; } + + public Token TokenLeft1 { get; set; } + + public Token TokenLeft2 { get; set; } + + public Token TokenLeft3 { get; set; } + + public Token TokenLeft4 { get; set; } + + public Token TokenLeft5 { get; set; } + + public Token TokenLeft6 { get; set; } + + public Token TokenLeft7 { get; set; } + + public Token TokenLeft8 { get; set; } + + public Token TokenLeft9 { get; set; } + + public Token TokenLeft10 { get; set; } + + public Token TokenRight1 { get; set; } + + public Token TokenRight2 { get; set; } + + public Token TokenRight3 { get; set; } + + public Token TokenRight4 { get; set; } + + public Token TokenRight5 { get; set; } + + public Token TokenRight6 { get; set; } + + public Token TokenRight7 { get; set; } + + public Token TokenRight8 { get; set; } + + public Token TokenRight9 { get; set; } + + public Token TokenRight10 { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Rsdo.Concordancer.Core.csproj b/src/core/Rsdo.Concordancer.Core/Rsdo.Concordancer.Core.csproj new file mode 100644 index 0000000..a104da2 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Rsdo.Concordancer.Core.csproj @@ -0,0 +1,18 @@ + + + + net6.0 + true + false + 1.0.0 + + + + + + + + + + + diff --git a/src/core/Rsdo.Concordancer.Core/Search/Aggregations/IAggregator.cs b/src/core/Rsdo.Concordancer.Core/Search/Aggregations/IAggregator.cs new file mode 100644 index 0000000..e64f2e1 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Search/Aggregations/IAggregator.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Search.Queries; + +namespace Rsdo.Concordancer.Core.Search.Aggregations; + +public interface IAggregator +{ + Task> Get(TQuery query) + where TQuery : Query; +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Search/Aggregations/IAggregatorFactory.cs b/src/core/Rsdo.Concordancer.Core/Search/Aggregations/IAggregatorFactory.cs new file mode 100644 index 0000000..dafee5c --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Search/Aggregations/IAggregatorFactory.cs @@ -0,0 +1,8 @@ +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.Core.Search.Aggregations; + +public interface IAggregatorFactory +{ + IAggregator GetAggregator(AggregationType aggregationType); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Search/ISearchEngine.cs b/src/core/Rsdo.Concordancer.Core/Search/ISearchEngine.cs new file mode 100644 index 0000000..76db880 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Search/ISearchEngine.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Search.Queries; + +namespace Rsdo.Concordancer.Core.Search; + +public interface ISearchEngine +{ + Task Add(IEnumerable entities); + + Task Commit(); + + Task CreateSchema(); + + Task Delete(IEnumerable entityIds); + + Task DeleteSchema(); + + Task Search(TQuery query) + where TEntity : class + where TQuery : Query; +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Search/Queries/Concordances/ConcordancesQuery.cs b/src/core/Rsdo.Concordancer.Core/Search/Queries/Concordances/ConcordancesQuery.cs new file mode 100644 index 0000000..03e7d9d --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Search/Queries/Concordances/ConcordancesQuery.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; + +namespace Rsdo.Concordancer.Core.Search.Queries.Concordances; + +public class ConcordancesQuery : Query +{ + public SearchedMainWordQuery MainWord { get; set; } + + public bool ReturnRandomRows { get; set; } + + public List TextIds { get; set; } + + public List WordsInContext { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Search/Queries/Concordances/SearchedMainWordQuery.cs b/src/core/Rsdo.Concordancer.Core/Search/Queries/Concordances/SearchedMainWordQuery.cs new file mode 100644 index 0000000..1ddac13 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Search/Queries/Concordances/SearchedMainWordQuery.cs @@ -0,0 +1,5 @@ +namespace Rsdo.Concordancer.Core.Search.Queries.Concordances; + +public class SearchedMainWordQuery : SearchedWordQuery +{ +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Search/Queries/Concordances/SearchedWordInContextQuery.cs b/src/core/Rsdo.Concordancer.Core/Search/Queries/Concordances/SearchedWordInContextQuery.cs new file mode 100644 index 0000000..4e00ed8 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Search/Queries/Concordances/SearchedWordInContextQuery.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.Core.Search.Queries.Concordances; + +public class SearchedWordInContextQuery : SearchedWordQuery +{ + public ConditionType ConditionType { get; set; } + + public List Positions { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Search/Queries/Concordances/SearchedWordQuery.cs b/src/core/Rsdo.Concordancer.Core/Search/Queries/Concordances/SearchedWordQuery.cs new file mode 100644 index 0000000..9c183e8 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Search/Queries/Concordances/SearchedWordQuery.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; + +namespace Rsdo.Concordancer.Core.Search.Queries.Concordances; + +public abstract class SearchedWordQuery +{ + public string Form { get; set; } + + public List Lemmas { get; set; } + + public List Msds { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Search/Queries/Query.cs b/src/core/Rsdo.Concordancer.Core/Search/Queries/Query.cs new file mode 100644 index 0000000..3c3b470 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Search/Queries/Query.cs @@ -0,0 +1,10 @@ +using System; + +namespace Rsdo.Concordancer.Core.Search.Queries; + +public abstract class Query +{ + public int From { get; set; } = 0; + + public int Size { get; set; } = 20; +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Search/Queries/QueryResult.cs b/src/core/Rsdo.Concordancer.Core/Search/Queries/QueryResult.cs new file mode 100644 index 0000000..c2dab15 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Search/Queries/QueryResult.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; + +namespace Rsdo.Concordancer.Core.Search.Queries; + +public class QueryResult +{ + public List EntityIds { get; set; } + + public long Total { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Search/Queries/TermLists/SearchedTermQuery.cs b/src/core/Rsdo.Concordancer.Core/Search/Queries/TermLists/SearchedTermQuery.cs new file mode 100644 index 0000000..6556df0 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Search/Queries/TermLists/SearchedTermQuery.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; + +namespace Rsdo.Concordancer.Core.Search.Queries.TermLists; + +public class SearchedTermQuery +{ + public string Form { get; set; } + + public List Lemmas { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Core/Search/Queries/TermLists/TermListQuery.cs b/src/core/Rsdo.Concordancer.Core/Search/Queries/TermLists/TermListQuery.cs new file mode 100644 index 0000000..93e549c --- /dev/null +++ b/src/core/Rsdo.Concordancer.Core/Search/Queries/TermLists/TermListQuery.cs @@ -0,0 +1,8 @@ +using System.Collections.Generic; + +namespace Rsdo.Concordancer.Core.Search.Queries.TermLists; + +public class TermListQuery : Query +{ + public List Words { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Data/CompositionRoot/DataModule.cs b/src/core/Rsdo.Concordancer.Data/CompositionRoot/DataModule.cs new file mode 100644 index 0000000..b764adc --- /dev/null +++ b/src/core/Rsdo.Concordancer.Data/CompositionRoot/DataModule.cs @@ -0,0 +1,17 @@ +using Autofac; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.Data.Framework; +using Rsdo.Concordancer.Data.Services; + +namespace Rsdo.Concordancer.Data.CompositionRoot; + +public class DataModule : Module +{ + protected override void Load(ContainerBuilder builder) + { + base.Load(builder); + + builder.RegisterType().As().SingleInstance(); + builder.RegisterType().As().SingleInstance(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Data/Extensions/FluentMigrationExtensions.cs b/src/core/Rsdo.Concordancer.Data/Extensions/FluentMigrationExtensions.cs new file mode 100644 index 0000000..958c9d6 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Data/Extensions/FluentMigrationExtensions.cs @@ -0,0 +1,28 @@ +using FluentMigrator; +using FluentMigrator.Builders.Create.Table; +using Rsdo.Concordancer.Core.Entities; + +namespace Rsdo.Concordancer.Data.Extensions; + +public static class FluentMigrationExtensions +{ + public static ICreateTableColumnOptionOrWithColumnSyntax WithEntity(this ICreateTableWithColumnSyntax tableWithColumnSyntax) + { + return tableWithColumnSyntax.WithColumn(nameof(Entity.AutoId)) + .AsInt64() + .PrimaryKey() + .Identity() + .NotNullable() + .WithColumn(nameof(Entity.CreatedDate)) + .AsDateTime2() + .NotNullable() + .WithDefault(SystemMethods.CurrentDateTime) + .WithColumn(nameof(Entity.Id)) + .AsGuid() + .NotNullable() + .WithColumn(nameof(Entity.ModifiedDate)) + .AsDateTime2() + .NotNullable() + .WithDefault(SystemMethods.CurrentDateTime); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Data/Framework/ConnectionStringProvider.cs b/src/core/Rsdo.Concordancer.Data/Framework/ConnectionStringProvider.cs new file mode 100644 index 0000000..04d12de --- /dev/null +++ b/src/core/Rsdo.Concordancer.Data/Framework/ConnectionStringProvider.cs @@ -0,0 +1,55 @@ +using System; +using Microsoft.Extensions.Configuration; +using Npgsql; +using Rsdo.Concordancer.Core.Constants; +using Rsdo.Concordancer.Core.Framework; +using Rsdo.Concordancer.Core.Interfaces; + +namespace Rsdo.Concordancer.Data.Framework; + +public class ConnectionStringProvider : IConnectionStringProvider +{ + private readonly IConfiguration configuration; + + public ConnectionStringProvider(IConfiguration configuration) + { + this.configuration = configuration; + } + + public string GetCorpusConnectionString() + { + return GetCorpusConnectionString(CurrentContext.Current.CorpusId); + } + + public string GetCorpusConnectionString(Guid corpusId) + { + var masterConnectionString = GetMasterConnectionString(); + var masterBuilder = new NpgsqlConnectionStringBuilder(masterConnectionString) + { + Database = GetCorpusDatabaseName(corpusId), + }; + return masterBuilder.ConnectionString; + } + + public string GetCorpusDatabaseName() + { + return GetCorpusDatabaseName(CurrentContext.Current.CorpusId); + } + + public string GetMasterConnectionString() + { + return configuration[ConfigurationKey.Database.MasterConnectionString]; + } + + private string GetMasterDatabaseName() + { + var connectionString = GetMasterConnectionString(); + return new NpgsqlConnectionStringBuilder(connectionString).Database; + } + + private string GetCorpusDatabaseName(Guid corpusId) + { + var masterDatabaseName = GetMasterDatabaseName(); + return $"{masterDatabaseName}_{corpusId:N}"; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Data/Framework/DbAttribute.cs b/src/core/Rsdo.Concordancer.Data/Framework/DbAttribute.cs new file mode 100644 index 0000000..af0170c --- /dev/null +++ b/src/core/Rsdo.Concordancer.Data/Framework/DbAttribute.cs @@ -0,0 +1,28 @@ +using FluentMigrator; +using Rsdo.Concordancer.Core.Interfaces; + +namespace Rsdo.Concordancer.Data.Framework; + +public abstract class DbAttribute : TagsAttribute +{ + protected DbAttribute(MigrationTag migrationTag) + : base(migrationTag.ToString()) + { + } +} + +public class CorpusDbAttribute : DbAttribute +{ + public CorpusDbAttribute() + : base(MigrationTag.Corpus) + { + } +} + +public class MasterDbAttribute : DbAttribute +{ + public MasterDbAttribute() + : base(MigrationTag.Master) + { + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Data/Framework/PostgresQuoter.cs b/src/core/Rsdo.Concordancer.Data/Framework/PostgresQuoter.cs new file mode 100644 index 0000000..9f65310 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Data/Framework/PostgresQuoter.cs @@ -0,0 +1,17 @@ +using FluentMigrator.Runner.Generators.Postgres; +using FluentMigrator.Runner.Processors.Postgres; + +namespace Rsdo.Concordancer.Data.Framework; + +public class NoQuoteQuoter : PostgresQuoter +{ + public NoQuoteQuoter(PostgresOptions options) + : base(options) + { + } + + protected override bool ShouldQuote(string name) + { + return false; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Data/Framework/VersionInfoTableMetadata.cs b/src/core/Rsdo.Concordancer.Data/Framework/VersionInfoTableMetadata.cs new file mode 100644 index 0000000..5c4d28f --- /dev/null +++ b/src/core/Rsdo.Concordancer.Data/Framework/VersionInfoTableMetadata.cs @@ -0,0 +1,22 @@ +using FluentMigrator.Runner.VersionTableInfo; + +namespace Rsdo.Concordancer.Data.Framework; + +public class VersionInfoTableMetadata : IVersionTableMetaData +{ + public string ColumnName => "version"; + + public string TableName => "versioninfo"; + + public string DescriptionColumnName => "description"; + + public string AppliedOnColumnName => "appliedon"; + + public string UniqueIndexName => "uc_version"; + + public object ApplicationContext { get; set; } + + public bool OwnsSchema => true; + + public string SchemaName => "public"; +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Data/Migrations/Initial/Corpus/Mig20211103214800_Initial.cs b/src/core/Rsdo.Concordancer.Data/Migrations/Initial/Corpus/Mig20211103214800_Initial.cs new file mode 100644 index 0000000..0436b49 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Data/Migrations/Initial/Corpus/Mig20211103214800_Initial.cs @@ -0,0 +1,123 @@ +using System.Data; +using FluentMigrator; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.Data.Extensions; +using Rsdo.Concordancer.Data.Framework; + +namespace Rsdo.Concordancer.Data.Migrations.Initial.Corpus; + +[CorpusDb] +[Migration(20211103214800)] +public class Mig20211103214800_Initial : ForwardOnlyMigration +{ + public override void Up() + { + // Text + Create.Table(nameof(Text)) + .WithEntity() + .WithColumn(nameof(Text.Author)) + .AsString(255) + .Nullable() + .WithColumn(nameof(Text.SourceFile)) + .AsString(255) + .NotNullable() + .WithColumn(nameof(Text.Title)) + .AsString(255) + .Nullable() + .WithColumn(nameof(Text.Year)) + .AsInt16() + .Nullable(); + + Create.Index().OnTable(nameof(Text)).OnColumn(nameof(Text.Id)).Ascending().WithOptions().Unique(); + + // Paragraph + Create.Table(nameof(Paragraph)) + .WithEntity() + .WithColumn(nameof(Paragraph.RecordOrder)) + .AsInt32() + .NotNullable() + .WithColumn(nameof(Paragraph.TextAutoId)) + .AsInt64() + .NotNullable() + .ForeignKey(nameof(Text), nameof(Text.AutoId)) + .OnDelete(Rule.Cascade); + + Create.Index().OnTable(nameof(Paragraph)).OnColumn(nameof(Paragraph.Id)).Ascending().WithOptions().Unique(); + Create.Index().OnTable(nameof(Paragraph)).OnColumn(nameof(Paragraph.TextAutoId)); + + // Sentence + Create.Table(nameof(Sentence)) + .WithEntity() + .WithColumn(nameof(Sentence.ParagraphAutoId)) + .AsInt64() + .NotNullable() + .ForeignKey(nameof(Paragraph), nameof(Paragraph.AutoId)) + .OnDelete(Rule.Cascade) + .WithColumn(nameof(Sentence.RecordOrder)) + .AsInt32() + .NotNullable(); + + Create.Index().OnTable(nameof(Sentence)).OnColumn(nameof(Sentence.Id)).Ascending().WithOptions().Unique(); + Create.Index().OnTable(nameof(Sentence)).OnColumn(nameof(Sentence.ParagraphAutoId)); + + // Token + Create.Table(nameof(Token)) + .WithEntity() + .WithColumn(nameof(Token.Form)) + .AsString(400) + .Nullable() + .WithColumn(nameof(Token.Lemma)) + .AsString(400) + .Nullable() + .WithColumn(nameof(Token.Msd)) + .AsString(20) + .Nullable() + .WithColumn(nameof(Token.RecordOrder)) + .AsInt32() + .NotNullable() + .WithColumn(nameof(Token.SentenceAutoId)) + .AsInt64() + .NotNullable() + .ForeignKey(nameof(Sentence), nameof(Sentence.AutoId)) + .OnDelete(Rule.Cascade) + .WithColumn(nameof(Token.TokenOrder)) + .AsInt32() + .NotNullable() + .WithColumn(nameof(Token.Type)) + .AsByte() + .NotNullable(); + + Create.Index().OnTable(nameof(Token)).OnColumn(nameof(Token.Id)).Ascending().WithOptions().Unique(); + Create.Index().OnTable(nameof(Token)).OnColumn(nameof(Token.SentenceAutoId)).Ascending().OnColumn(nameof(Token.TokenOrder)); + + // TermList + Create.Table(nameof(TermList)).WithEntity().WithColumn(nameof(Text.SourceFile)).AsString(255).NotNullable(); + + // Term + Create.Table(nameof(Term)) + .WithEntity() + .WithColumn(nameof(Term.Form)) + .AsString(400) + .NotNullable() + .WithColumn(nameof(Term.Frequency)) + .AsInt32() + .NotNullable() + .WithColumn(nameof(Term.Lemma)) + .AsString(400) + .NotNullable() + .WithColumn(nameof(Term.Msd)) + .AsString(100) + .NotNullable() + .WithColumn(nameof(Term.TermListAutoId)) + .AsInt64() + .NotNullable() + .ForeignKey(nameof(TermList), nameof(TermList.AutoId)) + .OnDelete(Rule.Cascade) + .WithColumn(nameof(Term.Weight)) + .AsDecimal(16, 15) + .NotNullable(); + + Create.Index().OnTable(nameof(Term)).OnColumn(nameof(Term.Id)).Ascending().WithOptions().Unique(); + Create.Index().OnTable(nameof(Term)).OnColumn(nameof(Term.TermListAutoId)).Ascending(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Data/Migrations/Initial/Master/Mig20211016212200_Initial.cs b/src/core/Rsdo.Concordancer.Data/Migrations/Initial/Master/Mig20211016212200_Initial.cs new file mode 100644 index 0000000..133ed0c --- /dev/null +++ b/src/core/Rsdo.Concordancer.Data/Migrations/Initial/Master/Mig20211016212200_Initial.cs @@ -0,0 +1,38 @@ +using FluentMigrator; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.Data.Extensions; +using Rsdo.Concordancer.Data.Framework; + +namespace Rsdo.Concordancer.Data.Migrations.Initial.Master; + +[MasterDb] +[Migration(20211016212200)] +public class Mig20211016212200_Initial : ForwardOnlyMigration +{ + public override void Up() + { + // Corpus + Create.Table(nameof(Core.Entities.Corpus)) + .WithEntity() + .WithColumn(nameof(Core.Entities.Corpus.Description)) + .AsString(255) + .Nullable() + .WithColumn(nameof(Core.Entities.Corpus.Status)) + .AsByte() + .NotNullable() + .WithColumn(nameof(Core.Entities.Corpus.Title)) + .AsString(100) + .NotNullable(); + + // LemmaFormPair + Create.Table(nameof(LemmaFormPair)) + .WithEntity() + .WithColumn(nameof(LemmaFormPair.Lemma)) + .AsString(255) + .NotNullable() + .WithColumn(nameof(LemmaFormPair.Form)) + .AsString(255) + .NotNullable(); + Execute.Sql($"CREATE INDEX ix_lemmaformpair_form_lower ON lemmaformpair (lower(form))"); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Data/Migrations/v1_0/Corpus/Mig20221015220400_CreateTokenTypeIndex.cs b/src/core/Rsdo.Concordancer.Data/Migrations/v1_0/Corpus/Mig20221015220400_CreateTokenTypeIndex.cs new file mode 100644 index 0000000..920d779 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Data/Migrations/v1_0/Corpus/Mig20221015220400_CreateTokenTypeIndex.cs @@ -0,0 +1,20 @@ +using FluentMigrator; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.Data.Framework; +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.Data.Migrations.v1_0.Corpus; + +[CorpusDb] +[Migration(20221015220400)] +public class Mig20221015220400_CreateTokenTypeIndex : ForwardOnlyMigration +{ + public override void Up() + { + var token = nameof(Token).ToLower(); + var type = nameof(Token.Type).ToLower(); + var word = (int)TokenType.Word; + + Execute.Sql($"CREATE INDEX ix_{token}_{type}_partial ON {token}({type}) WHERE {type} = {word}"); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Data/Migrations/v1_0/Corpus/Mig20221021080000_AddImportStatus.cs b/src/core/Rsdo.Concordancer.Data/Migrations/v1_0/Corpus/Mig20221021080000_AddImportStatus.cs new file mode 100644 index 0000000..d2a1b9a --- /dev/null +++ b/src/core/Rsdo.Concordancer.Data/Migrations/v1_0/Corpus/Mig20221021080000_AddImportStatus.cs @@ -0,0 +1,24 @@ +using FluentMigrator; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.Data.Framework; +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.Data.Migrations.v1_0.Corpus; + +[CorpusDb] +[Migration(20221021080000)] +public class Mig20221021080000_AddTextAndTermListStatus : ForwardOnlyMigration +{ + public override void Up() + { + // Text + Alter.Table(nameof(Text)).AddColumn(nameof(Text.Status)).AsByte().Nullable(); + Execute.Sql($"UPDATE {nameof(Text)} SET {nameof(Text.Status)} = {(int)ImportStatus.Active};"); + Alter.Table(nameof(Text)).AlterColumn(nameof(Text.Status)).AsByte().NotNullable(); + + // TermList + Alter.Table(nameof(TermList)).AddColumn(nameof(TermList.Status)).AsByte().Nullable(); + Execute.Sql($"UPDATE {nameof(TermList)} SET {nameof(TermList.Status)} = {(int)ImportStatus.Active};"); + Alter.Table(nameof(TermList)).AlterColumn(nameof(TermList.Status)).AsByte().NotNullable(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Data/Migrations/v1_0/Master/Mig20220703221100_CreateMsdTable.cs b/src/core/Rsdo.Concordancer.Data/Migrations/v1_0/Master/Mig20220703221100_CreateMsdTable.cs new file mode 100644 index 0000000..787b448 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Data/Migrations/v1_0/Master/Mig20220703221100_CreateMsdTable.cs @@ -0,0 +1,7419 @@ +using System; +using System.Collections.Generic; +using FluentMigrator; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.Data.Extensions; +using Rsdo.Concordancer.Data.Framework; + +namespace Rsdo.Concordancer.Data.Migrations.v1_0.Master; + +[MasterDb] +[Migration(20220703221100)] +public class Mig20220703221100_CreateMsdTable : ForwardOnlyMigration +{ + public override void Up() + { + // Msd + Create.Table(nameof(Msd)) + .WithEntity() + .WithColumn(nameof(Msd.Code)) + .AsString(32) + .NotNullable() + .WithColumn(nameof(Msd.Description)) + .AsString(255) + .NotNullable() + .WithColumn(nameof(Msd.EnglishDescription)) + .AsString(255) + .NotNullable(); + + Create.Index().OnTable(nameof(Msd)).OnColumn(nameof(Msd.Code)).Ascending().WithOptions().Unique(); + + InsertMsds(); + } + + private void InsertMsds() + { + InsertMsd( + "Ncmsn", + "samostalnik vrsta=obcno_ime spol=moški število=ednina sklon=imenovalnik", + "Noun Type=common Gender=masculine Number=singular Case=nominative"); + InsertMsd( + "Ncmsg", + "samostalnik vrsta=obcno_ime spol=moški število=ednina sklon=rodilnik", + "Noun Type=common Gender=masculine Number=singular Case=genitive"); + InsertMsd( + "Ncmsd", + "samostalnik vrsta=obcno_ime spol=moški število=ednina sklon=dajalnik", + "Noun Type=common Gender=masculine Number=singular Case=dative"); + InsertMsd( + "Ncmsan", + "samostalnik vrsta=obcno_ime spol=moški število=ednina sklon=tožilnik živost=ne", + "Noun Type=common Gender=masculine Number=singular Case=accusative Animate=no"); + InsertMsd( + "Ncmsay", + "samostalnik vrsta=obcno_ime spol=moški število=ednina sklon=tožilnik živost=da", + "Noun Type=common Gender=masculine Number=singular Case=accusative Animate=yes"); + InsertMsd( + "Ncmsl", + "samostalnik vrsta=obcno_ime spol=moški število=ednina sklon=mestnik", + "Noun Type=common Gender=masculine Number=singular Case=locative"); + InsertMsd( + "Ncmsi", + "samostalnik vrsta=obcno_ime spol=moški število=ednina sklon=orodnik", + "Noun Type=common Gender=masculine Number=singular Case=instrumental"); + InsertMsd( + "Ncmdn", + "samostalnik vrsta=obcno_ime spol=moški število=dvojina sklon=imenovalnik", + "Noun Type=common Gender=masculine Number=dual Case=nominative"); + InsertMsd( + "Ncmdg", + "samostalnik vrsta=obcno_ime spol=moški število=dvojina sklon=rodilnik", + "Noun Type=common Gender=masculine Number=dual Case=genitive"); + InsertMsd( + "Ncmdd", + "samostalnik vrsta=obcno_ime spol=moški število=dvojina sklon=dajalnik", + "Noun Type=common Gender=masculine Number=dual Case=dative"); + InsertMsd( + "Ncmda", + "samostalnik vrsta=obcno_ime spol=moški število=dvojina sklon=tožilnik", + "Noun Type=common Gender=masculine Number=dual Case=accusative"); + InsertMsd( + "Ncmdl", + "samostalnik vrsta=obcno_ime spol=moški število=dvojina sklon=mestnik", + "Noun Type=common Gender=masculine Number=dual Case=locative"); + InsertMsd( + "Ncmdi", + "samostalnik vrsta=obcno_ime spol=moški število=dvojina sklon=orodnik", + "Noun Type=common Gender=masculine Number=dual Case=instrumental"); + InsertMsd( + "Ncmpn", + "samostalnik vrsta=obcno_ime spol=moški število=množina sklon=imenovalnik", + "Noun Type=common Gender=masculine Number=plural Case=nominative"); + InsertMsd( + "Ncmpg", + "samostalnik vrsta=obcno_ime spol=moški število=množina sklon=rodilnik", + "Noun Type=common Gender=masculine Number=plural Case=genitive"); + InsertMsd( + "Ncmpd", + "samostalnik vrsta=obcno_ime spol=moški število=množina sklon=dajalnik", + "Noun Type=common Gender=masculine Number=plural Case=dative"); + InsertMsd( + "Ncmpa", + "samostalnik vrsta=obcno_ime spol=moški število=množina sklon=tožilnik", + "Noun Type=common Gender=masculine Number=plural Case=accusative"); + InsertMsd( + "Ncmpl", + "samostalnik vrsta=obcno_ime spol=moški število=množina sklon=mestnik", + "Noun Type=common Gender=masculine Number=plural Case=locative"); + InsertMsd( + "Ncmpi", + "samostalnik vrsta=obcno_ime spol=moški število=množina sklon=orodnik", + "Noun Type=common Gender=masculine Number=plural Case=instrumental"); + InsertMsd( + "Ncfsn", + "samostalnik vrsta=obcno_ime spol=ženski število=ednina sklon=imenovalnik", + "Noun Type=common Gender=feminine Number=singular Case=nominative"); + InsertMsd( + "Ncfsg", + "samostalnik vrsta=obcno_ime spol=ženski število=ednina sklon=rodilnik", + "Noun Type=common Gender=feminine Number=singular Case=genitive"); + InsertMsd( + "Ncfsd", + "samostalnik vrsta=obcno_ime spol=ženski število=ednina sklon=dajalnik", + "Noun Type=common Gender=feminine Number=singular Case=dative"); + InsertMsd( + "Ncfsa", + "samostalnik vrsta=obcno_ime spol=ženski število=ednina sklon=tožilnik", + "Noun Type=common Gender=feminine Number=singular Case=accusative"); + InsertMsd( + "Ncfsl", + "samostalnik vrsta=obcno_ime spol=ženski število=ednina sklon=mestnik", + "Noun Type=common Gender=feminine Number=singular Case=locative"); + InsertMsd( + "Ncfsi", + "samostalnik vrsta=obcno_ime spol=ženski število=ednina sklon=orodnik", + "Noun Type=common Gender=feminine Number=singular Case=instrumental"); + InsertMsd( + "Ncfdn", + "samostalnik vrsta=obcno_ime spol=ženski število=dvojina sklon=imenovalnik", + "Noun Type=common Gender=feminine Number=dual Case=nominative"); + InsertMsd( + "Ncfdg", + "samostalnik vrsta=obcno_ime spol=ženski število=dvojina sklon=rodilnik", + "Noun Type=common Gender=feminine Number=dual Case=genitive"); + InsertMsd( + "Ncfdd", + "samostalnik vrsta=obcno_ime spol=ženski število=dvojina sklon=dajalnik", + "Noun Type=common Gender=feminine Number=dual Case=dative"); + InsertMsd( + "Ncfda", + "samostalnik vrsta=obcno_ime spol=ženski število=dvojina sklon=tožilnik", + "Noun Type=common Gender=feminine Number=dual Case=accusative"); + InsertMsd( + "Ncfdl", + "samostalnik vrsta=obcno_ime spol=ženski število=dvojina sklon=mestnik", + "Noun Type=common Gender=feminine Number=dual Case=locative"); + InsertMsd( + "Ncfdi", + "samostalnik vrsta=obcno_ime spol=ženski število=dvojina sklon=orodnik", + "Noun Type=common Gender=feminine Number=dual Case=instrumental"); + InsertMsd( + "Ncfpn", + "samostalnik vrsta=obcno_ime spol=ženski število=množina sklon=imenovalnik", + "Noun Type=common Gender=feminine Number=plural Case=nominative"); + InsertMsd( + "Ncfpg", + "samostalnik vrsta=obcno_ime spol=ženski število=množina sklon=rodilnik", + "Noun Type=common Gender=feminine Number=plural Case=genitive"); + InsertMsd( + "Ncfpd", + "samostalnik vrsta=obcno_ime spol=ženski število=množina sklon=dajalnik", + "Noun Type=common Gender=feminine Number=plural Case=dative"); + InsertMsd( + "Ncfpa", + "samostalnik vrsta=obcno_ime spol=ženski število=množina sklon=tožilnik", + "Noun Type=common Gender=feminine Number=plural Case=accusative"); + InsertMsd( + "Ncfpl", + "samostalnik vrsta=obcno_ime spol=ženski število=množina sklon=mestnik", + "Noun Type=common Gender=feminine Number=plural Case=locative"); + InsertMsd( + "Ncfpi", + "samostalnik vrsta=obcno_ime spol=ženski število=množina sklon=orodnik", + "Noun Type=common Gender=feminine Number=plural Case=instrumental"); + InsertMsd( + "Ncnsn", + "samostalnik vrsta=obcno_ime spol=srednji število=ednina sklon=imenovalnik", + "Noun Type=common Gender=neuter Number=singular Case=nominative"); + InsertMsd( + "Ncnsg", + "samostalnik vrsta=obcno_ime spol=srednji število=ednina sklon=rodilnik", + "Noun Type=common Gender=neuter Number=singular Case=genitive"); + InsertMsd( + "Ncnsd", + "samostalnik vrsta=obcno_ime spol=srednji število=ednina sklon=dajalnik", + "Noun Type=common Gender=neuter Number=singular Case=dative"); + InsertMsd( + "Ncnsa", + "samostalnik vrsta=obcno_ime spol=srednji število=ednina sklon=tožilnik", + "Noun Type=common Gender=neuter Number=singular Case=accusative"); + InsertMsd( + "Ncnsl", + "samostalnik vrsta=obcno_ime spol=srednji število=ednina sklon=mestnik", + "Noun Type=common Gender=neuter Number=singular Case=locative"); + InsertMsd( + "Ncnsi", + "samostalnik vrsta=obcno_ime spol=srednji število=ednina sklon=orodnik", + "Noun Type=common Gender=neuter Number=singular Case=instrumental"); + InsertMsd( + "Ncndn", + "samostalnik vrsta=obcno_ime spol=srednji število=dvojina sklon=imenovalnik", + "Noun Type=common Gender=neuter Number=dual Case=nominative"); + InsertMsd( + "Ncndg", + "samostalnik vrsta=obcno_ime spol=srednji število=dvojina sklon=rodilnik", + "Noun Type=common Gender=neuter Number=dual Case=genitive"); + InsertMsd("Ncndd", "samostalnik vrsta=obcno_ime spol=srednji število=dvojina sklon=dajalnik", "Noun Type=common Gender=neuter Number=dual Case=dative"); + InsertMsd( + "Ncnda", + "samostalnik vrsta=obcno_ime spol=srednji število=dvojina sklon=tožilnik", + "Noun Type=common Gender=neuter Number=dual Case=accusative"); + InsertMsd( + "Ncndl", + "samostalnik vrsta=obcno_ime spol=srednji število=dvojina sklon=mestnik", + "Noun Type=common Gender=neuter Number=dual Case=locative"); + InsertMsd( + "Ncndi", + "samostalnik vrsta=obcno_ime spol=srednji število=dvojina sklon=orodnik", + "Noun Type=common Gender=neuter Number=dual Case=instrumental"); + InsertMsd( + "Ncnpn", + "samostalnik vrsta=obcno_ime spol=srednji število=množina sklon=imenovalnik", + "Noun Type=common Gender=neuter Number=plural Case=nominative"); + InsertMsd( + "Ncnpg", + "samostalnik vrsta=obcno_ime spol=srednji število=množina sklon=rodilnik", + "Noun Type=common Gender=neuter Number=plural Case=genitive"); + InsertMsd( + "Ncnpd", + "samostalnik vrsta=obcno_ime spol=srednji število=množina sklon=dajalnik", + "Noun Type=common Gender=neuter Number=plural Case=dative"); + InsertMsd( + "Ncnpa", + "samostalnik vrsta=obcno_ime spol=srednji število=množina sklon=tožilnik", + "Noun Type=common Gender=neuter Number=plural Case=accusative"); + InsertMsd( + "Ncnpl", + "samostalnik vrsta=obcno_ime spol=srednji število=množina sklon=mestnik", + "Noun Type=common Gender=neuter Number=plural Case=locative"); + InsertMsd( + "Ncnpi", + "samostalnik vrsta=obcno_ime spol=srednji število=množina sklon=orodnik", + "Noun Type=common Gender=neuter Number=plural Case=instrumental"); + InsertMsd( + "Npmsn", + "samostalnik vrsta=lastno_ime spol=moški število=ednina sklon=imenovalnik", + "Noun Type=proper Gender=masculine Number=singular Case=nominative"); + InsertMsd( + "Npmsg", + "samostalnik vrsta=lastno_ime spol=moški število=ednina sklon=rodilnik", + "Noun Type=proper Gender=masculine Number=singular Case=genitive"); + InsertMsd( + "Npmsd", + "samostalnik vrsta=lastno_ime spol=moški število=ednina sklon=dajalnik", + "Noun Type=proper Gender=masculine Number=singular Case=dative"); + InsertMsd( + "Npmsan", + "samostalnik vrsta=lastno_ime spol=moški število=ednina sklon=tožilnik živost=ne", + "Noun Type=proper Gender=masculine Number=singular Case=accusative Animate=no"); + InsertMsd( + "Npmsay", + "samostalnik vrsta=lastno_ime spol=moški število=ednina sklon=tožilnik živost=da", + "Noun Type=proper Gender=masculine Number=singular Case=accusative Animate=yes"); + InsertMsd( + "Npmsl", + "samostalnik vrsta=lastno_ime spol=moški število=ednina sklon=mestnik", + "Noun Type=proper Gender=masculine Number=singular Case=locative"); + InsertMsd( + "Npmsi", + "samostalnik vrsta=lastno_ime spol=moški število=ednina sklon=orodnik", + "Noun Type=proper Gender=masculine Number=singular Case=instrumental"); + InsertMsd( + "Npmdn", + "samostalnik vrsta=lastno_ime spol=moški število=dvojina sklon=imenovalnik", + "Noun Type=proper Gender=masculine Number=dual Case=nominative"); + InsertMsd( + "Npmdg", + "samostalnik vrsta=lastno_ime spol=moški število=dvojina sklon=rodilnik", + "Noun Type=proper Gender=masculine Number=dual Case=genitive"); + InsertMsd( + "Npmdd", + "samostalnik vrsta=lastno_ime spol=moški število=dvojina sklon=dajalnik", + "Noun Type=proper Gender=masculine Number=dual Case=dative"); + InsertMsd( + "Npmda", + "samostalnik vrsta=lastno_ime spol=moški število=dvojina sklon=tožilnik", + "Noun Type=proper Gender=masculine Number=dual Case=accusative"); + InsertMsd( + "Npmdl", + "samostalnik vrsta=lastno_ime spol=moški število=dvojina sklon=mestnik", + "Noun Type=proper Gender=masculine Number=dual Case=locative"); + InsertMsd( + "Npmdi", + "samostalnik vrsta=lastno_ime spol=moški število=dvojina sklon=orodnik", + "Noun Type=proper Gender=masculine Number=dual Case=instrumental"); + InsertMsd( + "Npmpn", + "samostalnik vrsta=lastno_ime spol=moški število=množina sklon=imenovalnik", + "Noun Type=proper Gender=masculine Number=plural Case=nominative"); + InsertMsd( + "Npmpg", + "samostalnik vrsta=lastno_ime spol=moški število=množina sklon=rodilnik", + "Noun Type=proper Gender=masculine Number=plural Case=genitive"); + InsertMsd( + "Npmpd", + "samostalnik vrsta=lastno_ime spol=moški število=množina sklon=dajalnik", + "Noun Type=proper Gender=masculine Number=plural Case=dative"); + InsertMsd( + "Npmpa", + "samostalnik vrsta=lastno_ime spol=moški število=množina sklon=tožilnik", + "Noun Type=proper Gender=masculine Number=plural Case=accusative"); + InsertMsd( + "Npmpl", + "samostalnik vrsta=lastno_ime spol=moški število=množina sklon=mestnik", + "Noun Type=proper Gender=masculine Number=plural Case=locative"); + InsertMsd( + "Npmpi", + "samostalnik vrsta=lastno_ime spol=moški število=množina sklon=orodnik", + "Noun Type=proper Gender=masculine Number=plural Case=instrumental"); + InsertMsd( + "Npfsn", + "samostalnik vrsta=lastno_ime spol=ženski število=ednina sklon=imenovalnik", + "Noun Type=proper Gender=feminine Number=singular Case=nominative"); + InsertMsd( + "Npfsg", + "samostalnik vrsta=lastno_ime spol=ženski število=ednina sklon=rodilnik", + "Noun Type=proper Gender=feminine Number=singular Case=genitive"); + InsertMsd( + "Npfsd", + "samostalnik vrsta=lastno_ime spol=ženski število=ednina sklon=dajalnik", + "Noun Type=proper Gender=feminine Number=singular Case=dative"); + InsertMsd( + "Npfsa", + "samostalnik vrsta=lastno_ime spol=ženski število=ednina sklon=tožilnik", + "Noun Type=proper Gender=feminine Number=singular Case=accusative"); + InsertMsd( + "Npfsl", + "samostalnik vrsta=lastno_ime spol=ženski število=ednina sklon=mestnik", + "Noun Type=proper Gender=feminine Number=singular Case=locative"); + InsertMsd( + "Npfsi", + "samostalnik vrsta=lastno_ime spol=ženski število=ednina sklon=orodnik", + "Noun Type=proper Gender=feminine Number=singular Case=instrumental"); + InsertMsd( + "Npfdn", + "samostalnik vrsta=lastno_ime spol=ženski število=dvojina sklon=imenovalnik", + "Noun Type=proper Gender=feminine Number=dual Case=nominative"); + InsertMsd( + "Npfdg", + "samostalnik vrsta=lastno_ime spol=ženski število=dvojina sklon=rodilnik", + "Noun Type=proper Gender=feminine Number=dual Case=genitive"); + InsertMsd( + "Npfdd", + "samostalnik vrsta=lastno_ime spol=ženski število=dvojina sklon=dajalnik", + "Noun Type=proper Gender=feminine Number=dual Case=dative"); + InsertMsd( + "Npfda", + "samostalnik vrsta=lastno_ime spol=ženski število=dvojina sklon=tožilnik", + "Noun Type=proper Gender=feminine Number=dual Case=accusative"); + InsertMsd( + "Npfdl", + "samostalnik vrsta=lastno_ime spol=ženski število=dvojina sklon=mestnik", + "Noun Type=proper Gender=feminine Number=dual Case=locative"); + InsertMsd( + "Npfdi", + "samostalnik vrsta=lastno_ime spol=ženski število=dvojina sklon=orodnik", + "Noun Type=proper Gender=feminine Number=dual Case=instrumental"); + InsertMsd( + "Npfpn", + "samostalnik vrsta=lastno_ime spol=ženski število=množina sklon=imenovalnik", + "Noun Type=proper Gender=feminine Number=plural Case=nominative"); + InsertMsd( + "Npfpg", + "samostalnik vrsta=lastno_ime spol=ženski število=množina sklon=rodilnik", + "Noun Type=proper Gender=feminine Number=plural Case=genitive"); + InsertMsd( + "Npfpd", + "samostalnik vrsta=lastno_ime spol=ženski število=množina sklon=dajalnik", + "Noun Type=proper Gender=feminine Number=plural Case=dative"); + InsertMsd( + "Npfpa", + "samostalnik vrsta=lastno_ime spol=ženski število=množina sklon=tožilnik", + "Noun Type=proper Gender=feminine Number=plural Case=accusative"); + InsertMsd( + "Npfpl", + "samostalnik vrsta=lastno_ime spol=ženski število=množina sklon=mestnik", + "Noun Type=proper Gender=feminine Number=plural Case=locative"); + InsertMsd( + "Npfpi", + "samostalnik vrsta=lastno_ime spol=ženski število=množina sklon=orodnik", + "Noun Type=proper Gender=feminine Number=plural Case=instrumental"); + InsertMsd( + "Npnsn", + "samostalnik vrsta=lastno_ime spol=srednji število=ednina sklon=imenovalnik", + "Noun Type=proper Gender=neuter Number=singular Case=nominative"); + InsertMsd( + "Npnsg", + "samostalnik vrsta=lastno_ime spol=srednji število=ednina sklon=rodilnik", + "Noun Type=proper Gender=neuter Number=singular Case=genitive"); + InsertMsd( + "Npnsd", + "samostalnik vrsta=lastno_ime spol=srednji število=ednina sklon=dajalnik", + "Noun Type=proper Gender=neuter Number=singular Case=dative"); + InsertMsd( + "Npnsa", + "samostalnik vrsta=lastno_ime spol=srednji število=ednina sklon=tožilnik", + "Noun Type=proper Gender=neuter Number=singular Case=accusative"); + InsertMsd( + "Npnsl", + "samostalnik vrsta=lastno_ime spol=srednji število=ednina sklon=mestnik", + "Noun Type=proper Gender=neuter Number=singular Case=locative"); + InsertMsd( + "Npnsi", + "samostalnik vrsta=lastno_ime spol=srednji število=ednina sklon=orodnik", + "Noun Type=proper Gender=neuter Number=singular Case=instrumental"); + InsertMsd( + "Npnpn", + "samostalnik vrsta=lastno_ime spol=srednji število=množina sklon=imenovalnik", + "Noun Type=proper Gender=neuter Number=plural Case=nominative"); + InsertMsd( + "Npnpg", + "samostalnik vrsta=lastno_ime spol=srednji število=množina sklon=rodilnik", + "Noun Type=proper Gender=neuter Number=plural Case=genitive"); + InsertMsd( + "Npnpd", + "samostalnik vrsta=lastno_ime spol=srednji število=množina sklon=dajalnik", + "Noun Type=proper Gender=neuter Number=plural Case=dative"); + InsertMsd( + "Npnpa", + "samostalnik vrsta=lastno_ime spol=srednji število=množina sklon=tožilnik", + "Noun Type=proper Gender=neuter Number=plural Case=accusative"); + InsertMsd( + "Npnpl", + "samostalnik vrsta=lastno_ime spol=srednji število=množina sklon=mestnik", + "Noun Type=proper Gender=neuter Number=plural Case=locative"); + InsertMsd( + "Npnpi", + "samostalnik vrsta=lastno_ime spol=srednji število=množina sklon=orodnik", + "Noun Type=proper Gender=neuter Number=plural Case=instrumental"); + InsertMsd("Vmen", "glagol vrsta=glavni vid=dovršni oblika=nedolocnik", "Verb Type=main Aspect=perfective VForm=infinitive"); + InsertMsd("Vmeu", "glagol vrsta=glavni vid=dovršni oblika=namenilnik", "Verb Type=main Aspect=perfective VForm=supine"); + InsertMsd( + "Vmep-sm", + "glagol vrsta=glavni vid=dovršni oblika=deležnik število=ednina spol=moški", + "Verb Type=main Aspect=perfective VForm=participle Number=singular Gender=masculine"); + InsertMsd( + "Vmep-sf", + "glagol vrsta=glavni vid=dovršni oblika=deležnik število=ednina spol=ženski", + "Verb Type=main Aspect=perfective VForm=participle Number=singular Gender=feminine"); + InsertMsd( + "Vmep-sn", + "glagol vrsta=glavni vid=dovršni oblika=deležnik število=ednina spol=srednji", + "Verb Type=main Aspect=perfective VForm=participle Number=singular Gender=neuter"); + InsertMsd( + "Vmep-pm", + "glagol vrsta=glavni vid=dovršni oblika=deležnik število=množina spol=moški", + "Verb Type=main Aspect=perfective VForm=participle Number=plural Gender=masculine"); + InsertMsd( + "Vmep-pf", + "glagol vrsta=glavni vid=dovršni oblika=deležnik število=množina spol=ženski", + "Verb Type=main Aspect=perfective VForm=participle Number=plural Gender=feminine"); + InsertMsd( + "Vmep-pn", + "glagol vrsta=glavni vid=dovršni oblika=deležnik število=množina spol=srednji", + "Verb Type=main Aspect=perfective VForm=participle Number=plural Gender=neuter"); + InsertMsd( + "Vmep-dm", + "glagol vrsta=glavni vid=dovršni oblika=deležnik število=dvojina spol=moški", + "Verb Type=main Aspect=perfective VForm=participle Number=dual Gender=masculine"); + InsertMsd( + "Vmep-df", + "glagol vrsta=glavni vid=dovršni oblika=deležnik število=dvojina spol=ženski", + "Verb Type=main Aspect=perfective VForm=participle Number=dual Gender=feminine"); + InsertMsd( + "Vmep-dn", + "glagol vrsta=glavni vid=dovršni oblika=deležnik število=dvojina spol=srednji", + "Verb Type=main Aspect=perfective VForm=participle Number=dual Gender=neuter"); + InsertMsd( + "Vmer1s", + "glagol vrsta=glavni vid=dovršni oblika=sedanjik oseba=prva število=ednina", + "Verb Type=main Aspect=perfective VForm=present Person=first Number=singular"); + InsertMsd( + "Vmer1p", + "glagol vrsta=glavni vid=dovršni oblika=sedanjik oseba=prva število=množina", + "Verb Type=main Aspect=perfective VForm=present Person=first Number=plural"); + InsertMsd( + "Vmer1d", + "glagol vrsta=glavni vid=dovršni oblika=sedanjik oseba=prva število=dvojina", + "Verb Type=main Aspect=perfective VForm=present Person=first Number=dual"); + InsertMsd( + "Vmer2s", + "glagol vrsta=glavni vid=dovršni oblika=sedanjik oseba=druga število=ednina", + "Verb Type=main Aspect=perfective VForm=present Person=second Number=singular"); + InsertMsd( + "Vmer2p", + "glagol vrsta=glavni vid=dovršni oblika=sedanjik oseba=druga število=množina", + "Verb Type=main Aspect=perfective VForm=present Person=second Number=plural"); + InsertMsd( + "Vmer2d", + "glagol vrsta=glavni vid=dovršni oblika=sedanjik oseba=druga število=dvojina", + "Verb Type=main Aspect=perfective VForm=present Person=second Number=dual"); + InsertMsd( + "Vmer3s", + "glagol vrsta=glavni vid=dovršni oblika=sedanjik oseba=tretja število=ednina", + "Verb Type=main Aspect=perfective VForm=present Person=third Number=singular"); + InsertMsd( + "Vmer3p", + "glagol vrsta=glavni vid=dovršni oblika=sedanjik oseba=tretja število=množina", + "Verb Type=main Aspect=perfective VForm=present Person=third Number=plural"); + InsertMsd( + "Vmer3d", + "glagol vrsta=glavni vid=dovršni oblika=sedanjik oseba=tretja število=dvojina", + "Verb Type=main Aspect=perfective VForm=present Person=third Number=dual"); + InsertMsd( + "Vmem1p", + "glagol vrsta=glavni vid=dovršni oblika=velelnik oseba=prva število=množina", + "Verb Type=main Aspect=perfective VForm=imperative Person=first Number=plural"); + InsertMsd( + "Vmem1d", + "glagol vrsta=glavni vid=dovršni oblika=velelnik oseba=prva število=dvojina", + "Verb Type=main Aspect=perfective VForm=imperative Person=first Number=dual"); + InsertMsd( + "Vmem2s", + "glagol vrsta=glavni vid=dovršni oblika=velelnik oseba=druga število=ednina", + "Verb Type=main Aspect=perfective VForm=imperative Person=second Number=singular"); + InsertMsd( + "Vmem2p", + "glagol vrsta=glavni vid=dovršni oblika=velelnik oseba=druga število=množina", + "Verb Type=main Aspect=perfective VForm=imperative Person=second Number=plural"); + InsertMsd( + "Vmem2d", + "glagol vrsta=glavni vid=dovršni oblika=velelnik oseba=druga število=dvojina", + "Verb Type=main Aspect=perfective VForm=imperative Person=second Number=dual"); + InsertMsd("Vmpn", "glagol vrsta=glavni vid=nedovršni oblika=nedolocnik", "Verb Type=main Aspect=progressive VForm=infinitive"); + InsertMsd("Vmpu", "glagol vrsta=glavni vid=nedovršni oblika=namenilnik", "Verb Type=main Aspect=progressive VForm=supine"); + InsertMsd( + "Vmpp-sm", + "glagol vrsta=glavni vid=nedovršni oblika=deležnik število=ednina spol=moški", + "Verb Type=main Aspect=progressive VForm=participle Number=singular Gender=masculine"); + InsertMsd( + "Vmpp-sf", + "glagol vrsta=glavni vid=nedovršni oblika=deležnik število=ednina spol=ženski", + "Verb Type=main Aspect=progressive VForm=participle Number=singular Gender=feminine"); + InsertMsd( + "Vmpp-sn", + "glagol vrsta=glavni vid=nedovršni oblika=deležnik število=ednina spol=srednji", + "Verb Type=main Aspect=progressive VForm=participle Number=singular Gender=neuter"); + InsertMsd( + "Vmpp-pm", + "glagol vrsta=glavni vid=nedovršni oblika=deležnik število=množina spol=moški", + "Verb Type=main Aspect=progressive VForm=participle Number=plural Gender=masculine"); + InsertMsd( + "Vmpp-pf", + "glagol vrsta=glavni vid=nedovršni oblika=deležnik število=množina spol=ženski", + "Verb Type=main Aspect=progressive VForm=participle Number=plural Gender=feminine"); + InsertMsd( + "Vmpp-pn", + "glagol vrsta=glavni vid=nedovršni oblika=deležnik število=množina spol=srednji", + "Verb Type=main Aspect=progressive VForm=participle Number=plural Gender=neuter"); + InsertMsd( + "Vmpp-dm", + "glagol vrsta=glavni vid=nedovršni oblika=deležnik število=dvojina spol=moški", + "Verb Type=main Aspect=progressive VForm=participle Number=dual Gender=masculine"); + InsertMsd( + "Vmpp-df", + "glagol vrsta=glavni vid=nedovršni oblika=deležnik število=dvojina spol=ženski", + "Verb Type=main Aspect=progressive VForm=participle Number=dual Gender=feminine"); + InsertMsd( + "Vmpp-dn", + "glagol vrsta=glavni vid=nedovršni oblika=deležnik število=dvojina spol=srednji", + "Verb Type=main Aspect=progressive VForm=participle Number=dual Gender=neuter"); + InsertMsd( + "Vmpr1s", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=prva število=ednina", + "Verb Type=main Aspect=progressive VForm=present Person=first Number=singular"); + InsertMsd( + "Vmpr1s-n", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=prva število=ednina nikalnost=nezanikani", + "Verb Type=main Aspect=progressive VForm=present Person=first Number=singular Negative=no"); + InsertMsd( + "Vmpr1s-y", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=prva število=ednina nikalnost=zanikani", + "Verb Type=main Aspect=progressive VForm=present Person=first Number=singular Negative=yes"); + InsertMsd( + "Vmpr1p", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=prva število=množina", + "Verb Type=main Aspect=progressive VForm=present Person=first Number=plural"); + InsertMsd( + "Vmpr1p-n", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=prva število=množina nikalnost=nezanikani", + "Verb Type=main Aspect=progressive VForm=present Person=first Number=plural Negative=no"); + InsertMsd( + "Vmpr1p-y", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=prva število=množina nikalnost=zanikani", + "Verb Type=main Aspect=progressive VForm=present Person=first Number=plural Negative=yes"); + InsertMsd( + "Vmpr1d", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=prva število=dvojina", + "Verb Type=main Aspect=progressive VForm=present Person=first Number=dual"); + InsertMsd( + "Vmpr1d-n", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=prva število=dvojina nikalnost=nezanikani", + "Verb Type=main Aspect=progressive VForm=present Person=first Number=dual Negative=no"); + InsertMsd( + "Vmpr1d-y", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=prva število=dvojina nikalnost=zanikani", + "Verb Type=main Aspect=progressive VForm=present Person=first Number=dual Negative=yes"); + InsertMsd( + "Vmpr2s", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=druga število=ednina", + "Verb Type=main Aspect=progressive VForm=present Person=second Number=singular"); + InsertMsd( + "Vmpr2s-n", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=druga število=ednina nikalnost=nezanikani", + "Verb Type=main Aspect=progressive VForm=present Person=second Number=singular Negative=no"); + InsertMsd( + "Vmpr2s-y", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=druga število=ednina nikalnost=zanikani", + "Verb Type=main Aspect=progressive VForm=present Person=second Number=singular Negative=yes"); + InsertMsd( + "Vmpr2p", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=druga število=množina", + "Verb Type=main Aspect=progressive VForm=present Person=second Number=plural"); + InsertMsd( + "Vmpr2p-n", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=druga število=množina nikalnost=nezanikani", + "Verb Type=main Aspect=progressive VForm=present Person=second Number=plural Negative=no"); + InsertMsd( + "Vmpr2p-y", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=druga število=množina nikalnost=zanikani", + "Verb Type=main Aspect=progressive VForm=present Person=second Number=plural Negative=yes"); + InsertMsd( + "Vmpr2d", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=druga število=dvojina", + "Verb Type=main Aspect=progressive VForm=present Person=second Number=dual"); + InsertMsd( + "Vmpr2d-n", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=druga število=dvojina nikalnost=nezanikani", + "Verb Type=main Aspect=progressive VForm=present Person=second Number=dual Negative=no"); + InsertMsd( + "Vmpr2d-y", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=druga število=dvojina nikalnost=zanikani", + "Verb Type=main Aspect=progressive VForm=present Person=second Number=dual Negative=yes"); + InsertMsd( + "Vmpr3s", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=tretja število=ednina", + "Verb Type=main Aspect=progressive VForm=present Person=third Number=singular"); + InsertMsd( + "Vmpr3s-n", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=tretja število=ednina nikalnost=nezanikani", + "Verb Type=main Aspect=progressive VForm=present Person=third Number=singular Negative=no"); + InsertMsd( + "Vmpr3s-y", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=tretja število=ednina nikalnost=zanikani", + "Verb Type=main Aspect=progressive VForm=present Person=third Number=singular Negative=yes"); + InsertMsd( + "Vmpr3p", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=tretja število=množina", + "Verb Type=main Aspect=progressive VForm=present Person=third Number=plural"); + InsertMsd( + "Vmpr3p-n", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=tretja število=množina nikalnost=nezanikani", + "Verb Type=main Aspect=progressive VForm=present Person=third Number=plural Negative=no"); + InsertMsd( + "Vmpr3p-y", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=tretja število=množina nikalnost=zanikani", + "Verb Type=main Aspect=progressive VForm=present Person=third Number=plural Negative=yes"); + InsertMsd( + "Vmpr3d", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=tretja število=dvojina", + "Verb Type=main Aspect=progressive VForm=present Person=third Number=dual"); + InsertMsd( + "Vmpr3d-n", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=tretja število=dvojina nikalnost=nezanikani", + "Verb Type=main Aspect=progressive VForm=present Person=third Number=dual Negative=no"); + InsertMsd( + "Vmpr3d-y", + "glagol vrsta=glavni vid=nedovršni oblika=sedanjik oseba=tretja število=dvojina nikalnost=zanikani", + "Verb Type=main Aspect=progressive VForm=present Person=third Number=dual Negative=yes"); + InsertMsd( + "Vmpm1p", + "glagol vrsta=glavni vid=nedovršni oblika=velelnik oseba=prva število=množina", + "Verb Type=main Aspect=progressive VForm=imperative Person=first Number=plural"); + InsertMsd( + "Vmpm1d", + "glagol vrsta=glavni vid=nedovršni oblika=velelnik oseba=prva število=dvojina", + "Verb Type=main Aspect=progressive VForm=imperative Person=first Number=dual"); + InsertMsd( + "Vmpm2s", + "glagol vrsta=glavni vid=nedovršni oblika=velelnik oseba=druga število=ednina", + "Verb Type=main Aspect=progressive VForm=imperative Person=second Number=singular"); + InsertMsd( + "Vmpm2p", + "glagol vrsta=glavni vid=nedovršni oblika=velelnik oseba=druga število=množina", + "Verb Type=main Aspect=progressive VForm=imperative Person=second Number=plural"); + InsertMsd( + "Vmpm2d", + "glagol vrsta=glavni vid=nedovršni oblika=velelnik oseba=druga število=dvojina", + "Verb Type=main Aspect=progressive VForm=imperative Person=second Number=dual"); + InsertMsd("Vmbn", "glagol vrsta=glavni vid=dvovidski oblika=nedolocnik", "Verb Type=main Aspect=biaspectual VForm=infinitive"); + InsertMsd("Vmbu", "glagol vrsta=glavni vid=dvovidski oblika=namenilnik", "Verb Type=main Aspect=biaspectual VForm=supine"); + InsertMsd( + "Vmbp-sm", + "glagol vrsta=glavni vid=dvovidski oblika=deležnik število=ednina spol=moški", + "Verb Type=main Aspect=biaspectual VForm=participle Number=singular Gender=masculine"); + InsertMsd( + "Vmbp-sf", + "glagol vrsta=glavni vid=dvovidski oblika=deležnik število=ednina spol=ženski", + "Verb Type=main Aspect=biaspectual VForm=participle Number=singular Gender=feminine"); + InsertMsd( + "Vmbp-sn", + "glagol vrsta=glavni vid=dvovidski oblika=deležnik število=ednina spol=srednji", + "Verb Type=main Aspect=biaspectual VForm=participle Number=singular Gender=neuter"); + InsertMsd( + "Vmbp-pm", + "glagol vrsta=glavni vid=dvovidski oblika=deležnik število=množina spol=moški", + "Verb Type=main Aspect=biaspectual VForm=participle Number=plural Gender=masculine"); + InsertMsd( + "Vmbp-pf", + "glagol vrsta=glavni vid=dvovidski oblika=deležnik število=množina spol=ženski", + "Verb Type=main Aspect=biaspectual VForm=participle Number=plural Gender=feminine"); + InsertMsd( + "Vmbp-pn", + "glagol vrsta=glavni vid=dvovidski oblika=deležnik število=množina spol=srednji", + "Verb Type=main Aspect=biaspectual VForm=participle Number=plural Gender=neuter"); + InsertMsd( + "Vmbp-dm", + "glagol vrsta=glavni vid=dvovidski oblika=deležnik število=dvojina spol=moški", + "Verb Type=main Aspect=biaspectual VForm=participle Number=dual Gender=masculine"); + InsertMsd( + "Vmbp-df", + "glagol vrsta=glavni vid=dvovidski oblika=deležnik število=dvojina spol=ženski", + "Verb Type=main Aspect=biaspectual VForm=participle Number=dual Gender=feminine"); + InsertMsd( + "Vmbp-dn", + "glagol vrsta=glavni vid=dvovidski oblika=deležnik število=dvojina spol=srednji", + "Verb Type=main Aspect=biaspectual VForm=participle Number=dual Gender=neuter"); + InsertMsd( + "Vmbr1s", + "glagol vrsta=glavni vid=dvovidski oblika=sedanjik oseba=prva število=ednina", + "Verb Type=main Aspect=biaspectual VForm=present Person=first Number=singular"); + InsertMsd( + "Vmbr1p", + "glagol vrsta=glavni vid=dvovidski oblika=sedanjik oseba=prva število=množina", + "Verb Type=main Aspect=biaspectual VForm=present Person=first Number=plural"); + InsertMsd( + "Vmbr1d", + "glagol vrsta=glavni vid=dvovidski oblika=sedanjik oseba=prva število=dvojina", + "Verb Type=main Aspect=biaspectual VForm=present Person=first Number=dual"); + InsertMsd( + "Vmbr1df", + "glagol vrsta=glavni vid=dvovidski oblika=sedanjik oseba=prva število=dvojina spol=ženski", + "Verb Type=main Aspect=biaspectual VForm=present Person=first Number=dual Gender=feminine"); + InsertMsd( + "Vmbr2s", + "glagol vrsta=glavni vid=dvovidski oblika=sedanjik oseba=druga število=ednina", + "Verb Type=main Aspect=biaspectual VForm=present Person=second Number=singular"); + InsertMsd( + "Vmbr2p", + "glagol vrsta=glavni vid=dvovidski oblika=sedanjik oseba=druga število=množina", + "Verb Type=main Aspect=biaspectual VForm=present Person=second Number=plural"); + InsertMsd( + "Vmbr2d", + "glagol vrsta=glavni vid=dvovidski oblika=sedanjik oseba=druga število=dvojina", + "Verb Type=main Aspect=biaspectual VForm=present Person=second Number=dual"); + InsertMsd( + "Vmbr3s", + "glagol vrsta=glavni vid=dvovidski oblika=sedanjik oseba=tretja število=ednina", + "Verb Type=main Aspect=biaspectual VForm=present Person=third Number=singular"); + InsertMsd( + "Vmbr3p", + "glagol vrsta=glavni vid=dvovidski oblika=sedanjik oseba=tretja število=množina", + "Verb Type=main Aspect=biaspectual VForm=present Person=third Number=plural"); + InsertMsd( + "Vmbr3d", + "glagol vrsta=glavni vid=dvovidski oblika=sedanjik oseba=tretja število=dvojina", + "Verb Type=main Aspect=biaspectual VForm=present Person=third Number=dual"); + InsertMsd( + "Vmbf1s", + "glagol vrsta=glavni vid=dvovidski oblika=prihodnjik oseba=prva število=ednina", + "Verb Type=main Aspect=biaspectual VForm=future Person=first Number=singular"); + InsertMsd( + "Vmbf1p", + "glagol vrsta=glavni vid=dvovidski oblika=prihodnjik oseba=prva število=množina", + "Verb Type=main Aspect=biaspectual VForm=future Person=first Number=plural"); + InsertMsd( + "Vmbf1d", + "glagol vrsta=glavni vid=dvovidski oblika=prihodnjik oseba=prva število=dvojina", + "Verb Type=main Aspect=biaspectual VForm=future Person=first Number=dual"); + InsertMsd( + "Vmbf2s", + "glagol vrsta=glavni vid=dvovidski oblika=prihodnjik oseba=druga število=ednina", + "Verb Type=main Aspect=biaspectual VForm=future Person=second Number=singular"); + InsertMsd( + "Vmbf2p", + "glagol vrsta=glavni vid=dvovidski oblika=prihodnjik oseba=druga število=množina", + "Verb Type=main Aspect=biaspectual VForm=future Person=second Number=plural"); + InsertMsd( + "Vmbf2d", + "glagol vrsta=glavni vid=dvovidski oblika=prihodnjik oseba=druga število=dvojina", + "Verb Type=main Aspect=biaspectual VForm=future Person=second Number=dual"); + InsertMsd( + "Vmbf3s", + "glagol vrsta=glavni vid=dvovidski oblika=prihodnjik oseba=tretja število=ednina", + "Verb Type=main Aspect=biaspectual VForm=future Person=third Number=singular"); + InsertMsd( + "Vmbf3p", + "glagol vrsta=glavni vid=dvovidski oblika=prihodnjik oseba=tretja število=množina", + "Verb Type=main Aspect=biaspectual VForm=future Person=third Number=plural"); + InsertMsd( + "Vmbf3d", + "glagol vrsta=glavni vid=dvovidski oblika=prihodnjik oseba=tretja število=dvojina", + "Verb Type=main Aspect=biaspectual VForm=future Person=third Number=dual"); + InsertMsd( + "Vmbm1p", + "glagol vrsta=glavni vid=dvovidski oblika=velelnik oseba=prva število=množina", + "Verb Type=main Aspect=biaspectual VForm=imperative Person=first Number=plural"); + InsertMsd( + "Vmbm1d", + "glagol vrsta=glavni vid=dvovidski oblika=velelnik oseba=prva število=dvojina", + "Verb Type=main Aspect=biaspectual VForm=imperative Person=first Number=dual"); + InsertMsd( + "Vmbm2s", + "glagol vrsta=glavni vid=dvovidski oblika=velelnik oseba=druga število=ednina", + "Verb Type=main Aspect=biaspectual VForm=imperative Person=second Number=singular"); + InsertMsd( + "Vmbm2p", + "glagol vrsta=glavni vid=dvovidski oblika=velelnik oseba=druga število=množina", + "Verb Type=main Aspect=biaspectual VForm=imperative Person=second Number=plural"); + InsertMsd( + "Vmbm2d", + "glagol vrsta=glavni vid=dvovidski oblika=velelnik oseba=druga število=dvojina", + "Verb Type=main Aspect=biaspectual VForm=imperative Person=second Number=dual"); + InsertMsd("Va-n", "glagol vrsta=pomožni oblika=nedolocnik", "Verb Type=auxiliary VForm=infinitive"); + InsertMsd("Va-u", "glagol vrsta=pomožni oblika=namenilnik", "Verb Type=auxiliary VForm=supine"); + InsertMsd( + "Va-p-sm", + "glagol vrsta=pomožni oblika=deležnik število=ednina spol=moški", + "Verb Type=auxiliary VForm=participle Number=singular Gender=masculine"); + InsertMsd( + "Va-p-sf", + "glagol vrsta=pomožni oblika=deležnik število=ednina spol=ženski", + "Verb Type=auxiliary VForm=participle Number=singular Gender=feminine"); + InsertMsd( + "Va-p-sn", + "glagol vrsta=pomožni oblika=deležnik število=ednina spol=srednji", + "Verb Type=auxiliary VForm=participle Number=singular Gender=neuter"); + InsertMsd( + "Va-p-pm", + "glagol vrsta=pomožni oblika=deležnik število=množina spol=moški", + "Verb Type=auxiliary VForm=participle Number=plural Gender=masculine"); + InsertMsd( + "Va-p-pf", + "glagol vrsta=pomožni oblika=deležnik število=množina spol=ženski", + "Verb Type=auxiliary VForm=participle Number=plural Gender=feminine"); + InsertMsd( + "Va-p-pn", + "glagol vrsta=pomožni oblika=deležnik število=množina spol=srednji", + "Verb Type=auxiliary VForm=participle Number=plural Gender=neuter"); + InsertMsd( + "Va-p-dm", + "glagol vrsta=pomožni oblika=deležnik število=dvojina spol=moški", + "Verb Type=auxiliary VForm=participle Number=dual Gender=masculine"); + InsertMsd( + "Va-p-df", + "glagol vrsta=pomožni oblika=deležnik število=dvojina spol=ženski", + "Verb Type=auxiliary VForm=participle Number=dual Gender=feminine"); + InsertMsd( + "Va-p-dn", + "glagol vrsta=pomožni oblika=deležnik število=dvojina spol=srednji", + "Verb Type=auxiliary VForm=participle Number=dual Gender=neuter"); + InsertMsd( + "Va-r1s-n", + "glagol vrsta=pomožni oblika=sedanjik oseba=prva število=ednina nikalnost=nezanikani", + "Verb Type=auxiliary VForm=present Person=first Number=singular Negative=no"); + InsertMsd( + "Va-r1s-y", + "glagol vrsta=pomožni oblika=sedanjik oseba=prva število=ednina nikalnost=zanikani", + "Verb Type=auxiliary VForm=present Person=first Number=singular Negative=yes"); + InsertMsd( + "Va-r1p-n", + "glagol vrsta=pomožni oblika=sedanjik oseba=prva število=množina nikalnost=nezanikani", + "Verb Type=auxiliary VForm=present Person=first Number=plural Negative=no"); + InsertMsd( + "Va-r1p-y", + "glagol vrsta=pomožni oblika=sedanjik oseba=prva število=množina nikalnost=zanikani", + "Verb Type=auxiliary VForm=present Person=first Number=plural Negative=yes"); + InsertMsd( + "Va-r1d-n", + "glagol vrsta=pomožni oblika=sedanjik oseba=prva število=dvojina nikalnost=nezanikani", + "Verb Type=auxiliary VForm=present Person=first Number=dual Negative=no"); + InsertMsd( + "Va-r1d-y", + "glagol vrsta=pomožni oblika=sedanjik oseba=prva število=dvojina nikalnost=zanikani", + "Verb Type=auxiliary VForm=present Person=first Number=dual Negative=yes"); + InsertMsd( + "Va-r1dfn", + "glagol vrsta=pomožni oblika=sedanjik oseba=prva število=dvojina spol=ženski nikalnost=nezanikani", + "Verb Type=auxiliary VForm=present Person=first Number=dual Gender=feminine Negative=no"); + InsertMsd( + "Va-r2s-n", + "glagol vrsta=pomožni oblika=sedanjik oseba=druga število=ednina nikalnost=nezanikani", + "Verb Type=auxiliary VForm=present Person=second Number=singular Negative=no"); + InsertMsd( + "Va-r2s-y", + "glagol vrsta=pomožni oblika=sedanjik oseba=druga število=ednina nikalnost=zanikani", + "Verb Type=auxiliary VForm=present Person=second Number=singular Negative=yes"); + InsertMsd( + "Va-r2p-n", + "glagol vrsta=pomožni oblika=sedanjik oseba=druga število=množina nikalnost=nezanikani", + "Verb Type=auxiliary VForm=present Person=second Number=plural Negative=no"); + InsertMsd( + "Va-r2p-y", + "glagol vrsta=pomožni oblika=sedanjik oseba=druga število=množina nikalnost=zanikani", + "Verb Type=auxiliary VForm=present Person=second Number=plural Negative=yes"); + InsertMsd( + "Va-r2d-n", + "glagol vrsta=pomožni oblika=sedanjik oseba=druga število=dvojina nikalnost=nezanikani", + "Verb Type=auxiliary VForm=present Person=second Number=dual Negative=no"); + InsertMsd( + "Va-r2d-y", + "glagol vrsta=pomožni oblika=sedanjik oseba=druga število=dvojina nikalnost=zanikani", + "Verb Type=auxiliary VForm=present Person=second Number=dual Negative=yes"); + InsertMsd( + "Va-r3s-n", + "glagol vrsta=pomožni oblika=sedanjik oseba=tretja število=ednina nikalnost=nezanikani", + "Verb Type=auxiliary VForm=present Person=third Number=singular Negative=no"); + InsertMsd( + "Va-r3s-y", + "glagol vrsta=pomožni oblika=sedanjik oseba=tretja število=ednina nikalnost=zanikani", + "Verb Type=auxiliary VForm=present Person=third Number=singular Negative=yes"); + InsertMsd( + "Va-r3p-n", + "glagol vrsta=pomožni oblika=sedanjik oseba=tretja število=množina nikalnost=nezanikani", + "Verb Type=auxiliary VForm=present Person=third Number=plural Negative=no"); + InsertMsd( + "Va-r3p-y", + "glagol vrsta=pomožni oblika=sedanjik oseba=tretja število=množina nikalnost=zanikani", + "Verb Type=auxiliary VForm=present Person=third Number=plural Negative=yes"); + InsertMsd( + "Va-r3d-n", + "glagol vrsta=pomožni oblika=sedanjik oseba=tretja število=dvojina nikalnost=nezanikani", + "Verb Type=auxiliary VForm=present Person=third Number=dual Negative=no"); + InsertMsd( + "Va-r3d-y", + "glagol vrsta=pomožni oblika=sedanjik oseba=tretja število=dvojina nikalnost=zanikani", + "Verb Type=auxiliary VForm=present Person=third Number=dual Negative=yes"); + InsertMsd( + "Va-f1s-n", + "glagol vrsta=pomožni oblika=prihodnjik oseba=prva število=ednina nikalnost=nezanikani", + "Verb Type=auxiliary VForm=future Person=first Number=singular Negative=no"); + InsertMsd( + "Va-f1s-y", + "glagol vrsta=pomožni oblika=prihodnjik oseba=prva število=ednina nikalnost=zanikani", + "Verb Type=auxiliary VForm=future Person=first Number=singular Negative=yes"); + InsertMsd( + "Va-f1p-n", + "glagol vrsta=pomožni oblika=prihodnjik oseba=prva število=množina nikalnost=nezanikani", + "Verb Type=auxiliary VForm=future Person=first Number=plural Negative=no"); + InsertMsd( + "Va-f1p-y", + "glagol vrsta=pomožni oblika=prihodnjik oseba=prva število=množina nikalnost=zanikani", + "Verb Type=auxiliary VForm=future Person=first Number=plural Negative=yes"); + InsertMsd("Va-f1d", "glagol vrsta=pomožni oblika=prihodnjik oseba=prva število=dvojina", "Verb Type=auxiliary VForm=future Person=first Number=dual"); + InsertMsd( + "Va-f1d-n", + "glagol vrsta=pomožni oblika=prihodnjik oseba=prva število=dvojina nikalnost=nezanikani", + "Verb Type=auxiliary VForm=future Person=first Number=dual Negative=no"); + InsertMsd( + "Va-f1d-y", + "glagol vrsta=pomožni oblika=prihodnjik oseba=prva število=dvojina nikalnost=zanikani", + "Verb Type=auxiliary VForm=future Person=first Number=dual Negative=yes"); + InsertMsd( + "Va-f2s-n", + "glagol vrsta=pomožni oblika=prihodnjik oseba=druga število=ednina nikalnost=nezanikani", + "Verb Type=auxiliary VForm=future Person=second Number=singular Negative=no"); + InsertMsd( + "Va-f2s-y", + "glagol vrsta=pomožni oblika=prihodnjik oseba=druga število=ednina nikalnost=zanikani", + "Verb Type=auxiliary VForm=future Person=second Number=singular Negative=yes"); + InsertMsd( + "Va-f2p-n", + "glagol vrsta=pomožni oblika=prihodnjik oseba=druga število=množina nikalnost=nezanikani", + "Verb Type=auxiliary VForm=future Person=second Number=plural Negative=no"); + InsertMsd( + "Va-f2d-n", + "glagol vrsta=pomožni oblika=prihodnjik oseba=druga število=dvojina nikalnost=nezanikani", + "Verb Type=auxiliary VForm=future Person=second Number=dual Negative=no"); + InsertMsd( + "Va-f3s-n", + "glagol vrsta=pomožni oblika=prihodnjik oseba=tretja število=ednina nikalnost=nezanikani", + "Verb Type=auxiliary VForm=future Person=third Number=singular Negative=no"); + InsertMsd( + "Va-f3s-y", + "glagol vrsta=pomožni oblika=prihodnjik oseba=tretja število=ednina nikalnost=zanikani", + "Verb Type=auxiliary VForm=future Person=third Number=singular Negative=yes"); + InsertMsd( + "Va-f3p-n", + "glagol vrsta=pomožni oblika=prihodnjik oseba=tretja število=množina nikalnost=nezanikani", + "Verb Type=auxiliary VForm=future Person=third Number=plural Negative=no"); + InsertMsd( + "Va-f3p-y", + "glagol vrsta=pomožni oblika=prihodnjik oseba=tretja število=množina nikalnost=zanikani", + "Verb Type=auxiliary VForm=future Person=third Number=plural Negative=yes"); + InsertMsd( + "Va-f3d-n", + "glagol vrsta=pomožni oblika=prihodnjik oseba=tretja število=dvojina nikalnost=nezanikani", + "Verb Type=auxiliary VForm=future Person=third Number=dual Negative=no"); + InsertMsd("Va-c", "glagol vrsta=pomožni oblika=pogojnik", "Verb Type=auxiliary VForm=conditional"); + InsertMsd("Va-c---y", "glagol vrsta=pomožni oblika=pogojnik nikalnost=zanikani", "Verb Type=auxiliary VForm=conditional Negative=yes"); + InsertMsd( + "Va-m1p", + "glagol vrsta=pomožni oblika=velelnik oseba=prva število=množina", + "Verb Type=auxiliary VForm=imperative Person=first Number=plural"); + InsertMsd("Va-m1d", "glagol vrsta=pomožni oblika=velelnik oseba=prva število=dvojina", "Verb Type=auxiliary VForm=imperative Person=first Number=dual"); + InsertMsd( + "Va-m2s", + "glagol vrsta=pomožni oblika=velelnik oseba=druga število=ednina", + "Verb Type=auxiliary VForm=imperative Person=second Number=singular"); + InsertMsd( + "Va-m2p", + "glagol vrsta=pomožni oblika=velelnik oseba=druga število=množina", + "Verb Type=auxiliary VForm=imperative Person=second Number=plural"); + InsertMsd( + "Va-m2d", + "glagol vrsta=pomožni oblika=velelnik oseba=druga število=dvojina", + "Verb Type=auxiliary VForm=imperative Person=second Number=dual"); + InsertMsd( + "Agpmsnn", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=moški število=ednina sklon=imenovalnik dolocnost=ne", + "Adjective Type=general Degree=positive Gender=masculine Number=singular Case=nominative Definiteness=no"); + InsertMsd( + "Agpmsny", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=moški število=ednina sklon=imenovalnik dolocnost=da", + "Adjective Type=general Degree=positive Gender=masculine Number=singular Case=nominative Definiteness=yes"); + InsertMsd( + "Agpmsg", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=moški število=ednina sklon=rodilnik", + "Adjective Type=general Degree=positive Gender=masculine Number=singular Case=genitive"); + InsertMsd( + "Agpmsd", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=moški število=ednina sklon=dajalnik", + "Adjective Type=general Degree=positive Gender=masculine Number=singular Case=dative"); + InsertMsd( + "Agpmsa", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=moški število=ednina sklon=tožilnik", + "Adjective Type=general Degree=positive Gender=masculine Number=singular Case=accusative"); + InsertMsd( + "Agpmsan", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=moški število=ednina sklon=tožilnik dolocnost=ne", + "Adjective Type=general Degree=positive Gender=masculine Number=singular Case=accusative Definiteness=no"); + InsertMsd( + "Agpmsay", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=moški število=ednina sklon=tožilnik dolocnost=da", + "Adjective Type=general Degree=positive Gender=masculine Number=singular Case=accusative Definiteness=yes"); + InsertMsd( + "Agpmsl", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=moški število=ednina sklon=mestnik", + "Adjective Type=general Degree=positive Gender=masculine Number=singular Case=locative"); + InsertMsd( + "Agpmsi", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=moški število=ednina sklon=orodnik", + "Adjective Type=general Degree=positive Gender=masculine Number=singular Case=instrumental"); + InsertMsd( + "Agpmdn", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=moški število=dvojina sklon=imenovalnik", + "Adjective Type=general Degree=positive Gender=masculine Number=dual Case=nominative"); + InsertMsd( + "Agpmdg", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=moški število=dvojina sklon=rodilnik", + "Adjective Type=general Degree=positive Gender=masculine Number=dual Case=genitive"); + InsertMsd( + "Agpmdd", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=moški število=dvojina sklon=dajalnik", + "Adjective Type=general Degree=positive Gender=masculine Number=dual Case=dative"); + InsertMsd( + "Agpmda", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=moški število=dvojina sklon=tožilnik", + "Adjective Type=general Degree=positive Gender=masculine Number=dual Case=accusative"); + InsertMsd( + "Agpmdl", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=moški število=dvojina sklon=mestnik", + "Adjective Type=general Degree=positive Gender=masculine Number=dual Case=locative"); + InsertMsd( + "Agpmdi", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=moški število=dvojina sklon=orodnik", + "Adjective Type=general Degree=positive Gender=masculine Number=dual Case=instrumental"); + InsertMsd( + "Agpmpn", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=moški število=množina sklon=imenovalnik", + "Adjective Type=general Degree=positive Gender=masculine Number=plural Case=nominative"); + InsertMsd( + "Agpmpg", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=moški število=množina sklon=rodilnik", + "Adjective Type=general Degree=positive Gender=masculine Number=plural Case=genitive"); + InsertMsd( + "Agpmpd", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=moški število=množina sklon=dajalnik", + "Adjective Type=general Degree=positive Gender=masculine Number=plural Case=dative"); + InsertMsd( + "Agpmpa", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=moški število=množina sklon=tožilnik", + "Adjective Type=general Degree=positive Gender=masculine Number=plural Case=accusative"); + InsertMsd( + "Agpmpl", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=moški število=množina sklon=mestnik", + "Adjective Type=general Degree=positive Gender=masculine Number=plural Case=locative"); + InsertMsd( + "Agpmpi", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=moški število=množina sklon=orodnik", + "Adjective Type=general Degree=positive Gender=masculine Number=plural Case=instrumental"); + InsertMsd( + "Agpfsn", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=ženski število=ednina sklon=imenovalnik", + "Adjective Type=general Degree=positive Gender=feminine Number=singular Case=nominative"); + InsertMsd( + "Agpfsg", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=ženski število=ednina sklon=rodilnik", + "Adjective Type=general Degree=positive Gender=feminine Number=singular Case=genitive"); + InsertMsd( + "Agpfsd", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=ženski število=ednina sklon=dajalnik", + "Adjective Type=general Degree=positive Gender=feminine Number=singular Case=dative"); + InsertMsd( + "Agpfsa", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=ženski število=ednina sklon=tožilnik", + "Adjective Type=general Degree=positive Gender=feminine Number=singular Case=accusative"); + InsertMsd( + "Agpfsl", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=ženski število=ednina sklon=mestnik", + "Adjective Type=general Degree=positive Gender=feminine Number=singular Case=locative"); + InsertMsd( + "Agpfsi", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=ženski število=ednina sklon=orodnik", + "Adjective Type=general Degree=positive Gender=feminine Number=singular Case=instrumental"); + InsertMsd( + "Agpfdn", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=ženski število=dvojina sklon=imenovalnik", + "Adjective Type=general Degree=positive Gender=feminine Number=dual Case=nominative"); + InsertMsd( + "Agpfdg", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=ženski število=dvojina sklon=rodilnik", + "Adjective Type=general Degree=positive Gender=feminine Number=dual Case=genitive"); + InsertMsd( + "Agpfdd", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=ženski število=dvojina sklon=dajalnik", + "Adjective Type=general Degree=positive Gender=feminine Number=dual Case=dative"); + InsertMsd( + "Agpfda", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=ženski število=dvojina sklon=tožilnik", + "Adjective Type=general Degree=positive Gender=feminine Number=dual Case=accusative"); + InsertMsd( + "Agpfdl", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=ženski število=dvojina sklon=mestnik", + "Adjective Type=general Degree=positive Gender=feminine Number=dual Case=locative"); + InsertMsd( + "Agpfdi", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=ženski število=dvojina sklon=orodnik", + "Adjective Type=general Degree=positive Gender=feminine Number=dual Case=instrumental"); + InsertMsd( + "Agpfpn", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=ženski število=množina sklon=imenovalnik", + "Adjective Type=general Degree=positive Gender=feminine Number=plural Case=nominative"); + InsertMsd( + "Agpfpg", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=ženski število=množina sklon=rodilnik", + "Adjective Type=general Degree=positive Gender=feminine Number=plural Case=genitive"); + InsertMsd( + "Agpfpd", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=ženski število=množina sklon=dajalnik", + "Adjective Type=general Degree=positive Gender=feminine Number=plural Case=dative"); + InsertMsd( + "Agpfpa", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=ženski število=množina sklon=tožilnik", + "Adjective Type=general Degree=positive Gender=feminine Number=plural Case=accusative"); + InsertMsd( + "Agpfpl", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=ženski število=množina sklon=mestnik", + "Adjective Type=general Degree=positive Gender=feminine Number=plural Case=locative"); + InsertMsd( + "Agpfpi", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=ženski število=množina sklon=orodnik", + "Adjective Type=general Degree=positive Gender=feminine Number=plural Case=instrumental"); + InsertMsd( + "Agpnsn", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=srednji število=ednina sklon=imenovalnik", + "Adjective Type=general Degree=positive Gender=neuter Number=singular Case=nominative"); + InsertMsd( + "Agpnsg", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=srednji število=ednina sklon=rodilnik", + "Adjective Type=general Degree=positive Gender=neuter Number=singular Case=genitive"); + InsertMsd( + "Agpnsd", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=srednji število=ednina sklon=dajalnik", + "Adjective Type=general Degree=positive Gender=neuter Number=singular Case=dative"); + InsertMsd( + "Agpnsa", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=srednji število=ednina sklon=tožilnik", + "Adjective Type=general Degree=positive Gender=neuter Number=singular Case=accusative"); + InsertMsd( + "Agpnsl", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=srednji število=ednina sklon=mestnik", + "Adjective Type=general Degree=positive Gender=neuter Number=singular Case=locative"); + InsertMsd( + "Agpnsi", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=srednji število=ednina sklon=orodnik", + "Adjective Type=general Degree=positive Gender=neuter Number=singular Case=instrumental"); + InsertMsd( + "Agpndn", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=srednji število=dvojina sklon=imenovalnik", + "Adjective Type=general Degree=positive Gender=neuter Number=dual Case=nominative"); + InsertMsd( + "Agpndg", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=srednji število=dvojina sklon=rodilnik", + "Adjective Type=general Degree=positive Gender=neuter Number=dual Case=genitive"); + InsertMsd( + "Agpndd", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=srednji število=dvojina sklon=dajalnik", + "Adjective Type=general Degree=positive Gender=neuter Number=dual Case=dative"); + InsertMsd( + "Agpnda", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=srednji število=dvojina sklon=tožilnik", + "Adjective Type=general Degree=positive Gender=neuter Number=dual Case=accusative"); + InsertMsd( + "Agpndl", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=srednji število=dvojina sklon=mestnik", + "Adjective Type=general Degree=positive Gender=neuter Number=dual Case=locative"); + InsertMsd( + "Agpndi", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=srednji število=dvojina sklon=orodnik", + "Adjective Type=general Degree=positive Gender=neuter Number=dual Case=instrumental"); + InsertMsd( + "Agpnpn", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=srednji število=množina sklon=imenovalnik", + "Adjective Type=general Degree=positive Gender=neuter Number=plural Case=nominative"); + InsertMsd( + "Agpnpg", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=srednji število=množina sklon=rodilnik", + "Adjective Type=general Degree=positive Gender=neuter Number=plural Case=genitive"); + InsertMsd( + "Agpnpd", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=srednji število=množina sklon=dajalnik", + "Adjective Type=general Degree=positive Gender=neuter Number=plural Case=dative"); + InsertMsd( + "Agpnpa", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=srednji število=množina sklon=tožilnik", + "Adjective Type=general Degree=positive Gender=neuter Number=plural Case=accusative"); + InsertMsd( + "Agpnpl", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=srednji število=množina sklon=mestnik", + "Adjective Type=general Degree=positive Gender=neuter Number=plural Case=locative"); + InsertMsd( + "Agpnpi", + "pridevnik vrsta=splošni stopnja=nedoloceno spol=srednji število=množina sklon=orodnik", + "Adjective Type=general Degree=positive Gender=neuter Number=plural Case=instrumental"); + InsertMsd( + "Agcmsny", + "pridevnik vrsta=splošni stopnja=primernik spol=moški število=ednina sklon=imenovalnik dolocnost=da", + "Adjective Type=general Degree=comparative Gender=masculine Number=singular Case=nominative Definiteness=yes"); + InsertMsd( + "Agcmsg", + "pridevnik vrsta=splošni stopnja=primernik spol=moški število=ednina sklon=rodilnik", + "Adjective Type=general Degree=comparative Gender=masculine Number=singular Case=genitive"); + InsertMsd( + "Agcmsd", + "pridevnik vrsta=splošni stopnja=primernik spol=moški število=ednina sklon=dajalnik", + "Adjective Type=general Degree=comparative Gender=masculine Number=singular Case=dative"); + InsertMsd( + "Agcmsa", + "pridevnik vrsta=splošni stopnja=primernik spol=moški število=ednina sklon=tožilnik", + "Adjective Type=general Degree=comparative Gender=masculine Number=singular Case=accusative"); + InsertMsd( + "Agcmsay", + "pridevnik vrsta=splošni stopnja=primernik spol=moški število=ednina sklon=tožilnik dolocnost=da", + "Adjective Type=general Degree=comparative Gender=masculine Number=singular Case=accusative Definiteness=yes"); + InsertMsd( + "Agcmsl", + "pridevnik vrsta=splošni stopnja=primernik spol=moški število=ednina sklon=mestnik", + "Adjective Type=general Degree=comparative Gender=masculine Number=singular Case=locative"); + InsertMsd( + "Agcmsi", + "pridevnik vrsta=splošni stopnja=primernik spol=moški število=ednina sklon=orodnik", + "Adjective Type=general Degree=comparative Gender=masculine Number=singular Case=instrumental"); + InsertMsd( + "Agcmdn", + "pridevnik vrsta=splošni stopnja=primernik spol=moški število=dvojina sklon=imenovalnik", + "Adjective Type=general Degree=comparative Gender=masculine Number=dual Case=nominative"); + InsertMsd( + "Agcmdg", + "pridevnik vrsta=splošni stopnja=primernik spol=moški število=dvojina sklon=rodilnik", + "Adjective Type=general Degree=comparative Gender=masculine Number=dual Case=genitive"); + InsertMsd( + "Agcmdd", + "pridevnik vrsta=splošni stopnja=primernik spol=moški število=dvojina sklon=dajalnik", + "Adjective Type=general Degree=comparative Gender=masculine Number=dual Case=dative"); + InsertMsd( + "Agcmda", + "pridevnik vrsta=splošni stopnja=primernik spol=moški število=dvojina sklon=tožilnik", + "Adjective Type=general Degree=comparative Gender=masculine Number=dual Case=accusative"); + InsertMsd( + "Agcmdl", + "pridevnik vrsta=splošni stopnja=primernik spol=moški število=dvojina sklon=mestnik", + "Adjective Type=general Degree=comparative Gender=masculine Number=dual Case=locative"); + InsertMsd( + "Agcmdi", + "pridevnik vrsta=splošni stopnja=primernik spol=moški število=dvojina sklon=orodnik", + "Adjective Type=general Degree=comparative Gender=masculine Number=dual Case=instrumental"); + InsertMsd( + "Agcmpn", + "pridevnik vrsta=splošni stopnja=primernik spol=moški število=množina sklon=imenovalnik", + "Adjective Type=general Degree=comparative Gender=masculine Number=plural Case=nominative"); + InsertMsd( + "Agcmpg", + "pridevnik vrsta=splošni stopnja=primernik spol=moški število=množina sklon=rodilnik", + "Adjective Type=general Degree=comparative Gender=masculine Number=plural Case=genitive"); + InsertMsd( + "Agcmpd", + "pridevnik vrsta=splošni stopnja=primernik spol=moški število=množina sklon=dajalnik", + "Adjective Type=general Degree=comparative Gender=masculine Number=plural Case=dative"); + InsertMsd( + "Agcmpa", + "pridevnik vrsta=splošni stopnja=primernik spol=moški število=množina sklon=tožilnik", + "Adjective Type=general Degree=comparative Gender=masculine Number=plural Case=accusative"); + InsertMsd( + "Agcmpl", + "pridevnik vrsta=splošni stopnja=primernik spol=moški število=množina sklon=mestnik", + "Adjective Type=general Degree=comparative Gender=masculine Number=plural Case=locative"); + InsertMsd( + "Agcmpi", + "pridevnik vrsta=splošni stopnja=primernik spol=moški število=množina sklon=orodnik", + "Adjective Type=general Degree=comparative Gender=masculine Number=plural Case=instrumental"); + InsertMsd( + "Agcfsn", + "pridevnik vrsta=splošni stopnja=primernik spol=ženski število=ednina sklon=imenovalnik", + "Adjective Type=general Degree=comparative Gender=feminine Number=singular Case=nominative"); + InsertMsd( + "Agcfsg", + "pridevnik vrsta=splošni stopnja=primernik spol=ženski število=ednina sklon=rodilnik", + "Adjective Type=general Degree=comparative Gender=feminine Number=singular Case=genitive"); + InsertMsd( + "Agcfsd", + "pridevnik vrsta=splošni stopnja=primernik spol=ženski število=ednina sklon=dajalnik", + "Adjective Type=general Degree=comparative Gender=feminine Number=singular Case=dative"); + InsertMsd( + "Agcfsa", + "pridevnik vrsta=splošni stopnja=primernik spol=ženski število=ednina sklon=tožilnik", + "Adjective Type=general Degree=comparative Gender=feminine Number=singular Case=accusative"); + InsertMsd( + "Agcfsl", + "pridevnik vrsta=splošni stopnja=primernik spol=ženski število=ednina sklon=mestnik", + "Adjective Type=general Degree=comparative Gender=feminine Number=singular Case=locative"); + InsertMsd( + "Agcfsi", + "pridevnik vrsta=splošni stopnja=primernik spol=ženski število=ednina sklon=orodnik", + "Adjective Type=general Degree=comparative Gender=feminine Number=singular Case=instrumental"); + InsertMsd( + "Agcfdn", + "pridevnik vrsta=splošni stopnja=primernik spol=ženski število=dvojina sklon=imenovalnik", + "Adjective Type=general Degree=comparative Gender=feminine Number=dual Case=nominative"); + InsertMsd( + "Agcfdg", + "pridevnik vrsta=splošni stopnja=primernik spol=ženski število=dvojina sklon=rodilnik", + "Adjective Type=general Degree=comparative Gender=feminine Number=dual Case=genitive"); + InsertMsd( + "Agcfdd", + "pridevnik vrsta=splošni stopnja=primernik spol=ženski število=dvojina sklon=dajalnik", + "Adjective Type=general Degree=comparative Gender=feminine Number=dual Case=dative"); + InsertMsd( + "Agcfda", + "pridevnik vrsta=splošni stopnja=primernik spol=ženski število=dvojina sklon=tožilnik", + "Adjective Type=general Degree=comparative Gender=feminine Number=dual Case=accusative"); + InsertMsd( + "Agcfdl", + "pridevnik vrsta=splošni stopnja=primernik spol=ženski število=dvojina sklon=mestnik", + "Adjective Type=general Degree=comparative Gender=feminine Number=dual Case=locative"); + InsertMsd( + "Agcfdi", + "pridevnik vrsta=splošni stopnja=primernik spol=ženski število=dvojina sklon=orodnik", + "Adjective Type=general Degree=comparative Gender=feminine Number=dual Case=instrumental"); + InsertMsd( + "Agcfpn", + "pridevnik vrsta=splošni stopnja=primernik spol=ženski število=množina sklon=imenovalnik", + "Adjective Type=general Degree=comparative Gender=feminine Number=plural Case=nominative"); + InsertMsd( + "Agcfpg", + "pridevnik vrsta=splošni stopnja=primernik spol=ženski število=množina sklon=rodilnik", + "Adjective Type=general Degree=comparative Gender=feminine Number=plural Case=genitive"); + InsertMsd( + "Agcfpd", + "pridevnik vrsta=splošni stopnja=primernik spol=ženski število=množina sklon=dajalnik", + "Adjective Type=general Degree=comparative Gender=feminine Number=plural Case=dative"); + InsertMsd( + "Agcfpa", + "pridevnik vrsta=splošni stopnja=primernik spol=ženski število=množina sklon=tožilnik", + "Adjective Type=general Degree=comparative Gender=feminine Number=plural Case=accusative"); + InsertMsd( + "Agcfpl", + "pridevnik vrsta=splošni stopnja=primernik spol=ženski število=množina sklon=mestnik", + "Adjective Type=general Degree=comparative Gender=feminine Number=plural Case=locative"); + InsertMsd( + "Agcfpi", + "pridevnik vrsta=splošni stopnja=primernik spol=ženski število=množina sklon=orodnik", + "Adjective Type=general Degree=comparative Gender=feminine Number=plural Case=instrumental"); + InsertMsd( + "Agcnsn", + "pridevnik vrsta=splošni stopnja=primernik spol=srednji število=ednina sklon=imenovalnik", + "Adjective Type=general Degree=comparative Gender=neuter Number=singular Case=nominative"); + InsertMsd( + "Agcnsg", + "pridevnik vrsta=splošni stopnja=primernik spol=srednji število=ednina sklon=rodilnik", + "Adjective Type=general Degree=comparative Gender=neuter Number=singular Case=genitive"); + InsertMsd( + "Agcnsd", + "pridevnik vrsta=splošni stopnja=primernik spol=srednji število=ednina sklon=dajalnik", + "Adjective Type=general Degree=comparative Gender=neuter Number=singular Case=dative"); + InsertMsd( + "Agcnsa", + "pridevnik vrsta=splošni stopnja=primernik spol=srednji število=ednina sklon=tožilnik", + "Adjective Type=general Degree=comparative Gender=neuter Number=singular Case=accusative"); + InsertMsd( + "Agcnsl", + "pridevnik vrsta=splošni stopnja=primernik spol=srednji število=ednina sklon=mestnik", + "Adjective Type=general Degree=comparative Gender=neuter Number=singular Case=locative"); + InsertMsd( + "Agcnsi", + "pridevnik vrsta=splošni stopnja=primernik spol=srednji število=ednina sklon=orodnik", + "Adjective Type=general Degree=comparative Gender=neuter Number=singular Case=instrumental"); + InsertMsd( + "Agcndn", + "pridevnik vrsta=splošni stopnja=primernik spol=srednji število=dvojina sklon=imenovalnik", + "Adjective Type=general Degree=comparative Gender=neuter Number=dual Case=nominative"); + InsertMsd( + "Agcndg", + "pridevnik vrsta=splošni stopnja=primernik spol=srednji število=dvojina sklon=rodilnik", + "Adjective Type=general Degree=comparative Gender=neuter Number=dual Case=genitive"); + InsertMsd( + "Agcndd", + "pridevnik vrsta=splošni stopnja=primernik spol=srednji število=dvojina sklon=dajalnik", + "Adjective Type=general Degree=comparative Gender=neuter Number=dual Case=dative"); + InsertMsd( + "Agcnda", + "pridevnik vrsta=splošni stopnja=primernik spol=srednji število=dvojina sklon=tožilnik", + "Adjective Type=general Degree=comparative Gender=neuter Number=dual Case=accusative"); + InsertMsd( + "Agcndl", + "pridevnik vrsta=splošni stopnja=primernik spol=srednji število=dvojina sklon=mestnik", + "Adjective Type=general Degree=comparative Gender=neuter Number=dual Case=locative"); + InsertMsd( + "Agcndi", + "pridevnik vrsta=splošni stopnja=primernik spol=srednji število=dvojina sklon=orodnik", + "Adjective Type=general Degree=comparative Gender=neuter Number=dual Case=instrumental"); + InsertMsd( + "Agcnpn", + "pridevnik vrsta=splošni stopnja=primernik spol=srednji število=množina sklon=imenovalnik", + "Adjective Type=general Degree=comparative Gender=neuter Number=plural Case=nominative"); + InsertMsd( + "Agcnpg", + "pridevnik vrsta=splošni stopnja=primernik spol=srednji število=množina sklon=rodilnik", + "Adjective Type=general Degree=comparative Gender=neuter Number=plural Case=genitive"); + InsertMsd( + "Agcnpd", + "pridevnik vrsta=splošni stopnja=primernik spol=srednji število=množina sklon=dajalnik", + "Adjective Type=general Degree=comparative Gender=neuter Number=plural Case=dative"); + InsertMsd( + "Agcnpa", + "pridevnik vrsta=splošni stopnja=primernik spol=srednji število=množina sklon=tožilnik", + "Adjective Type=general Degree=comparative Gender=neuter Number=plural Case=accusative"); + InsertMsd( + "Agcnpl", + "pridevnik vrsta=splošni stopnja=primernik spol=srednji število=množina sklon=mestnik", + "Adjective Type=general Degree=comparative Gender=neuter Number=plural Case=locative"); + InsertMsd( + "Agcnpi", + "pridevnik vrsta=splošni stopnja=primernik spol=srednji število=množina sklon=orodnik", + "Adjective Type=general Degree=comparative Gender=neuter Number=plural Case=instrumental"); + InsertMsd( + "Agsmsny", + "pridevnik vrsta=splošni stopnja=presežnik spol=moški število=ednina sklon=imenovalnik dolocnost=da", + "Adjective Type=general Degree=superlative Gender=masculine Number=singular Case=nominative Definiteness=yes"); + InsertMsd( + "Agsmsg", + "pridevnik vrsta=splošni stopnja=presežnik spol=moški število=ednina sklon=rodilnik", + "Adjective Type=general Degree=superlative Gender=masculine Number=singular Case=genitive"); + InsertMsd( + "Agsmsd", + "pridevnik vrsta=splošni stopnja=presežnik spol=moški število=ednina sklon=dajalnik", + "Adjective Type=general Degree=superlative Gender=masculine Number=singular Case=dative"); + InsertMsd( + "Agsmsa", + "pridevnik vrsta=splošni stopnja=presežnik spol=moški število=ednina sklon=tožilnik", + "Adjective Type=general Degree=superlative Gender=masculine Number=singular Case=accusative"); + InsertMsd( + "Agsmsay", + "pridevnik vrsta=splošni stopnja=presežnik spol=moški število=ednina sklon=tožilnik dolocnost=da", + "Adjective Type=general Degree=superlative Gender=masculine Number=singular Case=accusative Definiteness=yes"); + InsertMsd( + "Agsmsl", + "pridevnik vrsta=splošni stopnja=presežnik spol=moški število=ednina sklon=mestnik", + "Adjective Type=general Degree=superlative Gender=masculine Number=singular Case=locative"); + InsertMsd( + "Agsmsi", + "pridevnik vrsta=splošni stopnja=presežnik spol=moški število=ednina sklon=orodnik", + "Adjective Type=general Degree=superlative Gender=masculine Number=singular Case=instrumental"); + InsertMsd( + "Agsmdn", + "pridevnik vrsta=splošni stopnja=presežnik spol=moški število=dvojina sklon=imenovalnik", + "Adjective Type=general Degree=superlative Gender=masculine Number=dual Case=nominative"); + InsertMsd( + "Agsmdg", + "pridevnik vrsta=splošni stopnja=presežnik spol=moški število=dvojina sklon=rodilnik", + "Adjective Type=general Degree=superlative Gender=masculine Number=dual Case=genitive"); + InsertMsd( + "Agsmdd", + "pridevnik vrsta=splošni stopnja=presežnik spol=moški število=dvojina sklon=dajalnik", + "Adjective Type=general Degree=superlative Gender=masculine Number=dual Case=dative"); + InsertMsd( + "Agsmda", + "pridevnik vrsta=splošni stopnja=presežnik spol=moški število=dvojina sklon=tožilnik", + "Adjective Type=general Degree=superlative Gender=masculine Number=dual Case=accusative"); + InsertMsd( + "Agsmdl", + "pridevnik vrsta=splošni stopnja=presežnik spol=moški število=dvojina sklon=mestnik", + "Adjective Type=general Degree=superlative Gender=masculine Number=dual Case=locative"); + InsertMsd( + "Agsmdi", + "pridevnik vrsta=splošni stopnja=presežnik spol=moški število=dvojina sklon=orodnik", + "Adjective Type=general Degree=superlative Gender=masculine Number=dual Case=instrumental"); + InsertMsd( + "Agsmpn", + "pridevnik vrsta=splošni stopnja=presežnik spol=moški število=množina sklon=imenovalnik", + "Adjective Type=general Degree=superlative Gender=masculine Number=plural Case=nominative"); + InsertMsd( + "Agsmpg", + "pridevnik vrsta=splošni stopnja=presežnik spol=moški število=množina sklon=rodilnik", + "Adjective Type=general Degree=superlative Gender=masculine Number=plural Case=genitive"); + InsertMsd( + "Agsmpd", + "pridevnik vrsta=splošni stopnja=presežnik spol=moški število=množina sklon=dajalnik", + "Adjective Type=general Degree=superlative Gender=masculine Number=plural Case=dative"); + InsertMsd( + "Agsmpa", + "pridevnik vrsta=splošni stopnja=presežnik spol=moški število=množina sklon=tožilnik", + "Adjective Type=general Degree=superlative Gender=masculine Number=plural Case=accusative"); + InsertMsd( + "Agsmpl", + "pridevnik vrsta=splošni stopnja=presežnik spol=moški število=množina sklon=mestnik", + "Adjective Type=general Degree=superlative Gender=masculine Number=plural Case=locative"); + InsertMsd( + "Agsmpi", + "pridevnik vrsta=splošni stopnja=presežnik spol=moški število=množina sklon=orodnik", + "Adjective Type=general Degree=superlative Gender=masculine Number=plural Case=instrumental"); + InsertMsd( + "Agsfsn", + "pridevnik vrsta=splošni stopnja=presežnik spol=ženski število=ednina sklon=imenovalnik", + "Adjective Type=general Degree=superlative Gender=feminine Number=singular Case=nominative"); + InsertMsd( + "Agsfsg", + "pridevnik vrsta=splošni stopnja=presežnik spol=ženski število=ednina sklon=rodilnik", + "Adjective Type=general Degree=superlative Gender=feminine Number=singular Case=genitive"); + InsertMsd( + "Agsfsd", + "pridevnik vrsta=splošni stopnja=presežnik spol=ženski število=ednina sklon=dajalnik", + "Adjective Type=general Degree=superlative Gender=feminine Number=singular Case=dative"); + InsertMsd( + "Agsfsa", + "pridevnik vrsta=splošni stopnja=presežnik spol=ženski število=ednina sklon=tožilnik", + "Adjective Type=general Degree=superlative Gender=feminine Number=singular Case=accusative"); + InsertMsd( + "Agsfsl", + "pridevnik vrsta=splošni stopnja=presežnik spol=ženski število=ednina sklon=mestnik", + "Adjective Type=general Degree=superlative Gender=feminine Number=singular Case=locative"); + InsertMsd( + "Agsfsi", + "pridevnik vrsta=splošni stopnja=presežnik spol=ženski število=ednina sklon=orodnik", + "Adjective Type=general Degree=superlative Gender=feminine Number=singular Case=instrumental"); + InsertMsd( + "Agsfdn", + "pridevnik vrsta=splošni stopnja=presežnik spol=ženski število=dvojina sklon=imenovalnik", + "Adjective Type=general Degree=superlative Gender=feminine Number=dual Case=nominative"); + InsertMsd( + "Agsfdg", + "pridevnik vrsta=splošni stopnja=presežnik spol=ženski število=dvojina sklon=rodilnik", + "Adjective Type=general Degree=superlative Gender=feminine Number=dual Case=genitive"); + InsertMsd( + "Agsfdd", + "pridevnik vrsta=splošni stopnja=presežnik spol=ženski število=dvojina sklon=dajalnik", + "Adjective Type=general Degree=superlative Gender=feminine Number=dual Case=dative"); + InsertMsd( + "Agsfda", + "pridevnik vrsta=splošni stopnja=presežnik spol=ženski število=dvojina sklon=tožilnik", + "Adjective Type=general Degree=superlative Gender=feminine Number=dual Case=accusative"); + InsertMsd( + "Agsfdl", + "pridevnik vrsta=splošni stopnja=presežnik spol=ženski število=dvojina sklon=mestnik", + "Adjective Type=general Degree=superlative Gender=feminine Number=dual Case=locative"); + InsertMsd( + "Agsfdi", + "pridevnik vrsta=splošni stopnja=presežnik spol=ženski število=dvojina sklon=orodnik", + "Adjective Type=general Degree=superlative Gender=feminine Number=dual Case=instrumental"); + InsertMsd( + "Agsfpn", + "pridevnik vrsta=splošni stopnja=presežnik spol=ženski število=množina sklon=imenovalnik", + "Adjective Type=general Degree=superlative Gender=feminine Number=plural Case=nominative"); + InsertMsd( + "Agsfpg", + "pridevnik vrsta=splošni stopnja=presežnik spol=ženski število=množina sklon=rodilnik", + "Adjective Type=general Degree=superlative Gender=feminine Number=plural Case=genitive"); + InsertMsd( + "Agsfpd", + "pridevnik vrsta=splošni stopnja=presežnik spol=ženski število=množina sklon=dajalnik", + "Adjective Type=general Degree=superlative Gender=feminine Number=plural Case=dative"); + InsertMsd( + "Agsfpa", + "pridevnik vrsta=splošni stopnja=presežnik spol=ženski število=množina sklon=tožilnik", + "Adjective Type=general Degree=superlative Gender=feminine Number=plural Case=accusative"); + InsertMsd( + "Agsfpl", + "pridevnik vrsta=splošni stopnja=presežnik spol=ženski število=množina sklon=mestnik", + "Adjective Type=general Degree=superlative Gender=feminine Number=plural Case=locative"); + InsertMsd( + "Agsfpi", + "pridevnik vrsta=splošni stopnja=presežnik spol=ženski število=množina sklon=orodnik", + "Adjective Type=general Degree=superlative Gender=feminine Number=plural Case=instrumental"); + InsertMsd( + "Agsnsn", + "pridevnik vrsta=splošni stopnja=presežnik spol=srednji število=ednina sklon=imenovalnik", + "Adjective Type=general Degree=superlative Gender=neuter Number=singular Case=nominative"); + InsertMsd( + "Agsnsg", + "pridevnik vrsta=splošni stopnja=presežnik spol=srednji število=ednina sklon=rodilnik", + "Adjective Type=general Degree=superlative Gender=neuter Number=singular Case=genitive"); + InsertMsd( + "Agsnsd", + "pridevnik vrsta=splošni stopnja=presežnik spol=srednji število=ednina sklon=dajalnik", + "Adjective Type=general Degree=superlative Gender=neuter Number=singular Case=dative"); + InsertMsd( + "Agsnsa", + "pridevnik vrsta=splošni stopnja=presežnik spol=srednji število=ednina sklon=tožilnik", + "Adjective Type=general Degree=superlative Gender=neuter Number=singular Case=accusative"); + InsertMsd( + "Agsnsl", + "pridevnik vrsta=splošni stopnja=presežnik spol=srednji število=ednina sklon=mestnik", + "Adjective Type=general Degree=superlative Gender=neuter Number=singular Case=locative"); + InsertMsd( + "Agsnsi", + "pridevnik vrsta=splošni stopnja=presežnik spol=srednji število=ednina sklon=orodnik", + "Adjective Type=general Degree=superlative Gender=neuter Number=singular Case=instrumental"); + InsertMsd( + "Agsndn", + "pridevnik vrsta=splošni stopnja=presežnik spol=srednji število=dvojina sklon=imenovalnik", + "Adjective Type=general Degree=superlative Gender=neuter Number=dual Case=nominative"); + InsertMsd( + "Agsndg", + "pridevnik vrsta=splošni stopnja=presežnik spol=srednji število=dvojina sklon=rodilnik", + "Adjective Type=general Degree=superlative Gender=neuter Number=dual Case=genitive"); + InsertMsd( + "Agsndd", + "pridevnik vrsta=splošni stopnja=presežnik spol=srednji število=dvojina sklon=dajalnik", + "Adjective Type=general Degree=superlative Gender=neuter Number=dual Case=dative"); + InsertMsd( + "Agsnda", + "pridevnik vrsta=splošni stopnja=presežnik spol=srednji število=dvojina sklon=tožilnik", + "Adjective Type=general Degree=superlative Gender=neuter Number=dual Case=accusative"); + InsertMsd( + "Agsndl", + "pridevnik vrsta=splošni stopnja=presežnik spol=srednji število=dvojina sklon=mestnik", + "Adjective Type=general Degree=superlative Gender=neuter Number=dual Case=locative"); + InsertMsd( + "Agsndi", + "pridevnik vrsta=splošni stopnja=presežnik spol=srednji število=dvojina sklon=orodnik", + "Adjective Type=general Degree=superlative Gender=neuter Number=dual Case=instrumental"); + InsertMsd( + "Agsnpn", + "pridevnik vrsta=splošni stopnja=presežnik spol=srednji število=množina sklon=imenovalnik", + "Adjective Type=general Degree=superlative Gender=neuter Number=plural Case=nominative"); + InsertMsd( + "Agsnpg", + "pridevnik vrsta=splošni stopnja=presežnik spol=srednji število=množina sklon=rodilnik", + "Adjective Type=general Degree=superlative Gender=neuter Number=plural Case=genitive"); + InsertMsd( + "Agsnpd", + "pridevnik vrsta=splošni stopnja=presežnik spol=srednji število=množina sklon=dajalnik", + "Adjective Type=general Degree=superlative Gender=neuter Number=plural Case=dative"); + InsertMsd( + "Agsnpa", + "pridevnik vrsta=splošni stopnja=presežnik spol=srednji število=množina sklon=tožilnik", + "Adjective Type=general Degree=superlative Gender=neuter Number=plural Case=accusative"); + InsertMsd( + "Agsnpl", + "pridevnik vrsta=splošni stopnja=presežnik spol=srednji število=množina sklon=mestnik", + "Adjective Type=general Degree=superlative Gender=neuter Number=plural Case=locative"); + InsertMsd( + "Agsnpi", + "pridevnik vrsta=splošni stopnja=presežnik spol=srednji število=množina sklon=orodnik", + "Adjective Type=general Degree=superlative Gender=neuter Number=plural Case=instrumental"); + InsertMsd( + "Aspmsnn", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=moški število=ednina sklon=imenovalnik dolocnost=ne", + "Adjective Type=possessive Degree=positive Gender=masculine Number=singular Case=nominative Definiteness=no"); + InsertMsd( + "Aspmsg", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=moški število=ednina sklon=rodilnik", + "Adjective Type=possessive Degree=positive Gender=masculine Number=singular Case=genitive"); + InsertMsd( + "Aspmsd", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=moški število=ednina sklon=dajalnik", + "Adjective Type=possessive Degree=positive Gender=masculine Number=singular Case=dative"); + InsertMsd( + "Aspmsa", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=moški število=ednina sklon=tožilnik", + "Adjective Type=possessive Degree=positive Gender=masculine Number=singular Case=accusative"); + InsertMsd( + "Aspmsan", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=moški število=ednina sklon=tožilnik dolocnost=ne", + "Adjective Type=possessive Degree=positive Gender=masculine Number=singular Case=accusative Definiteness=no"); + InsertMsd( + "Aspmsl", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=moški število=ednina sklon=mestnik", + "Adjective Type=possessive Degree=positive Gender=masculine Number=singular Case=locative"); + InsertMsd( + "Aspmsi", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=moški število=ednina sklon=orodnik", + "Adjective Type=possessive Degree=positive Gender=masculine Number=singular Case=instrumental"); + InsertMsd( + "Aspmdn", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=moški število=dvojina sklon=imenovalnik", + "Adjective Type=possessive Degree=positive Gender=masculine Number=dual Case=nominative"); + InsertMsd( + "Aspmdg", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=moški število=dvojina sklon=rodilnik", + "Adjective Type=possessive Degree=positive Gender=masculine Number=dual Case=genitive"); + InsertMsd( + "Aspmdd", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=moški število=dvojina sklon=dajalnik", + "Adjective Type=possessive Degree=positive Gender=masculine Number=dual Case=dative"); + InsertMsd( + "Aspmda", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=moški število=dvojina sklon=tožilnik", + "Adjective Type=possessive Degree=positive Gender=masculine Number=dual Case=accusative"); + InsertMsd( + "Aspmdl", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=moški število=dvojina sklon=mestnik", + "Adjective Type=possessive Degree=positive Gender=masculine Number=dual Case=locative"); + InsertMsd( + "Aspmdi", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=moški število=dvojina sklon=orodnik", + "Adjective Type=possessive Degree=positive Gender=masculine Number=dual Case=instrumental"); + InsertMsd( + "Aspmpn", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=moški število=množina sklon=imenovalnik", + "Adjective Type=possessive Degree=positive Gender=masculine Number=plural Case=nominative"); + InsertMsd( + "Aspmpg", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=moški število=množina sklon=rodilnik", + "Adjective Type=possessive Degree=positive Gender=masculine Number=plural Case=genitive"); + InsertMsd( + "Aspmpd", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=moški število=množina sklon=dajalnik", + "Adjective Type=possessive Degree=positive Gender=masculine Number=plural Case=dative"); + InsertMsd( + "Aspmpa", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=moški število=množina sklon=tožilnik", + "Adjective Type=possessive Degree=positive Gender=masculine Number=plural Case=accusative"); + InsertMsd( + "Aspmpl", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=moški število=množina sklon=mestnik", + "Adjective Type=possessive Degree=positive Gender=masculine Number=plural Case=locative"); + InsertMsd( + "Aspmpi", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=moški število=množina sklon=orodnik", + "Adjective Type=possessive Degree=positive Gender=masculine Number=plural Case=instrumental"); + InsertMsd( + "Aspfsn", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=ženski število=ednina sklon=imenovalnik", + "Adjective Type=possessive Degree=positive Gender=feminine Number=singular Case=nominative"); + InsertMsd( + "Aspfsg", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=ženski število=ednina sklon=rodilnik", + "Adjective Type=possessive Degree=positive Gender=feminine Number=singular Case=genitive"); + InsertMsd( + "Aspfsd", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=ženski število=ednina sklon=dajalnik", + "Adjective Type=possessive Degree=positive Gender=feminine Number=singular Case=dative"); + InsertMsd( + "Aspfsa", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=ženski število=ednina sklon=tožilnik", + "Adjective Type=possessive Degree=positive Gender=feminine Number=singular Case=accusative"); + InsertMsd( + "Aspfsl", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=ženski število=ednina sklon=mestnik", + "Adjective Type=possessive Degree=positive Gender=feminine Number=singular Case=locative"); + InsertMsd( + "Aspfsi", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=ženski število=ednina sklon=orodnik", + "Adjective Type=possessive Degree=positive Gender=feminine Number=singular Case=instrumental"); + InsertMsd( + "Aspfdn", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=ženski število=dvojina sklon=imenovalnik", + "Adjective Type=possessive Degree=positive Gender=feminine Number=dual Case=nominative"); + InsertMsd( + "Aspfdg", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=ženski število=dvojina sklon=rodilnik", + "Adjective Type=possessive Degree=positive Gender=feminine Number=dual Case=genitive"); + InsertMsd( + "Aspfdd", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=ženski število=dvojina sklon=dajalnik", + "Adjective Type=possessive Degree=positive Gender=feminine Number=dual Case=dative"); + InsertMsd( + "Aspfda", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=ženski število=dvojina sklon=tožilnik", + "Adjective Type=possessive Degree=positive Gender=feminine Number=dual Case=accusative"); + InsertMsd( + "Aspfdl", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=ženski število=dvojina sklon=mestnik", + "Adjective Type=possessive Degree=positive Gender=feminine Number=dual Case=locative"); + InsertMsd( + "Aspfdi", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=ženski število=dvojina sklon=orodnik", + "Adjective Type=possessive Degree=positive Gender=feminine Number=dual Case=instrumental"); + InsertMsd( + "Aspfpn", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=ženski število=množina sklon=imenovalnik", + "Adjective Type=possessive Degree=positive Gender=feminine Number=plural Case=nominative"); + InsertMsd( + "Aspfpg", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=ženski število=množina sklon=rodilnik", + "Adjective Type=possessive Degree=positive Gender=feminine Number=plural Case=genitive"); + InsertMsd( + "Aspfpd", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=ženski število=množina sklon=dajalnik", + "Adjective Type=possessive Degree=positive Gender=feminine Number=plural Case=dative"); + InsertMsd( + "Aspfpa", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=ženski število=množina sklon=tožilnik", + "Adjective Type=possessive Degree=positive Gender=feminine Number=plural Case=accusative"); + InsertMsd( + "Aspfpl", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=ženski število=množina sklon=mestnik", + "Adjective Type=possessive Degree=positive Gender=feminine Number=plural Case=locative"); + InsertMsd( + "Aspfpi", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=ženski število=množina sklon=orodnik", + "Adjective Type=possessive Degree=positive Gender=feminine Number=plural Case=instrumental"); + InsertMsd( + "Aspnsn", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=srednji število=ednina sklon=imenovalnik", + "Adjective Type=possessive Degree=positive Gender=neuter Number=singular Case=nominative"); + InsertMsd( + "Aspnsg", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=srednji število=ednina sklon=rodilnik", + "Adjective Type=possessive Degree=positive Gender=neuter Number=singular Case=genitive"); + InsertMsd( + "Aspnsd", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=srednji število=ednina sklon=dajalnik", + "Adjective Type=possessive Degree=positive Gender=neuter Number=singular Case=dative"); + InsertMsd( + "Aspnsa", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=srednji število=ednina sklon=tožilnik", + "Adjective Type=possessive Degree=positive Gender=neuter Number=singular Case=accusative"); + InsertMsd( + "Aspnsl", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=srednji število=ednina sklon=mestnik", + "Adjective Type=possessive Degree=positive Gender=neuter Number=singular Case=locative"); + InsertMsd( + "Aspnsi", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=srednji število=ednina sklon=orodnik", + "Adjective Type=possessive Degree=positive Gender=neuter Number=singular Case=instrumental"); + InsertMsd( + "Aspndn", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=srednji število=dvojina sklon=imenovalnik", + "Adjective Type=possessive Degree=positive Gender=neuter Number=dual Case=nominative"); + InsertMsd( + "Aspndg", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=srednji število=dvojina sklon=rodilnik", + "Adjective Type=possessive Degree=positive Gender=neuter Number=dual Case=genitive"); + InsertMsd( + "Aspndd", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=srednji število=dvojina sklon=dajalnik", + "Adjective Type=possessive Degree=positive Gender=neuter Number=dual Case=dative"); + InsertMsd( + "Aspnda", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=srednji število=dvojina sklon=tožilnik", + "Adjective Type=possessive Degree=positive Gender=neuter Number=dual Case=accusative"); + InsertMsd( + "Aspndl", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=srednji število=dvojina sklon=mestnik", + "Adjective Type=possessive Degree=positive Gender=neuter Number=dual Case=locative"); + InsertMsd( + "Aspndi", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=srednji število=dvojina sklon=orodnik", + "Adjective Type=possessive Degree=positive Gender=neuter Number=dual Case=instrumental"); + InsertMsd( + "Aspnpn", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=srednji število=množina sklon=imenovalnik", + "Adjective Type=possessive Degree=positive Gender=neuter Number=plural Case=nominative"); + InsertMsd( + "Aspnpg", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=srednji število=množina sklon=rodilnik", + "Adjective Type=possessive Degree=positive Gender=neuter Number=plural Case=genitive"); + InsertMsd( + "Aspnpd", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=srednji število=množina sklon=dajalnik", + "Adjective Type=possessive Degree=positive Gender=neuter Number=plural Case=dative"); + InsertMsd( + "Aspnpa", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=srednji število=množina sklon=tožilnik", + "Adjective Type=possessive Degree=positive Gender=neuter Number=plural Case=accusative"); + InsertMsd( + "Aspnpl", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=srednji število=množina sklon=mestnik", + "Adjective Type=possessive Degree=positive Gender=neuter Number=plural Case=locative"); + InsertMsd( + "Aspnpi", + "pridevnik vrsta=svojilni stopnja=nedoloceno spol=srednji število=množina sklon=orodnik", + "Adjective Type=possessive Degree=positive Gender=neuter Number=plural Case=instrumental"); + InsertMsd( + "Appmsnn", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=moški število=ednina sklon=imenovalnik dolocnost=ne", + "Adjective Type=participle Degree=positive Gender=masculine Number=singular Case=nominative Definiteness=no"); + InsertMsd( + "Appmsny", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=moški število=ednina sklon=imenovalnik dolocnost=da", + "Adjective Type=participle Degree=positive Gender=masculine Number=singular Case=nominative Definiteness=yes"); + InsertMsd( + "Appmsg", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=moški število=ednina sklon=rodilnik", + "Adjective Type=participle Degree=positive Gender=masculine Number=singular Case=genitive"); + InsertMsd( + "Appmsd", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=moški število=ednina sklon=dajalnik", + "Adjective Type=participle Degree=positive Gender=masculine Number=singular Case=dative"); + InsertMsd( + "Appmsa", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=moški število=ednina sklon=tožilnik", + "Adjective Type=participle Degree=positive Gender=masculine Number=singular Case=accusative"); + InsertMsd( + "Appmsan", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=moški število=ednina sklon=tožilnik dolocnost=ne", + "Adjective Type=participle Degree=positive Gender=masculine Number=singular Case=accusative Definiteness=no"); + InsertMsd( + "Appmsay", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=moški število=ednina sklon=tožilnik dolocnost=da", + "Adjective Type=participle Degree=positive Gender=masculine Number=singular Case=accusative Definiteness=yes"); + InsertMsd( + "Appmsl", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=moški število=ednina sklon=mestnik", + "Adjective Type=participle Degree=positive Gender=masculine Number=singular Case=locative"); + InsertMsd( + "Appmsi", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=moški število=ednina sklon=orodnik", + "Adjective Type=participle Degree=positive Gender=masculine Number=singular Case=instrumental"); + InsertMsd( + "Appmdn", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=moški število=dvojina sklon=imenovalnik", + "Adjective Type=participle Degree=positive Gender=masculine Number=dual Case=nominative"); + InsertMsd( + "Appmdg", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=moški število=dvojina sklon=rodilnik", + "Adjective Type=participle Degree=positive Gender=masculine Number=dual Case=genitive"); + InsertMsd( + "Appmdd", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=moški število=dvojina sklon=dajalnik", + "Adjective Type=participle Degree=positive Gender=masculine Number=dual Case=dative"); + InsertMsd( + "Appmda", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=moški število=dvojina sklon=tožilnik", + "Adjective Type=participle Degree=positive Gender=masculine Number=dual Case=accusative"); + InsertMsd( + "Appmdl", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=moški število=dvojina sklon=mestnik", + "Adjective Type=participle Degree=positive Gender=masculine Number=dual Case=locative"); + InsertMsd( + "Appmdi", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=moški število=dvojina sklon=orodnik", + "Adjective Type=participle Degree=positive Gender=masculine Number=dual Case=instrumental"); + InsertMsd( + "Appmpn", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=moški število=množina sklon=imenovalnik", + "Adjective Type=participle Degree=positive Gender=masculine Number=plural Case=nominative"); + InsertMsd( + "Appmpg", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=moški število=množina sklon=rodilnik", + "Adjective Type=participle Degree=positive Gender=masculine Number=plural Case=genitive"); + InsertMsd( + "Appmpd", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=moški število=množina sklon=dajalnik", + "Adjective Type=participle Degree=positive Gender=masculine Number=plural Case=dative"); + InsertMsd( + "Appmpa", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=moški število=množina sklon=tožilnik", + "Adjective Type=participle Degree=positive Gender=masculine Number=plural Case=accusative"); + InsertMsd( + "Appmpl", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=moški število=množina sklon=mestnik", + "Adjective Type=participle Degree=positive Gender=masculine Number=plural Case=locative"); + InsertMsd( + "Appmpi", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=moški število=množina sklon=orodnik", + "Adjective Type=participle Degree=positive Gender=masculine Number=plural Case=instrumental"); + InsertMsd( + "Appfsn", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=ženski število=ednina sklon=imenovalnik", + "Adjective Type=participle Degree=positive Gender=feminine Number=singular Case=nominative"); + InsertMsd( + "Appfsg", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=ženski število=ednina sklon=rodilnik", + "Adjective Type=participle Degree=positive Gender=feminine Number=singular Case=genitive"); + InsertMsd( + "Appfsd", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=ženski število=ednina sklon=dajalnik", + "Adjective Type=participle Degree=positive Gender=feminine Number=singular Case=dative"); + InsertMsd( + "Appfsa", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=ženski število=ednina sklon=tožilnik", + "Adjective Type=participle Degree=positive Gender=feminine Number=singular Case=accusative"); + InsertMsd( + "Appfsl", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=ženski število=ednina sklon=mestnik", + "Adjective Type=participle Degree=positive Gender=feminine Number=singular Case=locative"); + InsertMsd( + "Appfsi", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=ženski število=ednina sklon=orodnik", + "Adjective Type=participle Degree=positive Gender=feminine Number=singular Case=instrumental"); + InsertMsd( + "Appfdn", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=ženski število=dvojina sklon=imenovalnik", + "Adjective Type=participle Degree=positive Gender=feminine Number=dual Case=nominative"); + InsertMsd( + "Appfdg", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=ženski število=dvojina sklon=rodilnik", + "Adjective Type=participle Degree=positive Gender=feminine Number=dual Case=genitive"); + InsertMsd( + "Appfdd", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=ženski število=dvojina sklon=dajalnik", + "Adjective Type=participle Degree=positive Gender=feminine Number=dual Case=dative"); + InsertMsd( + "Appfda", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=ženski število=dvojina sklon=tožilnik", + "Adjective Type=participle Degree=positive Gender=feminine Number=dual Case=accusative"); + InsertMsd( + "Appfdl", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=ženski število=dvojina sklon=mestnik", + "Adjective Type=participle Degree=positive Gender=feminine Number=dual Case=locative"); + InsertMsd( + "Appfdi", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=ženski število=dvojina sklon=orodnik", + "Adjective Type=participle Degree=positive Gender=feminine Number=dual Case=instrumental"); + InsertMsd( + "Appfpn", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=ženski število=množina sklon=imenovalnik", + "Adjective Type=participle Degree=positive Gender=feminine Number=plural Case=nominative"); + InsertMsd( + "Appfpg", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=ženski število=množina sklon=rodilnik", + "Adjective Type=participle Degree=positive Gender=feminine Number=plural Case=genitive"); + InsertMsd( + "Appfpd", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=ženski število=množina sklon=dajalnik", + "Adjective Type=participle Degree=positive Gender=feminine Number=plural Case=dative"); + InsertMsd( + "Appfpa", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=ženski število=množina sklon=tožilnik", + "Adjective Type=participle Degree=positive Gender=feminine Number=plural Case=accusative"); + InsertMsd( + "Appfpl", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=ženski število=množina sklon=mestnik", + "Adjective Type=participle Degree=positive Gender=feminine Number=plural Case=locative"); + InsertMsd( + "Appfpi", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=ženski število=množina sklon=orodnik", + "Adjective Type=participle Degree=positive Gender=feminine Number=plural Case=instrumental"); + InsertMsd( + "Appnsn", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=srednji število=ednina sklon=imenovalnik", + "Adjective Type=participle Degree=positive Gender=neuter Number=singular Case=nominative"); + InsertMsd( + "Appnsg", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=srednji število=ednina sklon=rodilnik", + "Adjective Type=participle Degree=positive Gender=neuter Number=singular Case=genitive"); + InsertMsd( + "Appnsd", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=srednji število=ednina sklon=dajalnik", + "Adjective Type=participle Degree=positive Gender=neuter Number=singular Case=dative"); + InsertMsd( + "Appnsa", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=srednji število=ednina sklon=tožilnik", + "Adjective Type=participle Degree=positive Gender=neuter Number=singular Case=accusative"); + InsertMsd( + "Appnsl", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=srednji število=ednina sklon=mestnik", + "Adjective Type=participle Degree=positive Gender=neuter Number=singular Case=locative"); + InsertMsd( + "Appnsi", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=srednji število=ednina sklon=orodnik", + "Adjective Type=participle Degree=positive Gender=neuter Number=singular Case=instrumental"); + InsertMsd( + "Appndn", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=srednji število=dvojina sklon=imenovalnik", + "Adjective Type=participle Degree=positive Gender=neuter Number=dual Case=nominative"); + InsertMsd( + "Appndg", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=srednji število=dvojina sklon=rodilnik", + "Adjective Type=participle Degree=positive Gender=neuter Number=dual Case=genitive"); + InsertMsd( + "Appndd", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=srednji število=dvojina sklon=dajalnik", + "Adjective Type=participle Degree=positive Gender=neuter Number=dual Case=dative"); + InsertMsd( + "Appnda", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=srednji število=dvojina sklon=tožilnik", + "Adjective Type=participle Degree=positive Gender=neuter Number=dual Case=accusative"); + InsertMsd( + "Appndl", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=srednji število=dvojina sklon=mestnik", + "Adjective Type=participle Degree=positive Gender=neuter Number=dual Case=locative"); + InsertMsd( + "Appndi", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=srednji število=dvojina sklon=orodnik", + "Adjective Type=participle Degree=positive Gender=neuter Number=dual Case=instrumental"); + InsertMsd( + "Appnpn", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=srednji število=množina sklon=imenovalnik", + "Adjective Type=participle Degree=positive Gender=neuter Number=plural Case=nominative"); + InsertMsd( + "Appnpg", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=srednji število=množina sklon=rodilnik", + "Adjective Type=participle Degree=positive Gender=neuter Number=plural Case=genitive"); + InsertMsd( + "Appnpd", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=srednji število=množina sklon=dajalnik", + "Adjective Type=participle Degree=positive Gender=neuter Number=plural Case=dative"); + InsertMsd( + "Appnpa", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=srednji število=množina sklon=tožilnik", + "Adjective Type=participle Degree=positive Gender=neuter Number=plural Case=accusative"); + InsertMsd( + "Appnpl", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=srednji število=množina sklon=mestnik", + "Adjective Type=participle Degree=positive Gender=neuter Number=plural Case=locative"); + InsertMsd( + "Appnpi", + "pridevnik vrsta=deležniški stopnja=nedoloceno spol=srednji število=množina sklon=orodnik", + "Adjective Type=participle Degree=positive Gender=neuter Number=plural Case=instrumental"); + InsertMsd("Rgp", "prislov vrsta=splošni stopnja=nedoloceno", "Adverb Type=general Degree=positive"); + InsertMsd("Rgc", "prislov vrsta=splošni stopnja=primernik", "Adverb Type=general Degree=comparative"); + InsertMsd("Rgs", "prislov vrsta=splošni stopnja=presežnik", "Adverb Type=general Degree=superlative"); + InsertMsd("Rr", "prislov vrsta=deležje", "Adverb Type=participle"); + InsertMsd( + "Pp1-sn", + "zaimek vrsta=osebni oseba=prva število=ednina sklon=imenovalnik", + "Pronoun Type=personal Person=first Number=singular Case=nominative"); + InsertMsd("Pp1-sg", "zaimek vrsta=osebni oseba=prva število=ednina sklon=rodilnik", "Pronoun Type=personal Person=first Number=singular Case=genitive"); + InsertMsd( + "Pp1-sg--y", + "zaimek vrsta=osebni oseba=prva število=ednina sklon=rodilnik naslonskost=kliticna", + "Pronoun Type=personal Person=first Number=singular Case=genitive Clitic=yes"); + InsertMsd("Pp1-sd", "zaimek vrsta=osebni oseba=prva število=ednina sklon=dajalnik", "Pronoun Type=personal Person=first Number=singular Case=dative"); + InsertMsd( + "Pp1-sd--y", + "zaimek vrsta=osebni oseba=prva število=ednina sklon=dajalnik naslonskost=kliticna", + "Pronoun Type=personal Person=first Number=singular Case=dative Clitic=yes"); + InsertMsd( + "Pp1-sa", + "zaimek vrsta=osebni oseba=prva število=ednina sklon=tožilnik", + "Pronoun Type=personal Person=first Number=singular Case=accusative"); + InsertMsd( + "Pp1-sa--y", + "zaimek vrsta=osebni oseba=prva število=ednina sklon=tožilnik naslonskost=kliticna", + "Pronoun Type=personal Person=first Number=singular Case=accusative Clitic=yes"); + InsertMsd( + "Pp1-sa--b", + "zaimek vrsta=osebni oseba=prva število=ednina sklon=tožilnik naslonskost=navezna", + "Pronoun Type=personal Person=first Number=singular Case=accusative Clitic=bound"); + InsertMsd("Pp1-sl", "zaimek vrsta=osebni oseba=prva število=ednina sklon=mestnik", "Pronoun Type=personal Person=first Number=singular Case=locative"); + InsertMsd( + "Pp1-si", + "zaimek vrsta=osebni oseba=prva število=ednina sklon=orodnik", + "Pronoun Type=personal Person=first Number=singular Case=instrumental"); + InsertMsd("Pp1-dg", "zaimek vrsta=osebni oseba=prva število=dvojina sklon=rodilnik", "Pronoun Type=personal Person=first Number=dual Case=genitive"); + InsertMsd("Pp1-dd", "zaimek vrsta=osebni oseba=prva število=dvojina sklon=dajalnik", "Pronoun Type=personal Person=first Number=dual Case=dative"); + InsertMsd("Pp1-da", "zaimek vrsta=osebni oseba=prva število=dvojina sklon=tožilnik", "Pronoun Type=personal Person=first Number=dual Case=accusative"); + InsertMsd("Pp1-dl", "zaimek vrsta=osebni oseba=prva število=dvojina sklon=mestnik", "Pronoun Type=personal Person=first Number=dual Case=locative"); + InsertMsd("Pp1-di", "zaimek vrsta=osebni oseba=prva število=dvojina sklon=orodnik", "Pronoun Type=personal Person=first Number=dual Case=instrumental"); + InsertMsd("Pp1-pg", "zaimek vrsta=osebni oseba=prva število=množina sklon=rodilnik", "Pronoun Type=personal Person=first Number=plural Case=genitive"); + InsertMsd("Pp1-pd", "zaimek vrsta=osebni oseba=prva število=množina sklon=dajalnik", "Pronoun Type=personal Person=first Number=plural Case=dative"); + InsertMsd( + "Pp1-pa", + "zaimek vrsta=osebni oseba=prva število=množina sklon=tožilnik", + "Pronoun Type=personal Person=first Number=plural Case=accusative"); + InsertMsd("Pp1-pl", "zaimek vrsta=osebni oseba=prva število=množina sklon=mestnik", "Pronoun Type=personal Person=first Number=plural Case=locative"); + InsertMsd( + "Pp1-pi", + "zaimek vrsta=osebni oseba=prva število=množina sklon=orodnik", + "Pronoun Type=personal Person=first Number=plural Case=instrumental"); + InsertMsd( + "Pp1mdn", + "zaimek vrsta=osebni oseba=prva spol=moški število=dvojina sklon=imenovalnik", + "Pronoun Type=personal Person=first Gender=masculine Number=dual Case=nominative"); + InsertMsd( + "Pp1mpn", + "zaimek vrsta=osebni oseba=prva spol=moški število=množina sklon=imenovalnik", + "Pronoun Type=personal Person=first Gender=masculine Number=plural Case=nominative"); + InsertMsd( + "Pp1fdn", + "zaimek vrsta=osebni oseba=prva spol=ženski število=dvojina sklon=imenovalnik", + "Pronoun Type=personal Person=first Gender=feminine Number=dual Case=nominative"); + InsertMsd( + "Pp1fpn", + "zaimek vrsta=osebni oseba=prva spol=ženski število=množina sklon=imenovalnik", + "Pronoun Type=personal Person=first Gender=feminine Number=plural Case=nominative"); + InsertMsd( + "Pp2-sn", + "zaimek vrsta=osebni oseba=druga število=ednina sklon=imenovalnik", + "Pronoun Type=personal Person=second Number=singular Case=nominative"); + InsertMsd( + "Pp2-sg", + "zaimek vrsta=osebni oseba=druga število=ednina sklon=rodilnik", + "Pronoun Type=personal Person=second Number=singular Case=genitive"); + InsertMsd( + "Pp2-sg--y", + "zaimek vrsta=osebni oseba=druga število=ednina sklon=rodilnik naslonskost=kliticna", + "Pronoun Type=personal Person=second Number=singular Case=genitive Clitic=yes"); + InsertMsd("Pp2-sd", "zaimek vrsta=osebni oseba=druga število=ednina sklon=dajalnik", "Pronoun Type=personal Person=second Number=singular Case=dative"); + InsertMsd( + "Pp2-sd--y", + "zaimek vrsta=osebni oseba=druga število=ednina sklon=dajalnik naslonskost=kliticna", + "Pronoun Type=personal Person=second Number=singular Case=dative Clitic=yes"); + InsertMsd( + "Pp2-sa", + "zaimek vrsta=osebni oseba=druga število=ednina sklon=tožilnik", + "Pronoun Type=personal Person=second Number=singular Case=accusative"); + InsertMsd( + "Pp2-sa--y", + "zaimek vrsta=osebni oseba=druga število=ednina sklon=tožilnik naslonskost=kliticna", + "Pronoun Type=personal Person=second Number=singular Case=accusative Clitic=yes"); + InsertMsd( + "Pp2-sa--b", + "zaimek vrsta=osebni oseba=druga število=ednina sklon=tožilnik naslonskost=navezna", + "Pronoun Type=personal Person=second Number=singular Case=accusative Clitic=bound"); + InsertMsd( + "Pp2-sl", + "zaimek vrsta=osebni oseba=druga število=ednina sklon=mestnik", + "Pronoun Type=personal Person=second Number=singular Case=locative"); + InsertMsd( + "Pp2-si", + "zaimek vrsta=osebni oseba=druga število=ednina sklon=orodnik", + "Pronoun Type=personal Person=second Number=singular Case=instrumental"); + InsertMsd("Pp2-dg", "zaimek vrsta=osebni oseba=druga število=dvojina sklon=rodilnik", "Pronoun Type=personal Person=second Number=dual Case=genitive"); + InsertMsd("Pp2-dd", "zaimek vrsta=osebni oseba=druga število=dvojina sklon=dajalnik", "Pronoun Type=personal Person=second Number=dual Case=dative"); + InsertMsd( + "Pp2-da", + "zaimek vrsta=osebni oseba=druga število=dvojina sklon=tožilnik", + "Pronoun Type=personal Person=second Number=dual Case=accusative"); + InsertMsd("Pp2-dl", "zaimek vrsta=osebni oseba=druga število=dvojina sklon=mestnik", "Pronoun Type=personal Person=second Number=dual Case=locative"); + InsertMsd( + "Pp2-di", + "zaimek vrsta=osebni oseba=druga število=dvojina sklon=orodnik", + "Pronoun Type=personal Person=second Number=dual Case=instrumental"); + InsertMsd( + "Pp2-pg", + "zaimek vrsta=osebni oseba=druga število=množina sklon=rodilnik", + "Pronoun Type=personal Person=second Number=plural Case=genitive"); + InsertMsd("Pp2-pd", "zaimek vrsta=osebni oseba=druga število=množina sklon=dajalnik", "Pronoun Type=personal Person=second Number=plural Case=dative"); + InsertMsd( + "Pp2-pa", + "zaimek vrsta=osebni oseba=druga število=množina sklon=tožilnik", + "Pronoun Type=personal Person=second Number=plural Case=accusative"); + InsertMsd("Pp2-pl", "zaimek vrsta=osebni oseba=druga število=množina sklon=mestnik", "Pronoun Type=personal Person=second Number=plural Case=locative"); + InsertMsd( + "Pp2-pi", + "zaimek vrsta=osebni oseba=druga število=množina sklon=orodnik", + "Pronoun Type=personal Person=second Number=plural Case=instrumental"); + InsertMsd( + "Pp2mdn", + "zaimek vrsta=osebni oseba=druga spol=moški število=dvojina sklon=imenovalnik", + "Pronoun Type=personal Person=second Gender=masculine Number=dual Case=nominative"); + InsertMsd( + "Pp2mpn", + "zaimek vrsta=osebni oseba=druga spol=moški število=množina sklon=imenovalnik", + "Pronoun Type=personal Person=second Gender=masculine Number=plural Case=nominative"); + InsertMsd( + "Pp2fdn", + "zaimek vrsta=osebni oseba=druga spol=ženski število=dvojina sklon=imenovalnik", + "Pronoun Type=personal Person=second Gender=feminine Number=dual Case=nominative"); + InsertMsd( + "Pp2fpn", + "zaimek vrsta=osebni oseba=druga spol=ženski število=množina sklon=imenovalnik", + "Pronoun Type=personal Person=second Gender=feminine Number=plural Case=nominative"); + InsertMsd( + "Pp2ndn", + "zaimek vrsta=osebni oseba=druga spol=srednji število=dvojina sklon=imenovalnik", + "Pronoun Type=personal Person=second Gender=neuter Number=dual Case=nominative"); + InsertMsd( + "Pp2npn", + "zaimek vrsta=osebni oseba=druga spol=srednji število=množina sklon=imenovalnik", + "Pronoun Type=personal Person=second Gender=neuter Number=plural Case=nominative"); + InsertMsd( + "Pp3msn", + "zaimek vrsta=osebni oseba=tretja spol=moški število=ednina sklon=imenovalnik", + "Pronoun Type=personal Person=third Gender=masculine Number=singular Case=nominative"); + InsertMsd( + "Pp3msg", + "zaimek vrsta=osebni oseba=tretja spol=moški število=ednina sklon=rodilnik", + "Pronoun Type=personal Person=third Gender=masculine Number=singular Case=genitive"); + InsertMsd( + "Pp3msg--y", + "zaimek vrsta=osebni oseba=tretja spol=moški število=ednina sklon=rodilnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=masculine Number=singular Case=genitive Clitic=yes"); + InsertMsd( + "Pp3msd", + "zaimek vrsta=osebni oseba=tretja spol=moški število=ednina sklon=dajalnik", + "Pronoun Type=personal Person=third Gender=masculine Number=singular Case=dative"); + InsertMsd( + "Pp3msd--y", + "zaimek vrsta=osebni oseba=tretja spol=moški število=ednina sklon=dajalnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=masculine Number=singular Case=dative Clitic=yes"); + InsertMsd( + "Pp3msa", + "zaimek vrsta=osebni oseba=tretja spol=moški število=ednina sklon=tožilnik", + "Pronoun Type=personal Person=third Gender=masculine Number=singular Case=accusative"); + InsertMsd( + "Pp3msa--y", + "zaimek vrsta=osebni oseba=tretja spol=moški število=ednina sklon=tožilnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=masculine Number=singular Case=accusative Clitic=yes"); + InsertMsd( + "Pp3msa--b", + "zaimek vrsta=osebni oseba=tretja spol=moški število=ednina sklon=tožilnik naslonskost=navezna", + "Pronoun Type=personal Person=third Gender=masculine Number=singular Case=accusative Clitic=bound"); + InsertMsd( + "Pp3msl", + "zaimek vrsta=osebni oseba=tretja spol=moški število=ednina sklon=mestnik", + "Pronoun Type=personal Person=third Gender=masculine Number=singular Case=locative"); + InsertMsd( + "Pp3msi", + "zaimek vrsta=osebni oseba=tretja spol=moški število=ednina sklon=orodnik", + "Pronoun Type=personal Person=third Gender=masculine Number=singular Case=instrumental"); + InsertMsd( + "Pp3mdn", + "zaimek vrsta=osebni oseba=tretja spol=moški število=dvojina sklon=imenovalnik", + "Pronoun Type=personal Person=third Gender=masculine Number=dual Case=nominative"); + InsertMsd( + "Pp3mdg", + "zaimek vrsta=osebni oseba=tretja spol=moški število=dvojina sklon=rodilnik", + "Pronoun Type=personal Person=third Gender=masculine Number=dual Case=genitive"); + InsertMsd( + "Pp3mdg--y", + "zaimek vrsta=osebni oseba=tretja spol=moški število=dvojina sklon=rodilnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=masculine Number=dual Case=genitive Clitic=yes"); + InsertMsd( + "Pp3mdd", + "zaimek vrsta=osebni oseba=tretja spol=moški število=dvojina sklon=dajalnik", + "Pronoun Type=personal Person=third Gender=masculine Number=dual Case=dative"); + InsertMsd( + "Pp3mdd--y", + "zaimek vrsta=osebni oseba=tretja spol=moški število=dvojina sklon=dajalnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=masculine Number=dual Case=dative Clitic=yes"); + InsertMsd( + "Pp3mda", + "zaimek vrsta=osebni oseba=tretja spol=moški število=dvojina sklon=tožilnik", + "Pronoun Type=personal Person=third Gender=masculine Number=dual Case=accusative"); + InsertMsd( + "Pp3mda--y", + "zaimek vrsta=osebni oseba=tretja spol=moški število=dvojina sklon=tožilnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=masculine Number=dual Case=accusative Clitic=yes"); + InsertMsd( + "Pp3mda--b", + "zaimek vrsta=osebni oseba=tretja spol=moški število=dvojina sklon=tožilnik naslonskost=navezna", + "Pronoun Type=personal Person=third Gender=masculine Number=dual Case=accusative Clitic=bound"); + InsertMsd( + "Pp3mdl", + "zaimek vrsta=osebni oseba=tretja spol=moški število=dvojina sklon=mestnik", + "Pronoun Type=personal Person=third Gender=masculine Number=dual Case=locative"); + InsertMsd( + "Pp3mdi", + "zaimek vrsta=osebni oseba=tretja spol=moški število=dvojina sklon=orodnik", + "Pronoun Type=personal Person=third Gender=masculine Number=dual Case=instrumental"); + InsertMsd( + "Pp3mpn", + "zaimek vrsta=osebni oseba=tretja spol=moški število=množina sklon=imenovalnik", + "Pronoun Type=personal Person=third Gender=masculine Number=plural Case=nominative"); + InsertMsd( + "Pp3mpg", + "zaimek vrsta=osebni oseba=tretja spol=moški število=množina sklon=rodilnik", + "Pronoun Type=personal Person=third Gender=masculine Number=plural Case=genitive"); + InsertMsd( + "Pp3mpg--y", + "zaimek vrsta=osebni oseba=tretja spol=moški število=množina sklon=rodilnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=masculine Number=plural Case=genitive Clitic=yes"); + InsertMsd( + "Pp3mpd", + "zaimek vrsta=osebni oseba=tretja spol=moški število=množina sklon=dajalnik", + "Pronoun Type=personal Person=third Gender=masculine Number=plural Case=dative"); + InsertMsd( + "Pp3mpd--y", + "zaimek vrsta=osebni oseba=tretja spol=moški število=množina sklon=dajalnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=masculine Number=plural Case=dative Clitic=yes"); + InsertMsd( + "Pp3mpa", + "zaimek vrsta=osebni oseba=tretja spol=moški število=množina sklon=tožilnik", + "Pronoun Type=personal Person=third Gender=masculine Number=plural Case=accusative"); + InsertMsd( + "Pp3mpa--y", + "zaimek vrsta=osebni oseba=tretja spol=moški število=množina sklon=tožilnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=masculine Number=plural Case=accusative Clitic=yes"); + InsertMsd( + "Pp3mpa--b", + "zaimek vrsta=osebni oseba=tretja spol=moški število=množina sklon=tožilnik naslonskost=navezna", + "Pronoun Type=personal Person=third Gender=masculine Number=plural Case=accusative Clitic=bound"); + InsertMsd( + "Pp3mpl", + "zaimek vrsta=osebni oseba=tretja spol=moški število=množina sklon=mestnik", + "Pronoun Type=personal Person=third Gender=masculine Number=plural Case=locative"); + InsertMsd( + "Pp3mpi", + "zaimek vrsta=osebni oseba=tretja spol=moški število=množina sklon=orodnik", + "Pronoun Type=personal Person=third Gender=masculine Number=plural Case=instrumental"); + InsertMsd( + "Pp3fsn", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=ednina sklon=imenovalnik", + "Pronoun Type=personal Person=third Gender=feminine Number=singular Case=nominative"); + InsertMsd( + "Pp3fsg", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=ednina sklon=rodilnik", + "Pronoun Type=personal Person=third Gender=feminine Number=singular Case=genitive"); + InsertMsd( + "Pp3fsg--y", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=ednina sklon=rodilnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=feminine Number=singular Case=genitive Clitic=yes"); + InsertMsd( + "Pp3fsd", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=ednina sklon=dajalnik", + "Pronoun Type=personal Person=third Gender=feminine Number=singular Case=dative"); + InsertMsd( + "Pp3fsd--y", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=ednina sklon=dajalnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=feminine Number=singular Case=dative Clitic=yes"); + InsertMsd( + "Pp3fsa", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=ednina sklon=tožilnik", + "Pronoun Type=personal Person=third Gender=feminine Number=singular Case=accusative"); + InsertMsd( + "Pp3fsa--y", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=ednina sklon=tožilnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=feminine Number=singular Case=accusative Clitic=yes"); + InsertMsd( + "Pp3fsa--b", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=ednina sklon=tožilnik naslonskost=navezna", + "Pronoun Type=personal Person=third Gender=feminine Number=singular Case=accusative Clitic=bound"); + InsertMsd( + "Pp3fsl", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=ednina sklon=mestnik", + "Pronoun Type=personal Person=third Gender=feminine Number=singular Case=locative"); + InsertMsd( + "Pp3fsi", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=ednina sklon=orodnik", + "Pronoun Type=personal Person=third Gender=feminine Number=singular Case=instrumental"); + InsertMsd( + "Pp3fdn", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=dvojina sklon=imenovalnik", + "Pronoun Type=personal Person=third Gender=feminine Number=dual Case=nominative"); + InsertMsd( + "Pp3fdg", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=dvojina sklon=rodilnik", + "Pronoun Type=personal Person=third Gender=feminine Number=dual Case=genitive"); + InsertMsd( + "Pp3fdg--y", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=dvojina sklon=rodilnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=feminine Number=dual Case=genitive Clitic=yes"); + InsertMsd( + "Pp3fdd", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=dvojina sklon=dajalnik", + "Pronoun Type=personal Person=third Gender=feminine Number=dual Case=dative"); + InsertMsd( + "Pp3fdd--y", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=dvojina sklon=dajalnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=feminine Number=dual Case=dative Clitic=yes"); + InsertMsd( + "Pp3fda", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=dvojina sklon=tožilnik", + "Pronoun Type=personal Person=third Gender=feminine Number=dual Case=accusative"); + InsertMsd( + "Pp3fda--y", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=dvojina sklon=tožilnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=feminine Number=dual Case=accusative Clitic=yes"); + InsertMsd( + "Pp3fda--b", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=dvojina sklon=tožilnik naslonskost=navezna", + "Pronoun Type=personal Person=third Gender=feminine Number=dual Case=accusative Clitic=bound"); + InsertMsd( + "Pp3fdl", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=dvojina sklon=mestnik", + "Pronoun Type=personal Person=third Gender=feminine Number=dual Case=locative"); + InsertMsd( + "Pp3fdi", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=dvojina sklon=orodnik", + "Pronoun Type=personal Person=third Gender=feminine Number=dual Case=instrumental"); + InsertMsd( + "Pp3fpn", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=množina sklon=imenovalnik", + "Pronoun Type=personal Person=third Gender=feminine Number=plural Case=nominative"); + InsertMsd( + "Pp3fpg", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=množina sklon=rodilnik", + "Pronoun Type=personal Person=third Gender=feminine Number=plural Case=genitive"); + InsertMsd( + "Pp3fpg--y", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=množina sklon=rodilnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=feminine Number=plural Case=genitive Clitic=yes"); + InsertMsd( + "Pp3fpd", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=množina sklon=dajalnik", + "Pronoun Type=personal Person=third Gender=feminine Number=plural Case=dative"); + InsertMsd( + "Pp3fpd--y", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=množina sklon=dajalnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=feminine Number=plural Case=dative Clitic=yes"); + InsertMsd( + "Pp3fpa", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=množina sklon=tožilnik", + "Pronoun Type=personal Person=third Gender=feminine Number=plural Case=accusative"); + InsertMsd( + "Pp3fpa--y", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=množina sklon=tožilnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=feminine Number=plural Case=accusative Clitic=yes"); + InsertMsd( + "Pp3fpa--b", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=množina sklon=tožilnik naslonskost=navezna", + "Pronoun Type=personal Person=third Gender=feminine Number=plural Case=accusative Clitic=bound"); + InsertMsd( + "Pp3fpl", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=množina sklon=mestnik", + "Pronoun Type=personal Person=third Gender=feminine Number=plural Case=locative"); + InsertMsd( + "Pp3fpi", + "zaimek vrsta=osebni oseba=tretja spol=ženski število=množina sklon=orodnik", + "Pronoun Type=personal Person=third Gender=feminine Number=plural Case=instrumental"); + InsertMsd( + "Pp3nsn", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=ednina sklon=imenovalnik", + "Pronoun Type=personal Person=third Gender=neuter Number=singular Case=nominative"); + InsertMsd( + "Pp3nsg", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=ednina sklon=rodilnik", + "Pronoun Type=personal Person=third Gender=neuter Number=singular Case=genitive"); + InsertMsd( + "Pp3nsg--y", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=ednina sklon=rodilnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=neuter Number=singular Case=genitive Clitic=yes"); + InsertMsd( + "Pp3nsd", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=ednina sklon=dajalnik", + "Pronoun Type=personal Person=third Gender=neuter Number=singular Case=dative"); + InsertMsd( + "Pp3nsd--y", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=ednina sklon=dajalnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=neuter Number=singular Case=dative Clitic=yes"); + InsertMsd( + "Pp3nsa", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=ednina sklon=tožilnik", + "Pronoun Type=personal Person=third Gender=neuter Number=singular Case=accusative"); + InsertMsd( + "Pp3nsa--y", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=ednina sklon=tožilnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=neuter Number=singular Case=accusative Clitic=yes"); + InsertMsd( + "Pp3nsa--b", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=ednina sklon=tožilnik naslonskost=navezna", + "Pronoun Type=personal Person=third Gender=neuter Number=singular Case=accusative Clitic=bound"); + InsertMsd( + "Pp3nsl", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=ednina sklon=mestnik", + "Pronoun Type=personal Person=third Gender=neuter Number=singular Case=locative"); + InsertMsd( + "Pp3nsi", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=ednina sklon=orodnik", + "Pronoun Type=personal Person=third Gender=neuter Number=singular Case=instrumental"); + InsertMsd( + "Pp3ndn", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=dvojina sklon=imenovalnik", + "Pronoun Type=personal Person=third Gender=neuter Number=dual Case=nominative"); + InsertMsd( + "Pp3ndg", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=dvojina sklon=rodilnik", + "Pronoun Type=personal Person=third Gender=neuter Number=dual Case=genitive"); + InsertMsd( + "Pp3ndg--y", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=dvojina sklon=rodilnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=neuter Number=dual Case=genitive Clitic=yes"); + InsertMsd( + "Pp3ndd", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=dvojina sklon=dajalnik", + "Pronoun Type=personal Person=third Gender=neuter Number=dual Case=dative"); + InsertMsd( + "Pp3ndd--y", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=dvojina sklon=dajalnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=neuter Number=dual Case=dative Clitic=yes"); + InsertMsd( + "Pp3nda", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=dvojina sklon=tožilnik", + "Pronoun Type=personal Person=third Gender=neuter Number=dual Case=accusative"); + InsertMsd( + "Pp3nda--y", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=dvojina sklon=tožilnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=neuter Number=dual Case=accusative Clitic=yes"); + InsertMsd( + "Pp3nda--b", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=dvojina sklon=tožilnik naslonskost=navezna", + "Pronoun Type=personal Person=third Gender=neuter Number=dual Case=accusative Clitic=bound"); + InsertMsd( + "Pp3ndl", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=dvojina sklon=mestnik", + "Pronoun Type=personal Person=third Gender=neuter Number=dual Case=locative"); + InsertMsd( + "Pp3ndi", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=dvojina sklon=orodnik", + "Pronoun Type=personal Person=third Gender=neuter Number=dual Case=instrumental"); + InsertMsd( + "Pp3npn", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=množina sklon=imenovalnik", + "Pronoun Type=personal Person=third Gender=neuter Number=plural Case=nominative"); + InsertMsd( + "Pp3npg", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=množina sklon=rodilnik", + "Pronoun Type=personal Person=third Gender=neuter Number=plural Case=genitive"); + InsertMsd( + "Pp3npg--y", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=množina sklon=rodilnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=neuter Number=plural Case=genitive Clitic=yes"); + InsertMsd( + "Pp3npd", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=množina sklon=dajalnik", + "Pronoun Type=personal Person=third Gender=neuter Number=plural Case=dative"); + InsertMsd( + "Pp3npd--y", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=množina sklon=dajalnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=neuter Number=plural Case=dative Clitic=yes"); + InsertMsd( + "Pp3npa", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=množina sklon=tožilnik", + "Pronoun Type=personal Person=third Gender=neuter Number=plural Case=accusative"); + InsertMsd( + "Pp3npa--y", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=množina sklon=tožilnik naslonskost=kliticna", + "Pronoun Type=personal Person=third Gender=neuter Number=plural Case=accusative Clitic=yes"); + InsertMsd( + "Pp3npa--b", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=množina sklon=tožilnik naslonskost=navezna", + "Pronoun Type=personal Person=third Gender=neuter Number=plural Case=accusative Clitic=bound"); + InsertMsd( + "Pp3npl", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=množina sklon=mestnik", + "Pronoun Type=personal Person=third Gender=neuter Number=plural Case=locative"); + InsertMsd( + "Pp3npi", + "zaimek vrsta=osebni oseba=tretja spol=srednji število=množina sklon=orodnik", + "Pronoun Type=personal Person=third Gender=neuter Number=plural Case=instrumental"); + InsertMsd( + "Ps1msns", + "zaimek vrsta=svojilni oseba=prva spol=moški število=ednina sklon=imenovalnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=masculine Number=singular Case=nominative Owner_Number=singular"); + InsertMsd( + "Ps1msnd", + "zaimek vrsta=svojilni oseba=prva spol=moški število=ednina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=masculine Number=singular Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps1msnp", + "zaimek vrsta=svojilni oseba=prva spol=moški število=ednina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=masculine Number=singular Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps1msgs", + "zaimek vrsta=svojilni oseba=prva spol=moški število=ednina sklon=rodilnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=masculine Number=singular Case=genitive Owner_Number=singular"); + InsertMsd( + "Ps1msgd", + "zaimek vrsta=svojilni oseba=prva spol=moški število=ednina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=masculine Number=singular Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps1msgp", + "zaimek vrsta=svojilni oseba=prva spol=moški število=ednina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=masculine Number=singular Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps1msds", + "zaimek vrsta=svojilni oseba=prva spol=moški število=ednina sklon=dajalnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=masculine Number=singular Case=dative Owner_Number=singular"); + InsertMsd( + "Ps1msdd", + "zaimek vrsta=svojilni oseba=prva spol=moški število=ednina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=masculine Number=singular Case=dative Owner_Number=dual"); + InsertMsd( + "Ps1msdp", + "zaimek vrsta=svojilni oseba=prva spol=moški število=ednina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=masculine Number=singular Case=dative Owner_Number=plural"); + InsertMsd( + "Ps1msas", + "zaimek vrsta=svojilni oseba=prva spol=moški število=ednina sklon=tožilnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=masculine Number=singular Case=accusative Owner_Number=singular"); + InsertMsd( + "Ps1msad", + "zaimek vrsta=svojilni oseba=prva spol=moški število=ednina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=masculine Number=singular Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps1msap", + "zaimek vrsta=svojilni oseba=prva spol=moški število=ednina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=masculine Number=singular Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps1msls", + "zaimek vrsta=svojilni oseba=prva spol=moški število=ednina sklon=mestnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=masculine Number=singular Case=locative Owner_Number=singular"); + InsertMsd( + "Ps1msld", + "zaimek vrsta=svojilni oseba=prva spol=moški število=ednina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=masculine Number=singular Case=locative Owner_Number=dual"); + InsertMsd( + "Ps1mslp", + "zaimek vrsta=svojilni oseba=prva spol=moški število=ednina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=masculine Number=singular Case=locative Owner_Number=plural"); + InsertMsd( + "Ps1msis", + "zaimek vrsta=svojilni oseba=prva spol=moški število=ednina sklon=orodnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=masculine Number=singular Case=instrumental Owner_Number=singular"); + InsertMsd( + "Ps1msid", + "zaimek vrsta=svojilni oseba=prva spol=moški število=ednina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=masculine Number=singular Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps1msip", + "zaimek vrsta=svojilni oseba=prva spol=moški število=ednina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=masculine Number=singular Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps1mdns", + "zaimek vrsta=svojilni oseba=prva spol=moški število=dvojina sklon=imenovalnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=masculine Number=dual Case=nominative Owner_Number=singular"); + InsertMsd( + "Ps1mdnd", + "zaimek vrsta=svojilni oseba=prva spol=moški število=dvojina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=masculine Number=dual Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps1mdnp", + "zaimek vrsta=svojilni oseba=prva spol=moški število=dvojina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=masculine Number=dual Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps1mdgs", + "zaimek vrsta=svojilni oseba=prva spol=moški število=dvojina sklon=rodilnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=masculine Number=dual Case=genitive Owner_Number=singular"); + InsertMsd( + "Ps1mdgd", + "zaimek vrsta=svojilni oseba=prva spol=moški število=dvojina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=masculine Number=dual Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps1mdgp", + "zaimek vrsta=svojilni oseba=prva spol=moški število=dvojina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=masculine Number=dual Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps1mdds", + "zaimek vrsta=svojilni oseba=prva spol=moški število=dvojina sklon=dajalnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=masculine Number=dual Case=dative Owner_Number=singular"); + InsertMsd( + "Ps1mddd", + "zaimek vrsta=svojilni oseba=prva spol=moški število=dvojina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=masculine Number=dual Case=dative Owner_Number=dual"); + InsertMsd( + "Ps1mddp", + "zaimek vrsta=svojilni oseba=prva spol=moški število=dvojina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=masculine Number=dual Case=dative Owner_Number=plural"); + InsertMsd( + "Ps1mdas", + "zaimek vrsta=svojilni oseba=prva spol=moški število=dvojina sklon=tožilnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=masculine Number=dual Case=accusative Owner_Number=singular"); + InsertMsd( + "Ps1mdad", + "zaimek vrsta=svojilni oseba=prva spol=moški število=dvojina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=masculine Number=dual Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps1mdap", + "zaimek vrsta=svojilni oseba=prva spol=moški število=dvojina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=masculine Number=dual Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps1mdls", + "zaimek vrsta=svojilni oseba=prva spol=moški število=dvojina sklon=mestnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=masculine Number=dual Case=locative Owner_Number=singular"); + InsertMsd( + "Ps1mdld", + "zaimek vrsta=svojilni oseba=prva spol=moški število=dvojina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=masculine Number=dual Case=locative Owner_Number=dual"); + InsertMsd( + "Ps1mdlp", + "zaimek vrsta=svojilni oseba=prva spol=moški število=dvojina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=masculine Number=dual Case=locative Owner_Number=plural"); + InsertMsd( + "Ps1mdis", + "zaimek vrsta=svojilni oseba=prva spol=moški število=dvojina sklon=orodnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=masculine Number=dual Case=instrumental Owner_Number=singular"); + InsertMsd( + "Ps1mdid", + "zaimek vrsta=svojilni oseba=prva spol=moški število=dvojina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=masculine Number=dual Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps1mdip", + "zaimek vrsta=svojilni oseba=prva spol=moški število=dvojina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=masculine Number=dual Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps1mpns", + "zaimek vrsta=svojilni oseba=prva spol=moški število=množina sklon=imenovalnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=masculine Number=plural Case=nominative Owner_Number=singular"); + InsertMsd( + "Ps1mpnd", + "zaimek vrsta=svojilni oseba=prva spol=moški število=množina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=masculine Number=plural Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps1mpnp", + "zaimek vrsta=svojilni oseba=prva spol=moški število=množina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=masculine Number=plural Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps1mpgs", + "zaimek vrsta=svojilni oseba=prva spol=moški število=množina sklon=rodilnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=masculine Number=plural Case=genitive Owner_Number=singular"); + InsertMsd( + "Ps1mpgd", + "zaimek vrsta=svojilni oseba=prva spol=moški število=množina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=masculine Number=plural Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps1mpgp", + "zaimek vrsta=svojilni oseba=prva spol=moški število=množina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=masculine Number=plural Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps1mpds", + "zaimek vrsta=svojilni oseba=prva spol=moški število=množina sklon=dajalnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=masculine Number=plural Case=dative Owner_Number=singular"); + InsertMsd( + "Ps1mpdd", + "zaimek vrsta=svojilni oseba=prva spol=moški število=množina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=masculine Number=plural Case=dative Owner_Number=dual"); + InsertMsd( + "Ps1mpdp", + "zaimek vrsta=svojilni oseba=prva spol=moški število=množina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=masculine Number=plural Case=dative Owner_Number=plural"); + InsertMsd( + "Ps1mpas", + "zaimek vrsta=svojilni oseba=prva spol=moški število=množina sklon=tožilnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=masculine Number=plural Case=accusative Owner_Number=singular"); + InsertMsd( + "Ps1mpad", + "zaimek vrsta=svojilni oseba=prva spol=moški število=množina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=masculine Number=plural Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps1mpap", + "zaimek vrsta=svojilni oseba=prva spol=moški število=množina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=masculine Number=plural Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps1mpls", + "zaimek vrsta=svojilni oseba=prva spol=moški število=množina sklon=mestnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=masculine Number=plural Case=locative Owner_Number=singular"); + InsertMsd( + "Ps1mpld", + "zaimek vrsta=svojilni oseba=prva spol=moški število=množina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=masculine Number=plural Case=locative Owner_Number=dual"); + InsertMsd( + "Ps1mplp", + "zaimek vrsta=svojilni oseba=prva spol=moški število=množina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=masculine Number=plural Case=locative Owner_Number=plural"); + InsertMsd( + "Ps1mpis", + "zaimek vrsta=svojilni oseba=prva spol=moški število=množina sklon=orodnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=masculine Number=plural Case=instrumental Owner_Number=singular"); + InsertMsd( + "Ps1mpid", + "zaimek vrsta=svojilni oseba=prva spol=moški število=množina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=masculine Number=plural Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps1mpip", + "zaimek vrsta=svojilni oseba=prva spol=moški število=množina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=masculine Number=plural Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps1fsns", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=ednina sklon=imenovalnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=feminine Number=singular Case=nominative Owner_Number=singular"); + InsertMsd( + "Ps1fsnd", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=ednina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=feminine Number=singular Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps1fsnp", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=ednina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=feminine Number=singular Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps1fsgs", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=ednina sklon=rodilnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=feminine Number=singular Case=genitive Owner_Number=singular"); + InsertMsd( + "Ps1fsgd", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=ednina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=feminine Number=singular Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps1fsgp", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=ednina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=feminine Number=singular Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps1fsds", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=ednina sklon=dajalnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=feminine Number=singular Case=dative Owner_Number=singular"); + InsertMsd( + "Ps1fsdd", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=ednina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=feminine Number=singular Case=dative Owner_Number=dual"); + InsertMsd( + "Ps1fsdp", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=ednina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=feminine Number=singular Case=dative Owner_Number=plural"); + InsertMsd( + "Ps1fsas", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=ednina sklon=tožilnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=feminine Number=singular Case=accusative Owner_Number=singular"); + InsertMsd( + "Ps1fsad", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=ednina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=feminine Number=singular Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps1fsap", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=ednina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=feminine Number=singular Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps1fsls", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=ednina sklon=mestnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=feminine Number=singular Case=locative Owner_Number=singular"); + InsertMsd( + "Ps1fsld", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=ednina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=feminine Number=singular Case=locative Owner_Number=dual"); + InsertMsd( + "Ps1fslp", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=ednina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=feminine Number=singular Case=locative Owner_Number=plural"); + InsertMsd( + "Ps1fsis", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=ednina sklon=orodnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=feminine Number=singular Case=instrumental Owner_Number=singular"); + InsertMsd( + "Ps1fsid", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=ednina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=feminine Number=singular Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps1fsip", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=ednina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=feminine Number=singular Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps1fdns", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=dvojina sklon=imenovalnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=feminine Number=dual Case=nominative Owner_Number=singular"); + InsertMsd( + "Ps1fdnd", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=dvojina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=feminine Number=dual Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps1fdnp", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=dvojina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=feminine Number=dual Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps1fdgs", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=dvojina sklon=rodilnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=feminine Number=dual Case=genitive Owner_Number=singular"); + InsertMsd( + "Ps1fdgd", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=dvojina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=feminine Number=dual Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps1fdgp", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=dvojina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=feminine Number=dual Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps1fdds", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=dvojina sklon=dajalnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=feminine Number=dual Case=dative Owner_Number=singular"); + InsertMsd( + "Ps1fddd", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=dvojina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=feminine Number=dual Case=dative Owner_Number=dual"); + InsertMsd( + "Ps1fddp", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=dvojina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=feminine Number=dual Case=dative Owner_Number=plural"); + InsertMsd( + "Ps1fdas", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=dvojina sklon=tožilnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=feminine Number=dual Case=accusative Owner_Number=singular"); + InsertMsd( + "Ps1fdad", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=dvojina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=feminine Number=dual Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps1fdap", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=dvojina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=feminine Number=dual Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps1fdls", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=dvojina sklon=mestnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=feminine Number=dual Case=locative Owner_Number=singular"); + InsertMsd( + "Ps1fdld", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=dvojina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=feminine Number=dual Case=locative Owner_Number=dual"); + InsertMsd( + "Ps1fdlp", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=dvojina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=feminine Number=dual Case=locative Owner_Number=plural"); + InsertMsd( + "Ps1fdis", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=dvojina sklon=orodnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=feminine Number=dual Case=instrumental Owner_Number=singular"); + InsertMsd( + "Ps1fdid", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=dvojina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=feminine Number=dual Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps1fdip", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=dvojina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=feminine Number=dual Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps1fpns", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=množina sklon=imenovalnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=feminine Number=plural Case=nominative Owner_Number=singular"); + InsertMsd( + "Ps1fpnd", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=množina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=feminine Number=plural Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps1fpnp", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=množina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=feminine Number=plural Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps1fpgs", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=množina sklon=rodilnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=feminine Number=plural Case=genitive Owner_Number=singular"); + InsertMsd( + "Ps1fpgd", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=množina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=feminine Number=plural Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps1fpgp", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=množina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=feminine Number=plural Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps1fpds", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=množina sklon=dajalnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=feminine Number=plural Case=dative Owner_Number=singular"); + InsertMsd( + "Ps1fpdd", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=množina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=feminine Number=plural Case=dative Owner_Number=dual"); + InsertMsd( + "Ps1fpdp", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=množina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=feminine Number=plural Case=dative Owner_Number=plural"); + InsertMsd( + "Ps1fpas", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=množina sklon=tožilnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=feminine Number=plural Case=accusative Owner_Number=singular"); + InsertMsd( + "Ps1fpad", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=množina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=feminine Number=plural Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps1fpap", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=množina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=feminine Number=plural Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps1fpls", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=množina sklon=mestnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=feminine Number=plural Case=locative Owner_Number=singular"); + InsertMsd( + "Ps1fpld", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=množina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=feminine Number=plural Case=locative Owner_Number=dual"); + InsertMsd( + "Ps1fplp", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=množina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=feminine Number=plural Case=locative Owner_Number=plural"); + InsertMsd( + "Ps1fpis", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=množina sklon=orodnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=feminine Number=plural Case=instrumental Owner_Number=singular"); + InsertMsd( + "Ps1fpid", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=množina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=feminine Number=plural Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps1fpip", + "zaimek vrsta=svojilni oseba=prva spol=ženski število=množina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=feminine Number=plural Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps1nsns", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=ednina sklon=imenovalnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=neuter Number=singular Case=nominative Owner_Number=singular"); + InsertMsd( + "Ps1nsnd", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=ednina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=neuter Number=singular Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps1nsnp", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=ednina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=neuter Number=singular Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps1nsgs", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=ednina sklon=rodilnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=neuter Number=singular Case=genitive Owner_Number=singular"); + InsertMsd( + "Ps1nsgd", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=ednina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=neuter Number=singular Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps1nsgp", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=ednina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=neuter Number=singular Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps1nsds", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=ednina sklon=dajalnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=neuter Number=singular Case=dative Owner_Number=singular"); + InsertMsd( + "Ps1nsdd", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=ednina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=neuter Number=singular Case=dative Owner_Number=dual"); + InsertMsd( + "Ps1nsdp", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=ednina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=neuter Number=singular Case=dative Owner_Number=plural"); + InsertMsd( + "Ps1nsas", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=ednina sklon=tožilnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=neuter Number=singular Case=accusative Owner_Number=singular"); + InsertMsd( + "Ps1nsad", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=ednina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=neuter Number=singular Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps1nsap", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=ednina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=neuter Number=singular Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps1nsls", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=ednina sklon=mestnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=neuter Number=singular Case=locative Owner_Number=singular"); + InsertMsd( + "Ps1nsld", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=ednina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=neuter Number=singular Case=locative Owner_Number=dual"); + InsertMsd( + "Ps1nslp", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=ednina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=neuter Number=singular Case=locative Owner_Number=plural"); + InsertMsd( + "Ps1nsis", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=ednina sklon=orodnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=neuter Number=singular Case=instrumental Owner_Number=singular"); + InsertMsd( + "Ps1nsid", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=ednina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=neuter Number=singular Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps1nsip", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=ednina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=neuter Number=singular Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps1ndns", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=dvojina sklon=imenovalnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=neuter Number=dual Case=nominative Owner_Number=singular"); + InsertMsd( + "Ps1ndnd", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=dvojina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=neuter Number=dual Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps1ndnp", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=dvojina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=neuter Number=dual Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps1ndgs", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=dvojina sklon=rodilnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=neuter Number=dual Case=genitive Owner_Number=singular"); + InsertMsd( + "Ps1ndgd", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=dvojina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=neuter Number=dual Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps1ndgp", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=dvojina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=neuter Number=dual Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps1ndds", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=dvojina sklon=dajalnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=neuter Number=dual Case=dative Owner_Number=singular"); + InsertMsd( + "Ps1nddd", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=dvojina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=neuter Number=dual Case=dative Owner_Number=dual"); + InsertMsd( + "Ps1nddp", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=dvojina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=neuter Number=dual Case=dative Owner_Number=plural"); + InsertMsd( + "Ps1ndas", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=dvojina sklon=tožilnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=neuter Number=dual Case=accusative Owner_Number=singular"); + InsertMsd( + "Ps1ndad", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=dvojina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=neuter Number=dual Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps1ndap", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=dvojina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=neuter Number=dual Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps1ndls", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=dvojina sklon=mestnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=neuter Number=dual Case=locative Owner_Number=singular"); + InsertMsd( + "Ps1ndld", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=dvojina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=neuter Number=dual Case=locative Owner_Number=dual"); + InsertMsd( + "Ps1ndlp", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=dvojina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=neuter Number=dual Case=locative Owner_Number=plural"); + InsertMsd( + "Ps1ndis", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=dvojina sklon=orodnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=neuter Number=dual Case=instrumental Owner_Number=singular"); + InsertMsd( + "Ps1ndid", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=dvojina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=neuter Number=dual Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps1ndip", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=dvojina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=neuter Number=dual Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps1npns", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=množina sklon=imenovalnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=neuter Number=plural Case=nominative Owner_Number=singular"); + InsertMsd( + "Ps1npnd", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=množina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=neuter Number=plural Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps1npnp", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=množina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=neuter Number=plural Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps1npgs", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=množina sklon=rodilnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=neuter Number=plural Case=genitive Owner_Number=singular"); + InsertMsd( + "Ps1npgd", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=množina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=neuter Number=plural Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps1npgp", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=množina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=neuter Number=plural Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps1npds", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=množina sklon=dajalnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=neuter Number=plural Case=dative Owner_Number=singular"); + InsertMsd( + "Ps1npdd", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=množina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=neuter Number=plural Case=dative Owner_Number=dual"); + InsertMsd( + "Ps1npdp", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=množina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=neuter Number=plural Case=dative Owner_Number=plural"); + InsertMsd( + "Ps1npas", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=množina sklon=tožilnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=neuter Number=plural Case=accusative Owner_Number=singular"); + InsertMsd( + "Ps1npad", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=množina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=neuter Number=plural Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps1npap", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=množina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=neuter Number=plural Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps1npls", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=množina sklon=mestnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=neuter Number=plural Case=locative Owner_Number=singular"); + InsertMsd( + "Ps1npld", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=množina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=neuter Number=plural Case=locative Owner_Number=dual"); + InsertMsd( + "Ps1nplp", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=množina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=neuter Number=plural Case=locative Owner_Number=plural"); + InsertMsd( + "Ps1npis", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=množina sklon=orodnik število_svojine=ednina", + "Pronoun Type=possessive Person=first Gender=neuter Number=plural Case=instrumental Owner_Number=singular"); + InsertMsd( + "Ps1npid", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=množina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=first Gender=neuter Number=plural Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps1npip", + "zaimek vrsta=svojilni oseba=prva spol=srednji število=množina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=first Gender=neuter Number=plural Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps2msns", + "zaimek vrsta=svojilni oseba=druga spol=moški število=ednina sklon=imenovalnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=masculine Number=singular Case=nominative Owner_Number=singular"); + InsertMsd( + "Ps2msnd", + "zaimek vrsta=svojilni oseba=druga spol=moški število=ednina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=masculine Number=singular Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps2msnp", + "zaimek vrsta=svojilni oseba=druga spol=moški število=ednina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=masculine Number=singular Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps2msgs", + "zaimek vrsta=svojilni oseba=druga spol=moški število=ednina sklon=rodilnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=masculine Number=singular Case=genitive Owner_Number=singular"); + InsertMsd( + "Ps2msgd", + "zaimek vrsta=svojilni oseba=druga spol=moški število=ednina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=masculine Number=singular Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps2msgp", + "zaimek vrsta=svojilni oseba=druga spol=moški število=ednina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=masculine Number=singular Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps2msds", + "zaimek vrsta=svojilni oseba=druga spol=moški število=ednina sklon=dajalnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=masculine Number=singular Case=dative Owner_Number=singular"); + InsertMsd( + "Ps2msdd", + "zaimek vrsta=svojilni oseba=druga spol=moški število=ednina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=masculine Number=singular Case=dative Owner_Number=dual"); + InsertMsd( + "Ps2msdp", + "zaimek vrsta=svojilni oseba=druga spol=moški število=ednina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=masculine Number=singular Case=dative Owner_Number=plural"); + InsertMsd( + "Ps2msas", + "zaimek vrsta=svojilni oseba=druga spol=moški število=ednina sklon=tožilnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=masculine Number=singular Case=accusative Owner_Number=singular"); + InsertMsd( + "Ps2msad", + "zaimek vrsta=svojilni oseba=druga spol=moški število=ednina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=masculine Number=singular Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps2msap", + "zaimek vrsta=svojilni oseba=druga spol=moški število=ednina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=masculine Number=singular Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps2msls", + "zaimek vrsta=svojilni oseba=druga spol=moški število=ednina sklon=mestnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=masculine Number=singular Case=locative Owner_Number=singular"); + InsertMsd( + "Ps2msld", + "zaimek vrsta=svojilni oseba=druga spol=moški število=ednina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=masculine Number=singular Case=locative Owner_Number=dual"); + InsertMsd( + "Ps2mslp", + "zaimek vrsta=svojilni oseba=druga spol=moški število=ednina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=masculine Number=singular Case=locative Owner_Number=plural"); + InsertMsd( + "Ps2msis", + "zaimek vrsta=svojilni oseba=druga spol=moški število=ednina sklon=orodnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=masculine Number=singular Case=instrumental Owner_Number=singular"); + InsertMsd( + "Ps2msid", + "zaimek vrsta=svojilni oseba=druga spol=moški število=ednina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=masculine Number=singular Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps2msip", + "zaimek vrsta=svojilni oseba=druga spol=moški število=ednina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=masculine Number=singular Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps2mdns", + "zaimek vrsta=svojilni oseba=druga spol=moški število=dvojina sklon=imenovalnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=masculine Number=dual Case=nominative Owner_Number=singular"); + InsertMsd( + "Ps2mdnd", + "zaimek vrsta=svojilni oseba=druga spol=moški število=dvojina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=masculine Number=dual Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps2mdnp", + "zaimek vrsta=svojilni oseba=druga spol=moški število=dvojina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=masculine Number=dual Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps2mdgs", + "zaimek vrsta=svojilni oseba=druga spol=moški število=dvojina sklon=rodilnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=masculine Number=dual Case=genitive Owner_Number=singular"); + InsertMsd( + "Ps2mdgd", + "zaimek vrsta=svojilni oseba=druga spol=moški število=dvojina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=masculine Number=dual Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps2mdgp", + "zaimek vrsta=svojilni oseba=druga spol=moški število=dvojina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=masculine Number=dual Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps2mdds", + "zaimek vrsta=svojilni oseba=druga spol=moški število=dvojina sklon=dajalnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=masculine Number=dual Case=dative Owner_Number=singular"); + InsertMsd( + "Ps2mddd", + "zaimek vrsta=svojilni oseba=druga spol=moški število=dvojina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=masculine Number=dual Case=dative Owner_Number=dual"); + InsertMsd( + "Ps2mddp", + "zaimek vrsta=svojilni oseba=druga spol=moški število=dvojina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=masculine Number=dual Case=dative Owner_Number=plural"); + InsertMsd( + "Ps2mdas", + "zaimek vrsta=svojilni oseba=druga spol=moški število=dvojina sklon=tožilnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=masculine Number=dual Case=accusative Owner_Number=singular"); + InsertMsd( + "Ps2mdad", + "zaimek vrsta=svojilni oseba=druga spol=moški število=dvojina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=masculine Number=dual Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps2mdap", + "zaimek vrsta=svojilni oseba=druga spol=moški število=dvojina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=masculine Number=dual Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps2mdls", + "zaimek vrsta=svojilni oseba=druga spol=moški število=dvojina sklon=mestnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=masculine Number=dual Case=locative Owner_Number=singular"); + InsertMsd( + "Ps2mdld", + "zaimek vrsta=svojilni oseba=druga spol=moški število=dvojina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=masculine Number=dual Case=locative Owner_Number=dual"); + InsertMsd( + "Ps2mdlp", + "zaimek vrsta=svojilni oseba=druga spol=moški število=dvojina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=masculine Number=dual Case=locative Owner_Number=plural"); + InsertMsd( + "Ps2mdis", + "zaimek vrsta=svojilni oseba=druga spol=moški število=dvojina sklon=orodnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=masculine Number=dual Case=instrumental Owner_Number=singular"); + InsertMsd( + "Ps2mdid", + "zaimek vrsta=svojilni oseba=druga spol=moški število=dvojina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=masculine Number=dual Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps2mdip", + "zaimek vrsta=svojilni oseba=druga spol=moški število=dvojina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=masculine Number=dual Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps2mpns", + "zaimek vrsta=svojilni oseba=druga spol=moški število=množina sklon=imenovalnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=masculine Number=plural Case=nominative Owner_Number=singular"); + InsertMsd( + "Ps2mpnd", + "zaimek vrsta=svojilni oseba=druga spol=moški število=množina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=masculine Number=plural Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps2mpnp", + "zaimek vrsta=svojilni oseba=druga spol=moški število=množina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=masculine Number=plural Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps2mpgs", + "zaimek vrsta=svojilni oseba=druga spol=moški število=množina sklon=rodilnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=masculine Number=plural Case=genitive Owner_Number=singular"); + InsertMsd( + "Ps2mpgd", + "zaimek vrsta=svojilni oseba=druga spol=moški število=množina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=masculine Number=plural Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps2mpgp", + "zaimek vrsta=svojilni oseba=druga spol=moški število=množina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=masculine Number=plural Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps2mpds", + "zaimek vrsta=svojilni oseba=druga spol=moški število=množina sklon=dajalnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=masculine Number=plural Case=dative Owner_Number=singular"); + InsertMsd( + "Ps2mpdd", + "zaimek vrsta=svojilni oseba=druga spol=moški število=množina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=masculine Number=plural Case=dative Owner_Number=dual"); + InsertMsd( + "Ps2mpdp", + "zaimek vrsta=svojilni oseba=druga spol=moški število=množina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=masculine Number=plural Case=dative Owner_Number=plural"); + InsertMsd( + "Ps2mpas", + "zaimek vrsta=svojilni oseba=druga spol=moški število=množina sklon=tožilnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=masculine Number=plural Case=accusative Owner_Number=singular"); + InsertMsd( + "Ps2mpad", + "zaimek vrsta=svojilni oseba=druga spol=moški število=množina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=masculine Number=plural Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps2mpap", + "zaimek vrsta=svojilni oseba=druga spol=moški število=množina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=masculine Number=plural Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps2mpls", + "zaimek vrsta=svojilni oseba=druga spol=moški število=množina sklon=mestnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=masculine Number=plural Case=locative Owner_Number=singular"); + InsertMsd( + "Ps2mpld", + "zaimek vrsta=svojilni oseba=druga spol=moški število=množina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=masculine Number=plural Case=locative Owner_Number=dual"); + InsertMsd( + "Ps2mplp", + "zaimek vrsta=svojilni oseba=druga spol=moški število=množina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=masculine Number=plural Case=locative Owner_Number=plural"); + InsertMsd( + "Ps2mpis", + "zaimek vrsta=svojilni oseba=druga spol=moški število=množina sklon=orodnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=masculine Number=plural Case=instrumental Owner_Number=singular"); + InsertMsd( + "Ps2mpid", + "zaimek vrsta=svojilni oseba=druga spol=moški število=množina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=masculine Number=plural Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps2mpip", + "zaimek vrsta=svojilni oseba=druga spol=moški število=množina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=masculine Number=plural Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps2fsns", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=ednina sklon=imenovalnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=feminine Number=singular Case=nominative Owner_Number=singular"); + InsertMsd( + "Ps2fsnd", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=ednina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=feminine Number=singular Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps2fsnp", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=ednina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=feminine Number=singular Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps2fsgs", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=ednina sklon=rodilnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=feminine Number=singular Case=genitive Owner_Number=singular"); + InsertMsd( + "Ps2fsgd", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=ednina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=feminine Number=singular Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps2fsgp", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=ednina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=feminine Number=singular Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps2fsds", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=ednina sklon=dajalnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=feminine Number=singular Case=dative Owner_Number=singular"); + InsertMsd( + "Ps2fsdd", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=ednina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=feminine Number=singular Case=dative Owner_Number=dual"); + InsertMsd( + "Ps2fsdp", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=ednina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=feminine Number=singular Case=dative Owner_Number=plural"); + InsertMsd( + "Ps2fsas", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=ednina sklon=tožilnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=feminine Number=singular Case=accusative Owner_Number=singular"); + InsertMsd( + "Ps2fsad", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=ednina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=feminine Number=singular Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps2fsap", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=ednina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=feminine Number=singular Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps2fsls", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=ednina sklon=mestnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=feminine Number=singular Case=locative Owner_Number=singular"); + InsertMsd( + "Ps2fsld", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=ednina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=feminine Number=singular Case=locative Owner_Number=dual"); + InsertMsd( + "Ps2fslp", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=ednina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=feminine Number=singular Case=locative Owner_Number=plural"); + InsertMsd( + "Ps2fsis", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=ednina sklon=orodnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=feminine Number=singular Case=instrumental Owner_Number=singular"); + InsertMsd( + "Ps2fsid", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=ednina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=feminine Number=singular Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps2fsip", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=ednina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=feminine Number=singular Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps2fdns", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=dvojina sklon=imenovalnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=feminine Number=dual Case=nominative Owner_Number=singular"); + InsertMsd( + "Ps2fdnd", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=dvojina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=feminine Number=dual Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps2fdnp", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=dvojina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=feminine Number=dual Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps2fdgs", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=dvojina sklon=rodilnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=feminine Number=dual Case=genitive Owner_Number=singular"); + InsertMsd( + "Ps2fdgd", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=dvojina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=feminine Number=dual Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps2fdgp", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=dvojina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=feminine Number=dual Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps2fdds", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=dvojina sklon=dajalnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=feminine Number=dual Case=dative Owner_Number=singular"); + InsertMsd( + "Ps2fddd", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=dvojina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=feminine Number=dual Case=dative Owner_Number=dual"); + InsertMsd( + "Ps2fddp", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=dvojina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=feminine Number=dual Case=dative Owner_Number=plural"); + InsertMsd( + "Ps2fdas", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=dvojina sklon=tožilnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=feminine Number=dual Case=accusative Owner_Number=singular"); + InsertMsd( + "Ps2fdad", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=dvojina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=feminine Number=dual Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps2fdap", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=dvojina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=feminine Number=dual Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps2fdls", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=dvojina sklon=mestnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=feminine Number=dual Case=locative Owner_Number=singular"); + InsertMsd( + "Ps2fdld", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=dvojina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=feminine Number=dual Case=locative Owner_Number=dual"); + InsertMsd( + "Ps2fdlp", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=dvojina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=feminine Number=dual Case=locative Owner_Number=plural"); + InsertMsd( + "Ps2fdis", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=dvojina sklon=orodnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=feminine Number=dual Case=instrumental Owner_Number=singular"); + InsertMsd( + "Ps2fdid", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=dvojina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=feminine Number=dual Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps2fdip", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=dvojina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=feminine Number=dual Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps2fpns", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=množina sklon=imenovalnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=feminine Number=plural Case=nominative Owner_Number=singular"); + InsertMsd( + "Ps2fpnd", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=množina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=feminine Number=plural Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps2fpnp", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=množina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=feminine Number=plural Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps2fpgs", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=množina sklon=rodilnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=feminine Number=plural Case=genitive Owner_Number=singular"); + InsertMsd( + "Ps2fpgd", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=množina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=feminine Number=plural Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps2fpgp", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=množina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=feminine Number=plural Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps2fpds", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=množina sklon=dajalnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=feminine Number=plural Case=dative Owner_Number=singular"); + InsertMsd( + "Ps2fpdd", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=množina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=feminine Number=plural Case=dative Owner_Number=dual"); + InsertMsd( + "Ps2fpdp", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=množina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=feminine Number=plural Case=dative Owner_Number=plural"); + InsertMsd( + "Ps2fpas", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=množina sklon=tožilnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=feminine Number=plural Case=accusative Owner_Number=singular"); + InsertMsd( + "Ps2fpad", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=množina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=feminine Number=plural Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps2fpap", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=množina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=feminine Number=plural Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps2fpls", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=množina sklon=mestnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=feminine Number=plural Case=locative Owner_Number=singular"); + InsertMsd( + "Ps2fpld", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=množina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=feminine Number=plural Case=locative Owner_Number=dual"); + InsertMsd( + "Ps2fplp", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=množina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=feminine Number=plural Case=locative Owner_Number=plural"); + InsertMsd( + "Ps2fpis", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=množina sklon=orodnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=feminine Number=plural Case=instrumental Owner_Number=singular"); + InsertMsd( + "Ps2fpid", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=množina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=feminine Number=plural Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps2fpip", + "zaimek vrsta=svojilni oseba=druga spol=ženski število=množina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=feminine Number=plural Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps2nsns", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=ednina sklon=imenovalnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=neuter Number=singular Case=nominative Owner_Number=singular"); + InsertMsd( + "Ps2nsnd", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=ednina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=neuter Number=singular Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps2nsnp", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=ednina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=neuter Number=singular Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps2nsgs", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=ednina sklon=rodilnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=neuter Number=singular Case=genitive Owner_Number=singular"); + InsertMsd( + "Ps2nsgd", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=ednina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=neuter Number=singular Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps2nsgp", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=ednina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=neuter Number=singular Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps2nsds", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=ednina sklon=dajalnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=neuter Number=singular Case=dative Owner_Number=singular"); + InsertMsd( + "Ps2nsdd", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=ednina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=neuter Number=singular Case=dative Owner_Number=dual"); + InsertMsd( + "Ps2nsdp", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=ednina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=neuter Number=singular Case=dative Owner_Number=plural"); + InsertMsd( + "Ps2nsas", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=ednina sklon=tožilnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=neuter Number=singular Case=accusative Owner_Number=singular"); + InsertMsd( + "Ps2nsad", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=ednina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=neuter Number=singular Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps2nsap", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=ednina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=neuter Number=singular Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps2nsls", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=ednina sklon=mestnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=neuter Number=singular Case=locative Owner_Number=singular"); + InsertMsd( + "Ps2nsld", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=ednina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=neuter Number=singular Case=locative Owner_Number=dual"); + InsertMsd( + "Ps2nslp", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=ednina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=neuter Number=singular Case=locative Owner_Number=plural"); + InsertMsd( + "Ps2nsis", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=ednina sklon=orodnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=neuter Number=singular Case=instrumental Owner_Number=singular"); + InsertMsd( + "Ps2nsid", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=ednina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=neuter Number=singular Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps2nsip", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=ednina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=neuter Number=singular Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps2ndns", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=dvojina sklon=imenovalnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=neuter Number=dual Case=nominative Owner_Number=singular"); + InsertMsd( + "Ps2ndnd", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=dvojina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=neuter Number=dual Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps2ndnp", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=dvojina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=neuter Number=dual Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps2ndgs", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=dvojina sklon=rodilnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=neuter Number=dual Case=genitive Owner_Number=singular"); + InsertMsd( + "Ps2ndgd", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=dvojina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=neuter Number=dual Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps2ndgp", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=dvojina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=neuter Number=dual Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps2ndds", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=dvojina sklon=dajalnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=neuter Number=dual Case=dative Owner_Number=singular"); + InsertMsd( + "Ps2nddd", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=dvojina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=neuter Number=dual Case=dative Owner_Number=dual"); + InsertMsd( + "Ps2nddp", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=dvojina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=neuter Number=dual Case=dative Owner_Number=plural"); + InsertMsd( + "Ps2ndas", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=dvojina sklon=tožilnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=neuter Number=dual Case=accusative Owner_Number=singular"); + InsertMsd( + "Ps2ndad", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=dvojina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=neuter Number=dual Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps2ndap", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=dvojina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=neuter Number=dual Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps2ndls", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=dvojina sklon=mestnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=neuter Number=dual Case=locative Owner_Number=singular"); + InsertMsd( + "Ps2ndld", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=dvojina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=neuter Number=dual Case=locative Owner_Number=dual"); + InsertMsd( + "Ps2ndlp", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=dvojina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=neuter Number=dual Case=locative Owner_Number=plural"); + InsertMsd( + "Ps2ndis", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=dvojina sklon=orodnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=neuter Number=dual Case=instrumental Owner_Number=singular"); + InsertMsd( + "Ps2ndid", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=dvojina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=neuter Number=dual Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps2ndip", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=dvojina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=neuter Number=dual Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps2npns", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=množina sklon=imenovalnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=neuter Number=plural Case=nominative Owner_Number=singular"); + InsertMsd( + "Ps2npnd", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=množina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=neuter Number=plural Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps2npnp", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=množina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=neuter Number=plural Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps2npgs", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=množina sklon=rodilnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=neuter Number=plural Case=genitive Owner_Number=singular"); + InsertMsd( + "Ps2npgd", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=množina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=neuter Number=plural Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps2npgp", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=množina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=neuter Number=plural Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps2npds", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=množina sklon=dajalnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=neuter Number=plural Case=dative Owner_Number=singular"); + InsertMsd( + "Ps2npdd", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=množina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=neuter Number=plural Case=dative Owner_Number=dual"); + InsertMsd( + "Ps2npdp", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=množina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=neuter Number=plural Case=dative Owner_Number=plural"); + InsertMsd( + "Ps2npas", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=množina sklon=tožilnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=neuter Number=plural Case=accusative Owner_Number=singular"); + InsertMsd( + "Ps2npad", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=množina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=neuter Number=plural Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps2npap", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=množina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=neuter Number=plural Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps2npls", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=množina sklon=mestnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=neuter Number=plural Case=locative Owner_Number=singular"); + InsertMsd( + "Ps2npld", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=množina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=neuter Number=plural Case=locative Owner_Number=dual"); + InsertMsd( + "Ps2nplp", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=množina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=neuter Number=plural Case=locative Owner_Number=plural"); + InsertMsd( + "Ps2npis", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=množina sklon=orodnik število_svojine=ednina", + "Pronoun Type=possessive Person=second Gender=neuter Number=plural Case=instrumental Owner_Number=singular"); + InsertMsd( + "Ps2npid", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=množina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=second Gender=neuter Number=plural Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps2npip", + "zaimek vrsta=svojilni oseba=druga spol=srednji število=množina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=second Gender=neuter Number=plural Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps3msnsm", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=imenovalnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=nominative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3msnsf", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=imenovalnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=nominative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3msnsn", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=imenovalnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=nominative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3msnd", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps3msnp", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps3msgsm", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=rodilnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=genitive Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3msgsf", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=rodilnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=genitive Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3msgsn", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=rodilnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=genitive Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3msgd", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps3msgp", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps3msdsm", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=dajalnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=dative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3msdsf", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=dajalnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=dative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3msdsn", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=dajalnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=dative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3msdd", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=dative Owner_Number=dual"); + InsertMsd( + "Ps3msdp", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=dative Owner_Number=plural"); + InsertMsd( + "Ps3msasm", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=tožilnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=accusative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3msasf", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=tožilnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=accusative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3msasn", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=tožilnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=accusative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3msad", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps3msap", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps3mslsm", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=mestnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=locative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3mslsf", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=mestnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=locative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3mslsn", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=mestnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=locative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3msld", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=locative Owner_Number=dual"); + InsertMsd( + "Ps3mslp", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=locative Owner_Number=plural"); + InsertMsd( + "Ps3msism", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=orodnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=instrumental Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3msisf", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=orodnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=instrumental Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3msisn", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=orodnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=instrumental Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3msid", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps3msip", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=ednina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=masculine Number=singular Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps3mdnsm", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=imenovalnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=nominative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3mdnsf", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=imenovalnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=nominative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3mdnsn", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=imenovalnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=nominative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3mdnd", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps3mdnp", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps3mdgsm", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=rodilnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=genitive Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3mdgsf", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=rodilnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=genitive Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3mdgsn", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=rodilnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=genitive Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3mdgd", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps3mdgp", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps3mddsm", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=dajalnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=dative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3mddsf", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=dajalnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=dative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3mddsn", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=dajalnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=dative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3mddd", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=dative Owner_Number=dual"); + InsertMsd( + "Ps3mddp", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=dative Owner_Number=plural"); + InsertMsd( + "Ps3mdasm", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=tožilnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=accusative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3mdasf", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=tožilnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=accusative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3mdasn", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=tožilnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=accusative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3mdad", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps3mdap", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps3mdlsm", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=mestnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=locative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3mdlsf", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=mestnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=locative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3mdlsn", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=mestnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=locative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3mdld", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=locative Owner_Number=dual"); + InsertMsd( + "Ps3mdlp", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=locative Owner_Number=plural"); + InsertMsd( + "Ps3mdism", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=orodnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=instrumental Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3mdisf", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=orodnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=instrumental Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3mdisn", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=orodnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=instrumental Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3mdid", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps3mdip", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=dvojina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=masculine Number=dual Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps3mpnsm", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=imenovalnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=nominative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3mpnsf", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=imenovalnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=nominative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3mpnsn", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=imenovalnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=nominative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3mpnd", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps3mpnp", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps3mpgsm", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=rodilnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=genitive Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3mpgsf", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=rodilnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=genitive Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3mpgsn", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=rodilnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=genitive Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3mpgd", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps3mpgp", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps3mpdsm", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=dajalnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=dative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3mpdsf", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=dajalnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=dative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3mpdsn", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=dajalnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=dative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3mpdd", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=dative Owner_Number=dual"); + InsertMsd( + "Ps3mpdp", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=dative Owner_Number=plural"); + InsertMsd( + "Ps3mpasm", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=tožilnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=accusative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3mpasf", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=tožilnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=accusative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3mpasn", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=tožilnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=accusative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3mpad", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps3mpap", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps3mplsm", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=mestnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=locative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3mplsf", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=mestnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=locative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3mplsn", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=mestnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=locative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3mpld", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=locative Owner_Number=dual"); + InsertMsd( + "Ps3mplp", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=locative Owner_Number=plural"); + InsertMsd( + "Ps3mpism", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=orodnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=instrumental Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3mpisf", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=orodnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=instrumental Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3mpisn", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=orodnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=instrumental Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3mpid", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps3mpip", + "zaimek vrsta=svojilni oseba=tretja spol=moški število=množina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=masculine Number=plural Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps3fsnsm", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=imenovalnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=nominative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3fsnsf", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=imenovalnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=nominative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3fsnsn", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=imenovalnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=nominative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3fsnd", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps3fsnp", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps3fsgsm", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=rodilnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=genitive Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3fsgsf", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=rodilnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=genitive Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3fsgsn", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=rodilnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=genitive Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3fsgd", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps3fsgp", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps3fsdsm", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=dajalnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=dative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3fsdsf", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=dajalnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=dative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3fsdsn", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=dajalnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=dative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3fsdd", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=dative Owner_Number=dual"); + InsertMsd( + "Ps3fsdp", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=dative Owner_Number=plural"); + InsertMsd( + "Ps3fsasm", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=tožilnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=accusative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3fsasf", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=tožilnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=accusative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3fsasn", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=tožilnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=accusative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3fsad", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps3fsap", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps3fslsm", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=mestnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=locative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3fslsf", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=mestnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=locative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3fslsn", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=mestnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=locative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3fsld", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=locative Owner_Number=dual"); + InsertMsd( + "Ps3fslp", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=locative Owner_Number=plural"); + InsertMsd( + "Ps3fsism", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=orodnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=instrumental Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3fsisf", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=orodnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=instrumental Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3fsisn", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=orodnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=instrumental Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3fsid", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps3fsip", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=ednina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=feminine Number=singular Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps3fdnsm", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=imenovalnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=nominative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3fdnsf", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=imenovalnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=nominative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3fdnsn", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=imenovalnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=nominative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3fdnd", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps3fdnp", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps3fdgsm", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=rodilnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=genitive Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3fdgsf", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=rodilnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=genitive Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3fdgsn", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=rodilnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=genitive Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3fdgd", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps3fdgp", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps3fddsm", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=dajalnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=dative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3fddsf", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=dajalnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=dative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3fddsn", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=dajalnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=dative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3fddd", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=dative Owner_Number=dual"); + InsertMsd( + "Ps3fddp", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=dative Owner_Number=plural"); + InsertMsd( + "Ps3fdasm", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=tožilnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=accusative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3fdasf", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=tožilnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=accusative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3fdasn", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=tožilnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=accusative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3fdad", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps3fdap", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps3fdlsm", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=mestnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=locative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3fdlsf", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=mestnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=locative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3fdlsn", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=mestnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=locative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3fdld", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=locative Owner_Number=dual"); + InsertMsd( + "Ps3fdlp", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=locative Owner_Number=plural"); + InsertMsd( + "Ps3fdism", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=orodnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=instrumental Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3fdisf", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=orodnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=instrumental Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3fdisn", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=orodnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=instrumental Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3fdid", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps3fdip", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=dvojina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=feminine Number=dual Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps3fpnsm", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=imenovalnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=nominative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3fpnsf", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=imenovalnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=nominative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3fpnsn", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=imenovalnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=nominative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3fpnd", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps3fpnp", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps3fpgsm", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=rodilnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=genitive Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3fpgsf", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=rodilnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=genitive Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3fpgsn", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=rodilnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=genitive Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3fpgd", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps3fpgp", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps3fpdsm", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=dajalnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=dative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3fpdsf", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=dajalnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=dative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3fpdsn", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=dajalnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=dative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3fpdd", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=dative Owner_Number=dual"); + InsertMsd( + "Ps3fpdp", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=dative Owner_Number=plural"); + InsertMsd( + "Ps3fpasm", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=tožilnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=accusative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3fpasf", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=tožilnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=accusative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3fpasn", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=tožilnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=accusative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3fpad", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps3fpap", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps3fplsm", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=mestnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=locative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3fplsf", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=mestnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=locative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3fplsn", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=mestnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=locative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3fpld", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=locative Owner_Number=dual"); + InsertMsd( + "Ps3fplp", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=locative Owner_Number=plural"); + InsertMsd( + "Ps3fpism", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=orodnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=instrumental Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3fpisf", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=orodnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=instrumental Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3fpisn", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=orodnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=instrumental Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3fpid", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps3fpip", + "zaimek vrsta=svojilni oseba=tretja spol=ženski število=množina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=feminine Number=plural Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps3nsnsm", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=imenovalnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=nominative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3nsnsf", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=imenovalnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=nominative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3nsnsn", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=imenovalnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=nominative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3nsnd", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps3nsnp", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps3nsgsm", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=rodilnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=genitive Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3nsgsf", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=rodilnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=genitive Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3nsgsn", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=rodilnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=genitive Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3nsgd", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps3nsgp", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps3nsdsm", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=dajalnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=dative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3nsdsf", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=dajalnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=dative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3nsdsn", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=dajalnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=dative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3nsdd", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=dative Owner_Number=dual"); + InsertMsd( + "Ps3nsdp", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=dative Owner_Number=plural"); + InsertMsd( + "Ps3nsasm", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=tožilnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=accusative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3nsasf", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=tožilnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=accusative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3nsasn", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=tožilnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=accusative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3nsad", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps3nsap", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps3nslsm", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=mestnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=locative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3nslsf", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=mestnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=locative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3nslsn", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=mestnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=locative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3nsld", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=locative Owner_Number=dual"); + InsertMsd( + "Ps3nslp", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=locative Owner_Number=plural"); + InsertMsd( + "Ps3nsism", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=orodnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=instrumental Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3nsisf", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=orodnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=instrumental Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3nsisn", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=orodnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=instrumental Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3nsid", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps3nsip", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=ednina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=neuter Number=singular Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps3ndnsm", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=imenovalnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=nominative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3ndnsf", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=imenovalnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=nominative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3ndnsn", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=imenovalnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=nominative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3ndnd", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps3ndnp", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps3ndgsm", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=rodilnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=genitive Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3ndgsf", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=rodilnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=genitive Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3ndgsn", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=rodilnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=genitive Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3ndgd", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps3ndgp", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps3nddsm", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=dajalnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=dative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3nddsf", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=dajalnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=dative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3nddsn", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=dajalnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=dative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3nddd", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=dative Owner_Number=dual"); + InsertMsd( + "Ps3nddp", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=dative Owner_Number=plural"); + InsertMsd( + "Ps3ndasm", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=tožilnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=accusative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3ndasf", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=tožilnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=accusative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3ndasn", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=tožilnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=accusative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3ndad", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps3ndap", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps3ndlsm", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=mestnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=locative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3ndlsf", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=mestnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=locative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3ndlsn", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=mestnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=locative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3ndld", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=locative Owner_Number=dual"); + InsertMsd( + "Ps3ndlp", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=locative Owner_Number=plural"); + InsertMsd( + "Ps3ndism", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=orodnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=instrumental Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3ndisf", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=orodnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=instrumental Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3ndisn", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=orodnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=instrumental Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3ndid", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps3ndip", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=dvojina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=neuter Number=dual Case=instrumental Owner_Number=plural"); + InsertMsd( + "Ps3npnsm", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=imenovalnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=nominative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3npnsf", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=imenovalnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=nominative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3npnsn", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=imenovalnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=nominative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3npnd", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=imenovalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=nominative Owner_Number=dual"); + InsertMsd( + "Ps3npnp", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=imenovalnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=nominative Owner_Number=plural"); + InsertMsd( + "Ps3npgsm", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=rodilnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=genitive Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3npgsf", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=rodilnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=genitive Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3npgsn", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=rodilnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=genitive Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3npgd", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=rodilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=genitive Owner_Number=dual"); + InsertMsd( + "Ps3npgp", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=rodilnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=genitive Owner_Number=plural"); + InsertMsd( + "Ps3npdsm", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=dajalnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=dative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3npdsf", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=dajalnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=dative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3npdsn", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=dajalnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=dative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3npdd", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=dajalnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=dative Owner_Number=dual"); + InsertMsd( + "Ps3npdp", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=dajalnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=dative Owner_Number=plural"); + InsertMsd( + "Ps3npasm", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=tožilnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=accusative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3npasf", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=tožilnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=accusative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3npasn", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=tožilnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=accusative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3npad", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=tožilnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=accusative Owner_Number=dual"); + InsertMsd( + "Ps3npap", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=tožilnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=accusative Owner_Number=plural"); + InsertMsd( + "Ps3nplsm", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=mestnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=locative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3nplsf", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=mestnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=locative Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3nplsn", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=mestnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=locative Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3npld", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=mestnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=locative Owner_Number=dual"); + InsertMsd( + "Ps3nplp", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=mestnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=locative Owner_Number=plural"); + InsertMsd( + "Ps3npism", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=orodnik število_svojine=ednina spol_svojine=moški", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=instrumental Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Ps3npisf", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=orodnik število_svojine=ednina spol_svojine=ženski", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=instrumental Owner_Number=singular Owner_Gender=feminine"); + InsertMsd( + "Ps3npisn", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=orodnik število_svojine=ednina spol_svojine=srednji", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=instrumental Owner_Number=singular Owner_Gender=neuter"); + InsertMsd( + "Ps3npid", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=orodnik število_svojine=dvojina", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=instrumental Owner_Number=dual"); + InsertMsd( + "Ps3npip", + "zaimek vrsta=svojilni oseba=tretja spol=srednji število=množina sklon=orodnik število_svojine=množina", + "Pronoun Type=possessive Person=third Gender=neuter Number=plural Case=instrumental Owner_Number=plural"); + InsertMsd( + "Pd-msn", + "zaimek vrsta=kazalni spol=moški število=ednina sklon=imenovalnik", + "Pronoun Type=demonstrative Gender=masculine Number=singular Case=nominative"); + InsertMsd( + "Pd-msg", + "zaimek vrsta=kazalni spol=moški število=ednina sklon=rodilnik", + "Pronoun Type=demonstrative Gender=masculine Number=singular Case=genitive"); + InsertMsd( + "Pd-msd", + "zaimek vrsta=kazalni spol=moški število=ednina sklon=dajalnik", + "Pronoun Type=demonstrative Gender=masculine Number=singular Case=dative"); + InsertMsd( + "Pd-msa", + "zaimek vrsta=kazalni spol=moški število=ednina sklon=tožilnik", + "Pronoun Type=demonstrative Gender=masculine Number=singular Case=accusative"); + InsertMsd( + "Pd-msl", + "zaimek vrsta=kazalni spol=moški število=ednina sklon=mestnik", + "Pronoun Type=demonstrative Gender=masculine Number=singular Case=locative"); + InsertMsd( + "Pd-msi", + "zaimek vrsta=kazalni spol=moški število=ednina sklon=orodnik", + "Pronoun Type=demonstrative Gender=masculine Number=singular Case=instrumental"); + InsertMsd( + "Pd-mdn", + "zaimek vrsta=kazalni spol=moški število=dvojina sklon=imenovalnik", + "Pronoun Type=demonstrative Gender=masculine Number=dual Case=nominative"); + InsertMsd( + "Pd-mdg", + "zaimek vrsta=kazalni spol=moški število=dvojina sklon=rodilnik", + "Pronoun Type=demonstrative Gender=masculine Number=dual Case=genitive"); + InsertMsd( + "Pd-mdd", + "zaimek vrsta=kazalni spol=moški število=dvojina sklon=dajalnik", + "Pronoun Type=demonstrative Gender=masculine Number=dual Case=dative"); + InsertMsd( + "Pd-mda", + "zaimek vrsta=kazalni spol=moški število=dvojina sklon=tožilnik", + "Pronoun Type=demonstrative Gender=masculine Number=dual Case=accusative"); + InsertMsd( + "Pd-mdl", + "zaimek vrsta=kazalni spol=moški število=dvojina sklon=mestnik", + "Pronoun Type=demonstrative Gender=masculine Number=dual Case=locative"); + InsertMsd( + "Pd-mdi", + "zaimek vrsta=kazalni spol=moški število=dvojina sklon=orodnik", + "Pronoun Type=demonstrative Gender=masculine Number=dual Case=instrumental"); + InsertMsd( + "Pd-mpn", + "zaimek vrsta=kazalni spol=moški število=množina sklon=imenovalnik", + "Pronoun Type=demonstrative Gender=masculine Number=plural Case=nominative"); + InsertMsd( + "Pd-mpg", + "zaimek vrsta=kazalni spol=moški število=množina sklon=rodilnik", + "Pronoun Type=demonstrative Gender=masculine Number=plural Case=genitive"); + InsertMsd( + "Pd-mpd", + "zaimek vrsta=kazalni spol=moški število=množina sklon=dajalnik", + "Pronoun Type=demonstrative Gender=masculine Number=plural Case=dative"); + InsertMsd( + "Pd-mpa", + "zaimek vrsta=kazalni spol=moški število=množina sklon=tožilnik", + "Pronoun Type=demonstrative Gender=masculine Number=plural Case=accusative"); + InsertMsd( + "Pd-mpl", + "zaimek vrsta=kazalni spol=moški število=množina sklon=mestnik", + "Pronoun Type=demonstrative Gender=masculine Number=plural Case=locative"); + InsertMsd( + "Pd-mpi", + "zaimek vrsta=kazalni spol=moški število=množina sklon=orodnik", + "Pronoun Type=demonstrative Gender=masculine Number=plural Case=instrumental"); + InsertMsd( + "Pd-fsn", + "zaimek vrsta=kazalni spol=ženski število=ednina sklon=imenovalnik", + "Pronoun Type=demonstrative Gender=feminine Number=singular Case=nominative"); + InsertMsd( + "Pd-fsg", + "zaimek vrsta=kazalni spol=ženski število=ednina sklon=rodilnik", + "Pronoun Type=demonstrative Gender=feminine Number=singular Case=genitive"); + InsertMsd( + "Pd-fsd", + "zaimek vrsta=kazalni spol=ženski število=ednina sklon=dajalnik", + "Pronoun Type=demonstrative Gender=feminine Number=singular Case=dative"); + InsertMsd( + "Pd-fsa", + "zaimek vrsta=kazalni spol=ženski število=ednina sklon=tožilnik", + "Pronoun Type=demonstrative Gender=feminine Number=singular Case=accusative"); + InsertMsd( + "Pd-fsl", + "zaimek vrsta=kazalni spol=ženski število=ednina sklon=mestnik", + "Pronoun Type=demonstrative Gender=feminine Number=singular Case=locative"); + InsertMsd( + "Pd-fsi", + "zaimek vrsta=kazalni spol=ženski število=ednina sklon=orodnik", + "Pronoun Type=demonstrative Gender=feminine Number=singular Case=instrumental"); + InsertMsd( + "Pd-fdn", + "zaimek vrsta=kazalni spol=ženski število=dvojina sklon=imenovalnik", + "Pronoun Type=demonstrative Gender=feminine Number=dual Case=nominative"); + InsertMsd( + "Pd-fdg", + "zaimek vrsta=kazalni spol=ženski število=dvojina sklon=rodilnik", + "Pronoun Type=demonstrative Gender=feminine Number=dual Case=genitive"); + InsertMsd( + "Pd-fdd", + "zaimek vrsta=kazalni spol=ženski število=dvojina sklon=dajalnik", + "Pronoun Type=demonstrative Gender=feminine Number=dual Case=dative"); + InsertMsd( + "Pd-fda", + "zaimek vrsta=kazalni spol=ženski število=dvojina sklon=tožilnik", + "Pronoun Type=demonstrative Gender=feminine Number=dual Case=accusative"); + InsertMsd( + "Pd-fdl", + "zaimek vrsta=kazalni spol=ženski število=dvojina sklon=mestnik", + "Pronoun Type=demonstrative Gender=feminine Number=dual Case=locative"); + InsertMsd( + "Pd-fdi", + "zaimek vrsta=kazalni spol=ženski število=dvojina sklon=orodnik", + "Pronoun Type=demonstrative Gender=feminine Number=dual Case=instrumental"); + InsertMsd( + "Pd-fpn", + "zaimek vrsta=kazalni spol=ženski število=množina sklon=imenovalnik", + "Pronoun Type=demonstrative Gender=feminine Number=plural Case=nominative"); + InsertMsd( + "Pd-fpg", + "zaimek vrsta=kazalni spol=ženski število=množina sklon=rodilnik", + "Pronoun Type=demonstrative Gender=feminine Number=plural Case=genitive"); + InsertMsd( + "Pd-fpd", + "zaimek vrsta=kazalni spol=ženski število=množina sklon=dajalnik", + "Pronoun Type=demonstrative Gender=feminine Number=plural Case=dative"); + InsertMsd( + "Pd-fpa", + "zaimek vrsta=kazalni spol=ženski število=množina sklon=tožilnik", + "Pronoun Type=demonstrative Gender=feminine Number=plural Case=accusative"); + InsertMsd( + "Pd-fpl", + "zaimek vrsta=kazalni spol=ženski število=množina sklon=mestnik", + "Pronoun Type=demonstrative Gender=feminine Number=plural Case=locative"); + InsertMsd( + "Pd-fpi", + "zaimek vrsta=kazalni spol=ženski število=množina sklon=orodnik", + "Pronoun Type=demonstrative Gender=feminine Number=plural Case=instrumental"); + InsertMsd( + "Pd-nsn", + "zaimek vrsta=kazalni spol=srednji število=ednina sklon=imenovalnik", + "Pronoun Type=demonstrative Gender=neuter Number=singular Case=nominative"); + InsertMsd( + "Pd-nsg", + "zaimek vrsta=kazalni spol=srednji število=ednina sklon=rodilnik", + "Pronoun Type=demonstrative Gender=neuter Number=singular Case=genitive"); + InsertMsd( + "Pd-nsd", + "zaimek vrsta=kazalni spol=srednji število=ednina sklon=dajalnik", + "Pronoun Type=demonstrative Gender=neuter Number=singular Case=dative"); + InsertMsd( + "Pd-nsa", + "zaimek vrsta=kazalni spol=srednji število=ednina sklon=tožilnik", + "Pronoun Type=demonstrative Gender=neuter Number=singular Case=accusative"); + InsertMsd( + "Pd-nsl", + "zaimek vrsta=kazalni spol=srednji število=ednina sklon=mestnik", + "Pronoun Type=demonstrative Gender=neuter Number=singular Case=locative"); + InsertMsd( + "Pd-nsi", + "zaimek vrsta=kazalni spol=srednji število=ednina sklon=orodnik", + "Pronoun Type=demonstrative Gender=neuter Number=singular Case=instrumental"); + InsertMsd( + "Pd-ndn", + "zaimek vrsta=kazalni spol=srednji število=dvojina sklon=imenovalnik", + "Pronoun Type=demonstrative Gender=neuter Number=dual Case=nominative"); + InsertMsd( + "Pd-ndg", + "zaimek vrsta=kazalni spol=srednji število=dvojina sklon=rodilnik", + "Pronoun Type=demonstrative Gender=neuter Number=dual Case=genitive"); + InsertMsd( + "Pd-ndd", + "zaimek vrsta=kazalni spol=srednji število=dvojina sklon=dajalnik", + "Pronoun Type=demonstrative Gender=neuter Number=dual Case=dative"); + InsertMsd( + "Pd-nda", + "zaimek vrsta=kazalni spol=srednji število=dvojina sklon=tožilnik", + "Pronoun Type=demonstrative Gender=neuter Number=dual Case=accusative"); + InsertMsd( + "Pd-ndl", + "zaimek vrsta=kazalni spol=srednji število=dvojina sklon=mestnik", + "Pronoun Type=demonstrative Gender=neuter Number=dual Case=locative"); + InsertMsd( + "Pd-ndi", + "zaimek vrsta=kazalni spol=srednji število=dvojina sklon=orodnik", + "Pronoun Type=demonstrative Gender=neuter Number=dual Case=instrumental"); + InsertMsd( + "Pd-npn", + "zaimek vrsta=kazalni spol=srednji število=množina sklon=imenovalnik", + "Pronoun Type=demonstrative Gender=neuter Number=plural Case=nominative"); + InsertMsd( + "Pd-npg", + "zaimek vrsta=kazalni spol=srednji število=množina sklon=rodilnik", + "Pronoun Type=demonstrative Gender=neuter Number=plural Case=genitive"); + InsertMsd( + "Pd-npd", + "zaimek vrsta=kazalni spol=srednji število=množina sklon=dajalnik", + "Pronoun Type=demonstrative Gender=neuter Number=plural Case=dative"); + InsertMsd( + "Pd-npa", + "zaimek vrsta=kazalni spol=srednji število=množina sklon=tožilnik", + "Pronoun Type=demonstrative Gender=neuter Number=plural Case=accusative"); + InsertMsd( + "Pd-npl", + "zaimek vrsta=kazalni spol=srednji število=množina sklon=mestnik", + "Pronoun Type=demonstrative Gender=neuter Number=plural Case=locative"); + InsertMsd( + "Pd-npi", + "zaimek vrsta=kazalni spol=srednji število=množina sklon=orodnik", + "Pronoun Type=demonstrative Gender=neuter Number=plural Case=instrumental"); + InsertMsd("Pr", "zaimek vrsta=oziralni", "Pronoun Type=relative"); + InsertMsd( + "Pr----sm", + "zaimek vrsta=oziralni število_svojine=ednina spol_svojine=moški", + "Pronoun Type=relative Owner_Number=singular Owner_Gender=masculine"); + InsertMsd( + "Pr-msn", + "zaimek vrsta=oziralni spol=moški število=ednina sklon=imenovalnik", + "Pronoun Type=relative Gender=masculine Number=singular Case=nominative"); + InsertMsd( + "Pr-msg", + "zaimek vrsta=oziralni spol=moški število=ednina sklon=rodilnik", + "Pronoun Type=relative Gender=masculine Number=singular Case=genitive"); + InsertMsd( + "Pr-msd", + "zaimek vrsta=oziralni spol=moški število=ednina sklon=dajalnik", + "Pronoun Type=relative Gender=masculine Number=singular Case=dative"); + InsertMsd( + "Pr-msa", + "zaimek vrsta=oziralni spol=moški število=ednina sklon=tožilnik", + "Pronoun Type=relative Gender=masculine Number=singular Case=accusative"); + InsertMsd( + "Pr-msl", + "zaimek vrsta=oziralni spol=moški število=ednina sklon=mestnik", + "Pronoun Type=relative Gender=masculine Number=singular Case=locative"); + InsertMsd( + "Pr-msi", + "zaimek vrsta=oziralni spol=moški število=ednina sklon=orodnik", + "Pronoun Type=relative Gender=masculine Number=singular Case=instrumental"); + InsertMsd( + "Pr-mdn", + "zaimek vrsta=oziralni spol=moški število=dvojina sklon=imenovalnik", + "Pronoun Type=relative Gender=masculine Number=dual Case=nominative"); + InsertMsd( + "Pr-mdg", + "zaimek vrsta=oziralni spol=moški število=dvojina sklon=rodilnik", + "Pronoun Type=relative Gender=masculine Number=dual Case=genitive"); + InsertMsd( + "Pr-mdd", + "zaimek vrsta=oziralni spol=moški število=dvojina sklon=dajalnik", + "Pronoun Type=relative Gender=masculine Number=dual Case=dative"); + InsertMsd( + "Pr-mda", + "zaimek vrsta=oziralni spol=moški število=dvojina sklon=tožilnik", + "Pronoun Type=relative Gender=masculine Number=dual Case=accusative"); + InsertMsd( + "Pr-mdl", + "zaimek vrsta=oziralni spol=moški število=dvojina sklon=mestnik", + "Pronoun Type=relative Gender=masculine Number=dual Case=locative"); + InsertMsd( + "Pr-mdi", + "zaimek vrsta=oziralni spol=moški število=dvojina sklon=orodnik", + "Pronoun Type=relative Gender=masculine Number=dual Case=instrumental"); + InsertMsd( + "Pr-mpn", + "zaimek vrsta=oziralni spol=moški število=množina sklon=imenovalnik", + "Pronoun Type=relative Gender=masculine Number=plural Case=nominative"); + InsertMsd( + "Pr-mpg", + "zaimek vrsta=oziralni spol=moški število=množina sklon=rodilnik", + "Pronoun Type=relative Gender=masculine Number=plural Case=genitive"); + InsertMsd( + "Pr-mpd", + "zaimek vrsta=oziralni spol=moški število=množina sklon=dajalnik", + "Pronoun Type=relative Gender=masculine Number=plural Case=dative"); + InsertMsd( + "Pr-mpa", + "zaimek vrsta=oziralni spol=moški število=množina sklon=tožilnik", + "Pronoun Type=relative Gender=masculine Number=plural Case=accusative"); + InsertMsd( + "Pr-mpl", + "zaimek vrsta=oziralni spol=moški število=množina sklon=mestnik", + "Pronoun Type=relative Gender=masculine Number=plural Case=locative"); + InsertMsd( + "Pr-mpi", + "zaimek vrsta=oziralni spol=moški število=množina sklon=orodnik", + "Pronoun Type=relative Gender=masculine Number=plural Case=instrumental"); + InsertMsd( + "Pr-fsn", + "zaimek vrsta=oziralni spol=ženski število=ednina sklon=imenovalnik", + "Pronoun Type=relative Gender=feminine Number=singular Case=nominative"); + InsertMsd( + "Pr-fsg", + "zaimek vrsta=oziralni spol=ženski število=ednina sklon=rodilnik", + "Pronoun Type=relative Gender=feminine Number=singular Case=genitive"); + InsertMsd( + "Pr-fsd", + "zaimek vrsta=oziralni spol=ženski število=ednina sklon=dajalnik", + "Pronoun Type=relative Gender=feminine Number=singular Case=dative"); + InsertMsd( + "Pr-fsa", + "zaimek vrsta=oziralni spol=ženski število=ednina sklon=tožilnik", + "Pronoun Type=relative Gender=feminine Number=singular Case=accusative"); + InsertMsd( + "Pr-fsl", + "zaimek vrsta=oziralni spol=ženski število=ednina sklon=mestnik", + "Pronoun Type=relative Gender=feminine Number=singular Case=locative"); + InsertMsd( + "Pr-fsi", + "zaimek vrsta=oziralni spol=ženski število=ednina sklon=orodnik", + "Pronoun Type=relative Gender=feminine Number=singular Case=instrumental"); + InsertMsd( + "Pr-fdn", + "zaimek vrsta=oziralni spol=ženski število=dvojina sklon=imenovalnik", + "Pronoun Type=relative Gender=feminine Number=dual Case=nominative"); + InsertMsd( + "Pr-fdg", + "zaimek vrsta=oziralni spol=ženski število=dvojina sklon=rodilnik", + "Pronoun Type=relative Gender=feminine Number=dual Case=genitive"); + InsertMsd( + "Pr-fdd", + "zaimek vrsta=oziralni spol=ženski število=dvojina sklon=dajalnik", + "Pronoun Type=relative Gender=feminine Number=dual Case=dative"); + InsertMsd( + "Pr-fda", + "zaimek vrsta=oziralni spol=ženski število=dvojina sklon=tožilnik", + "Pronoun Type=relative Gender=feminine Number=dual Case=accusative"); + InsertMsd( + "Pr-fdl", + "zaimek vrsta=oziralni spol=ženski število=dvojina sklon=mestnik", + "Pronoun Type=relative Gender=feminine Number=dual Case=locative"); + InsertMsd( + "Pr-fdi", + "zaimek vrsta=oziralni spol=ženski število=dvojina sklon=orodnik", + "Pronoun Type=relative Gender=feminine Number=dual Case=instrumental"); + InsertMsd( + "Pr-fpn", + "zaimek vrsta=oziralni spol=ženski število=množina sklon=imenovalnik", + "Pronoun Type=relative Gender=feminine Number=plural Case=nominative"); + InsertMsd( + "Pr-fpg", + "zaimek vrsta=oziralni spol=ženski število=množina sklon=rodilnik", + "Pronoun Type=relative Gender=feminine Number=plural Case=genitive"); + InsertMsd( + "Pr-fpd", + "zaimek vrsta=oziralni spol=ženski število=množina sklon=dajalnik", + "Pronoun Type=relative Gender=feminine Number=plural Case=dative"); + InsertMsd( + "Pr-fpa", + "zaimek vrsta=oziralni spol=ženski število=množina sklon=tožilnik", + "Pronoun Type=relative Gender=feminine Number=plural Case=accusative"); + InsertMsd( + "Pr-fpl", + "zaimek vrsta=oziralni spol=ženski število=množina sklon=mestnik", + "Pronoun Type=relative Gender=feminine Number=plural Case=locative"); + InsertMsd( + "Pr-fpi", + "zaimek vrsta=oziralni spol=ženski število=množina sklon=orodnik", + "Pronoun Type=relative Gender=feminine Number=plural Case=instrumental"); + InsertMsd( + "Pr-nsn", + "zaimek vrsta=oziralni spol=srednji število=ednina sklon=imenovalnik", + "Pronoun Type=relative Gender=neuter Number=singular Case=nominative"); + InsertMsd( + "Pr-nsg", + "zaimek vrsta=oziralni spol=srednji število=ednina sklon=rodilnik", + "Pronoun Type=relative Gender=neuter Number=singular Case=genitive"); + InsertMsd( + "Pr-nsd", + "zaimek vrsta=oziralni spol=srednji število=ednina sklon=dajalnik", + "Pronoun Type=relative Gender=neuter Number=singular Case=dative"); + InsertMsd( + "Pr-nsa", + "zaimek vrsta=oziralni spol=srednji število=ednina sklon=tožilnik", + "Pronoun Type=relative Gender=neuter Number=singular Case=accusative"); + InsertMsd( + "Pr-nsl", + "zaimek vrsta=oziralni spol=srednji število=ednina sklon=mestnik", + "Pronoun Type=relative Gender=neuter Number=singular Case=locative"); + InsertMsd( + "Pr-nsi", + "zaimek vrsta=oziralni spol=srednji število=ednina sklon=orodnik", + "Pronoun Type=relative Gender=neuter Number=singular Case=instrumental"); + InsertMsd( + "Pr-ndn", + "zaimek vrsta=oziralni spol=srednji število=dvojina sklon=imenovalnik", + "Pronoun Type=relative Gender=neuter Number=dual Case=nominative"); + InsertMsd( + "Pr-ndg", + "zaimek vrsta=oziralni spol=srednji število=dvojina sklon=rodilnik", + "Pronoun Type=relative Gender=neuter Number=dual Case=genitive"); + InsertMsd("Pr-ndd", "zaimek vrsta=oziralni spol=srednji število=dvojina sklon=dajalnik", "Pronoun Type=relative Gender=neuter Number=dual Case=dative"); + InsertMsd( + "Pr-nda", + "zaimek vrsta=oziralni spol=srednji število=dvojina sklon=tožilnik", + "Pronoun Type=relative Gender=neuter Number=dual Case=accusative"); + InsertMsd( + "Pr-ndl", + "zaimek vrsta=oziralni spol=srednji število=dvojina sklon=mestnik", + "Pronoun Type=relative Gender=neuter Number=dual Case=locative"); + InsertMsd( + "Pr-ndi", + "zaimek vrsta=oziralni spol=srednji število=dvojina sklon=orodnik", + "Pronoun Type=relative Gender=neuter Number=dual Case=instrumental"); + InsertMsd( + "Pr-npn", + "zaimek vrsta=oziralni spol=srednji število=množina sklon=imenovalnik", + "Pronoun Type=relative Gender=neuter Number=plural Case=nominative"); + InsertMsd( + "Pr-npg", + "zaimek vrsta=oziralni spol=srednji število=množina sklon=rodilnik", + "Pronoun Type=relative Gender=neuter Number=plural Case=genitive"); + InsertMsd( + "Pr-npd", + "zaimek vrsta=oziralni spol=srednji število=množina sklon=dajalnik", + "Pronoun Type=relative Gender=neuter Number=plural Case=dative"); + InsertMsd( + "Pr-npa", + "zaimek vrsta=oziralni spol=srednji število=množina sklon=tožilnik", + "Pronoun Type=relative Gender=neuter Number=plural Case=accusative"); + InsertMsd( + "Pr-npl", + "zaimek vrsta=oziralni spol=srednji število=množina sklon=mestnik", + "Pronoun Type=relative Gender=neuter Number=plural Case=locative"); + InsertMsd( + "Pr-npi", + "zaimek vrsta=oziralni spol=srednji število=množina sklon=orodnik", + "Pronoun Type=relative Gender=neuter Number=plural Case=instrumental"); + InsertMsd("Px------y", "zaimek vrsta=povratni naslonskost=kliticna", "Pronoun Type=reflexive Clitic=yes"); + InsertMsd("Px---g", "zaimek vrsta=povratni sklon=rodilnik", "Pronoun Type=reflexive Case=genitive"); + InsertMsd("Px---d", "zaimek vrsta=povratni sklon=dajalnik", "Pronoun Type=reflexive Case=dative"); + InsertMsd("Px---d--y", "zaimek vrsta=povratni sklon=dajalnik naslonskost=kliticna", "Pronoun Type=reflexive Case=dative Clitic=yes"); + InsertMsd("Px---a", "zaimek vrsta=povratni sklon=tožilnik", "Pronoun Type=reflexive Case=accusative"); + InsertMsd("Px---a--b", "zaimek vrsta=povratni sklon=tožilnik naslonskost=navezna", "Pronoun Type=reflexive Case=accusative Clitic=bound"); + InsertMsd("Px---l", "zaimek vrsta=povratni sklon=mestnik", "Pronoun Type=reflexive Case=locative"); + InsertMsd("Px---i", "zaimek vrsta=povratni sklon=orodnik", "Pronoun Type=reflexive Case=instrumental"); + InsertMsd( + "Px-msn", + "zaimek vrsta=povratni spol=moški število=ednina sklon=imenovalnik", + "Pronoun Type=reflexive Gender=masculine Number=singular Case=nominative"); + InsertMsd( + "Px-msg", + "zaimek vrsta=povratni spol=moški število=ednina sklon=rodilnik", + "Pronoun Type=reflexive Gender=masculine Number=singular Case=genitive"); + InsertMsd( + "Px-msd", + "zaimek vrsta=povratni spol=moški število=ednina sklon=dajalnik", + "Pronoun Type=reflexive Gender=masculine Number=singular Case=dative"); + InsertMsd( + "Px-msa", + "zaimek vrsta=povratni spol=moški število=ednina sklon=tožilnik", + "Pronoun Type=reflexive Gender=masculine Number=singular Case=accusative"); + InsertMsd( + "Px-msl", + "zaimek vrsta=povratni spol=moški število=ednina sklon=mestnik", + "Pronoun Type=reflexive Gender=masculine Number=singular Case=locative"); + InsertMsd( + "Px-msi", + "zaimek vrsta=povratni spol=moški število=ednina sklon=orodnik", + "Pronoun Type=reflexive Gender=masculine Number=singular Case=instrumental"); + InsertMsd( + "Px-mdn", + "zaimek vrsta=povratni spol=moški število=dvojina sklon=imenovalnik", + "Pronoun Type=reflexive Gender=masculine Number=dual Case=nominative"); + InsertMsd( + "Px-mdg", + "zaimek vrsta=povratni spol=moški število=dvojina sklon=rodilnik", + "Pronoun Type=reflexive Gender=masculine Number=dual Case=genitive"); + InsertMsd( + "Px-mdd", + "zaimek vrsta=povratni spol=moški število=dvojina sklon=dajalnik", + "Pronoun Type=reflexive Gender=masculine Number=dual Case=dative"); + InsertMsd( + "Px-mda", + "zaimek vrsta=povratni spol=moški število=dvojina sklon=tožilnik", + "Pronoun Type=reflexive Gender=masculine Number=dual Case=accusative"); + InsertMsd( + "Px-mdl", + "zaimek vrsta=povratni spol=moški število=dvojina sklon=mestnik", + "Pronoun Type=reflexive Gender=masculine Number=dual Case=locative"); + InsertMsd( + "Px-mdi", + "zaimek vrsta=povratni spol=moški število=dvojina sklon=orodnik", + "Pronoun Type=reflexive Gender=masculine Number=dual Case=instrumental"); + InsertMsd( + "Px-mpn", + "zaimek vrsta=povratni spol=moški število=množina sklon=imenovalnik", + "Pronoun Type=reflexive Gender=masculine Number=plural Case=nominative"); + InsertMsd( + "Px-mpg", + "zaimek vrsta=povratni spol=moški število=množina sklon=rodilnik", + "Pronoun Type=reflexive Gender=masculine Number=plural Case=genitive"); + InsertMsd( + "Px-mpd", + "zaimek vrsta=povratni spol=moški število=množina sklon=dajalnik", + "Pronoun Type=reflexive Gender=masculine Number=plural Case=dative"); + InsertMsd( + "Px-mpa", + "zaimek vrsta=povratni spol=moški število=množina sklon=tožilnik", + "Pronoun Type=reflexive Gender=masculine Number=plural Case=accusative"); + InsertMsd( + "Px-mpl", + "zaimek vrsta=povratni spol=moški število=množina sklon=mestnik", + "Pronoun Type=reflexive Gender=masculine Number=plural Case=locative"); + InsertMsd( + "Px-mpi", + "zaimek vrsta=povratni spol=moški število=množina sklon=orodnik", + "Pronoun Type=reflexive Gender=masculine Number=plural Case=instrumental"); + InsertMsd( + "Px-fsn", + "zaimek vrsta=povratni spol=ženski število=ednina sklon=imenovalnik", + "Pronoun Type=reflexive Gender=feminine Number=singular Case=nominative"); + InsertMsd( + "Px-fsg", + "zaimek vrsta=povratni spol=ženski število=ednina sklon=rodilnik", + "Pronoun Type=reflexive Gender=feminine Number=singular Case=genitive"); + InsertMsd( + "Px-fsd", + "zaimek vrsta=povratni spol=ženski število=ednina sklon=dajalnik", + "Pronoun Type=reflexive Gender=feminine Number=singular Case=dative"); + InsertMsd( + "Px-fsa", + "zaimek vrsta=povratni spol=ženski število=ednina sklon=tožilnik", + "Pronoun Type=reflexive Gender=feminine Number=singular Case=accusative"); + InsertMsd( + "Px-fsl", + "zaimek vrsta=povratni spol=ženski število=ednina sklon=mestnik", + "Pronoun Type=reflexive Gender=feminine Number=singular Case=locative"); + InsertMsd( + "Px-fsi", + "zaimek vrsta=povratni spol=ženski število=ednina sklon=orodnik", + "Pronoun Type=reflexive Gender=feminine Number=singular Case=instrumental"); + InsertMsd( + "Px-fdn", + "zaimek vrsta=povratni spol=ženski število=dvojina sklon=imenovalnik", + "Pronoun Type=reflexive Gender=feminine Number=dual Case=nominative"); + InsertMsd( + "Px-fdg", + "zaimek vrsta=povratni spol=ženski število=dvojina sklon=rodilnik", + "Pronoun Type=reflexive Gender=feminine Number=dual Case=genitive"); + InsertMsd( + "Px-fdd", + "zaimek vrsta=povratni spol=ženski število=dvojina sklon=dajalnik", + "Pronoun Type=reflexive Gender=feminine Number=dual Case=dative"); + InsertMsd( + "Px-fda", + "zaimek vrsta=povratni spol=ženski število=dvojina sklon=tožilnik", + "Pronoun Type=reflexive Gender=feminine Number=dual Case=accusative"); + InsertMsd( + "Px-fdl", + "zaimek vrsta=povratni spol=ženski število=dvojina sklon=mestnik", + "Pronoun Type=reflexive Gender=feminine Number=dual Case=locative"); + InsertMsd( + "Px-fdi", + "zaimek vrsta=povratni spol=ženski število=dvojina sklon=orodnik", + "Pronoun Type=reflexive Gender=feminine Number=dual Case=instrumental"); + InsertMsd( + "Px-fpn", + "zaimek vrsta=povratni spol=ženski število=množina sklon=imenovalnik", + "Pronoun Type=reflexive Gender=feminine Number=plural Case=nominative"); + InsertMsd( + "Px-fpg", + "zaimek vrsta=povratni spol=ženski število=množina sklon=rodilnik", + "Pronoun Type=reflexive Gender=feminine Number=plural Case=genitive"); + InsertMsd( + "Px-fpd", + "zaimek vrsta=povratni spol=ženski število=množina sklon=dajalnik", + "Pronoun Type=reflexive Gender=feminine Number=plural Case=dative"); + InsertMsd( + "Px-fpa", + "zaimek vrsta=povratni spol=ženski število=množina sklon=tožilnik", + "Pronoun Type=reflexive Gender=feminine Number=plural Case=accusative"); + InsertMsd( + "Px-fpl", + "zaimek vrsta=povratni spol=ženski število=množina sklon=mestnik", + "Pronoun Type=reflexive Gender=feminine Number=plural Case=locative"); + InsertMsd( + "Px-fpi", + "zaimek vrsta=povratni spol=ženski število=množina sklon=orodnik", + "Pronoun Type=reflexive Gender=feminine Number=plural Case=instrumental"); + InsertMsd( + "Px-nsn", + "zaimek vrsta=povratni spol=srednji število=ednina sklon=imenovalnik", + "Pronoun Type=reflexive Gender=neuter Number=singular Case=nominative"); + InsertMsd( + "Px-nsg", + "zaimek vrsta=povratni spol=srednji število=ednina sklon=rodilnik", + "Pronoun Type=reflexive Gender=neuter Number=singular Case=genitive"); + InsertMsd( + "Px-nsd", + "zaimek vrsta=povratni spol=srednji število=ednina sklon=dajalnik", + "Pronoun Type=reflexive Gender=neuter Number=singular Case=dative"); + InsertMsd( + "Px-nsa", + "zaimek vrsta=povratni spol=srednji število=ednina sklon=tožilnik", + "Pronoun Type=reflexive Gender=neuter Number=singular Case=accusative"); + InsertMsd( + "Px-nsl", + "zaimek vrsta=povratni spol=srednji število=ednina sklon=mestnik", + "Pronoun Type=reflexive Gender=neuter Number=singular Case=locative"); + InsertMsd( + "Px-nsi", + "zaimek vrsta=povratni spol=srednji število=ednina sklon=orodnik", + "Pronoun Type=reflexive Gender=neuter Number=singular Case=instrumental"); + InsertMsd( + "Px-ndn", + "zaimek vrsta=povratni spol=srednji število=dvojina sklon=imenovalnik", + "Pronoun Type=reflexive Gender=neuter Number=dual Case=nominative"); + InsertMsd( + "Px-ndg", + "zaimek vrsta=povratni spol=srednji število=dvojina sklon=rodilnik", + "Pronoun Type=reflexive Gender=neuter Number=dual Case=genitive"); + InsertMsd( + "Px-ndd", + "zaimek vrsta=povratni spol=srednji število=dvojina sklon=dajalnik", + "Pronoun Type=reflexive Gender=neuter Number=dual Case=dative"); + InsertMsd( + "Px-nda", + "zaimek vrsta=povratni spol=srednji število=dvojina sklon=tožilnik", + "Pronoun Type=reflexive Gender=neuter Number=dual Case=accusative"); + InsertMsd( + "Px-ndl", + "zaimek vrsta=povratni spol=srednji število=dvojina sklon=mestnik", + "Pronoun Type=reflexive Gender=neuter Number=dual Case=locative"); + InsertMsd( + "Px-ndi", + "zaimek vrsta=povratni spol=srednji število=dvojina sklon=orodnik", + "Pronoun Type=reflexive Gender=neuter Number=dual Case=instrumental"); + InsertMsd( + "Px-npn", + "zaimek vrsta=povratni spol=srednji število=množina sklon=imenovalnik", + "Pronoun Type=reflexive Gender=neuter Number=plural Case=nominative"); + InsertMsd( + "Px-npg", + "zaimek vrsta=povratni spol=srednji število=množina sklon=rodilnik", + "Pronoun Type=reflexive Gender=neuter Number=plural Case=genitive"); + InsertMsd( + "Px-npd", + "zaimek vrsta=povratni spol=srednji število=množina sklon=dajalnik", + "Pronoun Type=reflexive Gender=neuter Number=plural Case=dative"); + InsertMsd( + "Px-npa", + "zaimek vrsta=povratni spol=srednji število=množina sklon=tožilnik", + "Pronoun Type=reflexive Gender=neuter Number=plural Case=accusative"); + InsertMsd( + "Px-npl", + "zaimek vrsta=povratni spol=srednji število=množina sklon=mestnik", + "Pronoun Type=reflexive Gender=neuter Number=plural Case=locative"); + InsertMsd( + "Px-npi", + "zaimek vrsta=povratni spol=srednji število=množina sklon=orodnik", + "Pronoun Type=reflexive Gender=neuter Number=plural Case=instrumental"); + InsertMsd( + "Pg-msn", + "zaimek vrsta=celostni spol=moški število=ednina sklon=imenovalnik", + "Pronoun Type=general Gender=masculine Number=singular Case=nominative"); + InsertMsd( + "Pg-msg", + "zaimek vrsta=celostni spol=moški število=ednina sklon=rodilnik", + "Pronoun Type=general Gender=masculine Number=singular Case=genitive"); + InsertMsd( + "Pg-msd", + "zaimek vrsta=celostni spol=moški število=ednina sklon=dajalnik", + "Pronoun Type=general Gender=masculine Number=singular Case=dative"); + InsertMsd( + "Pg-msa", + "zaimek vrsta=celostni spol=moški število=ednina sklon=tožilnik", + "Pronoun Type=general Gender=masculine Number=singular Case=accusative"); + InsertMsd( + "Pg-msl", + "zaimek vrsta=celostni spol=moški število=ednina sklon=mestnik", + "Pronoun Type=general Gender=masculine Number=singular Case=locative"); + InsertMsd( + "Pg-msi", + "zaimek vrsta=celostni spol=moški število=ednina sklon=orodnik", + "Pronoun Type=general Gender=masculine Number=singular Case=instrumental"); + InsertMsd( + "Pg-mdn", + "zaimek vrsta=celostni spol=moški število=dvojina sklon=imenovalnik", + "Pronoun Type=general Gender=masculine Number=dual Case=nominative"); + InsertMsd( + "Pg-mdg", + "zaimek vrsta=celostni spol=moški število=dvojina sklon=rodilnik", + "Pronoun Type=general Gender=masculine Number=dual Case=genitive"); + InsertMsd("Pg-mdd", "zaimek vrsta=celostni spol=moški število=dvojina sklon=dajalnik", "Pronoun Type=general Gender=masculine Number=dual Case=dative"); + InsertMsd( + "Pg-mda", + "zaimek vrsta=celostni spol=moški število=dvojina sklon=tožilnik", + "Pronoun Type=general Gender=masculine Number=dual Case=accusative"); + InsertMsd( + "Pg-mdl", + "zaimek vrsta=celostni spol=moški število=dvojina sklon=mestnik", + "Pronoun Type=general Gender=masculine Number=dual Case=locative"); + InsertMsd( + "Pg-mdi", + "zaimek vrsta=celostni spol=moški število=dvojina sklon=orodnik", + "Pronoun Type=general Gender=masculine Number=dual Case=instrumental"); + InsertMsd( + "Pg-mpn", + "zaimek vrsta=celostni spol=moški število=množina sklon=imenovalnik", + "Pronoun Type=general Gender=masculine Number=plural Case=nominative"); + InsertMsd( + "Pg-mpg", + "zaimek vrsta=celostni spol=moški število=množina sklon=rodilnik", + "Pronoun Type=general Gender=masculine Number=plural Case=genitive"); + InsertMsd( + "Pg-mpd", + "zaimek vrsta=celostni spol=moški število=množina sklon=dajalnik", + "Pronoun Type=general Gender=masculine Number=plural Case=dative"); + InsertMsd( + "Pg-mpa", + "zaimek vrsta=celostni spol=moški število=množina sklon=tožilnik", + "Pronoun Type=general Gender=masculine Number=plural Case=accusative"); + InsertMsd( + "Pg-mpl", + "zaimek vrsta=celostni spol=moški število=množina sklon=mestnik", + "Pronoun Type=general Gender=masculine Number=plural Case=locative"); + InsertMsd( + "Pg-mpi", + "zaimek vrsta=celostni spol=moški število=množina sklon=orodnik", + "Pronoun Type=general Gender=masculine Number=plural Case=instrumental"); + InsertMsd( + "Pg-fsn", + "zaimek vrsta=celostni spol=ženski število=ednina sklon=imenovalnik", + "Pronoun Type=general Gender=feminine Number=singular Case=nominative"); + InsertMsd( + "Pg-fsg", + "zaimek vrsta=celostni spol=ženski število=ednina sklon=rodilnik", + "Pronoun Type=general Gender=feminine Number=singular Case=genitive"); + InsertMsd( + "Pg-fsd", + "zaimek vrsta=celostni spol=ženski število=ednina sklon=dajalnik", + "Pronoun Type=general Gender=feminine Number=singular Case=dative"); + InsertMsd( + "Pg-fsa", + "zaimek vrsta=celostni spol=ženski število=ednina sklon=tožilnik", + "Pronoun Type=general Gender=feminine Number=singular Case=accusative"); + InsertMsd( + "Pg-fsl", + "zaimek vrsta=celostni spol=ženski število=ednina sklon=mestnik", + "Pronoun Type=general Gender=feminine Number=singular Case=locative"); + InsertMsd( + "Pg-fsi", + "zaimek vrsta=celostni spol=ženski število=ednina sklon=orodnik", + "Pronoun Type=general Gender=feminine Number=singular Case=instrumental"); + InsertMsd( + "Pg-fdn", + "zaimek vrsta=celostni spol=ženski število=dvojina sklon=imenovalnik", + "Pronoun Type=general Gender=feminine Number=dual Case=nominative"); + InsertMsd( + "Pg-fdg", + "zaimek vrsta=celostni spol=ženski število=dvojina sklon=rodilnik", + "Pronoun Type=general Gender=feminine Number=dual Case=genitive"); + InsertMsd("Pg-fdd", "zaimek vrsta=celostni spol=ženski število=dvojina sklon=dajalnik", "Pronoun Type=general Gender=feminine Number=dual Case=dative"); + InsertMsd( + "Pg-fda", + "zaimek vrsta=celostni spol=ženski število=dvojina sklon=tožilnik", + "Pronoun Type=general Gender=feminine Number=dual Case=accusative"); + InsertMsd( + "Pg-fdl", + "zaimek vrsta=celostni spol=ženski število=dvojina sklon=mestnik", + "Pronoun Type=general Gender=feminine Number=dual Case=locative"); + InsertMsd( + "Pg-fdi", + "zaimek vrsta=celostni spol=ženski število=dvojina sklon=orodnik", + "Pronoun Type=general Gender=feminine Number=dual Case=instrumental"); + InsertMsd( + "Pg-fpn", + "zaimek vrsta=celostni spol=ženski število=množina sklon=imenovalnik", + "Pronoun Type=general Gender=feminine Number=plural Case=nominative"); + InsertMsd( + "Pg-fpg", + "zaimek vrsta=celostni spol=ženski število=množina sklon=rodilnik", + "Pronoun Type=general Gender=feminine Number=plural Case=genitive"); + InsertMsd( + "Pg-fpd", + "zaimek vrsta=celostni spol=ženski število=množina sklon=dajalnik", + "Pronoun Type=general Gender=feminine Number=plural Case=dative"); + InsertMsd( + "Pg-fpa", + "zaimek vrsta=celostni spol=ženski število=množina sklon=tožilnik", + "Pronoun Type=general Gender=feminine Number=plural Case=accusative"); + InsertMsd( + "Pg-fpl", + "zaimek vrsta=celostni spol=ženski število=množina sklon=mestnik", + "Pronoun Type=general Gender=feminine Number=plural Case=locative"); + InsertMsd( + "Pg-fpi", + "zaimek vrsta=celostni spol=ženski število=množina sklon=orodnik", + "Pronoun Type=general Gender=feminine Number=plural Case=instrumental"); + InsertMsd( + "Pg-nsn", + "zaimek vrsta=celostni spol=srednji število=ednina sklon=imenovalnik", + "Pronoun Type=general Gender=neuter Number=singular Case=nominative"); + InsertMsd( + "Pg-nsg", + "zaimek vrsta=celostni spol=srednji število=ednina sklon=rodilnik", + "Pronoun Type=general Gender=neuter Number=singular Case=genitive"); + InsertMsd( + "Pg-nsd", + "zaimek vrsta=celostni spol=srednji število=ednina sklon=dajalnik", + "Pronoun Type=general Gender=neuter Number=singular Case=dative"); + InsertMsd( + "Pg-nsa", + "zaimek vrsta=celostni spol=srednji število=ednina sklon=tožilnik", + "Pronoun Type=general Gender=neuter Number=singular Case=accusative"); + InsertMsd( + "Pg-nsl", + "zaimek vrsta=celostni spol=srednji število=ednina sklon=mestnik", + "Pronoun Type=general Gender=neuter Number=singular Case=locative"); + InsertMsd( + "Pg-nsi", + "zaimek vrsta=celostni spol=srednji število=ednina sklon=orodnik", + "Pronoun Type=general Gender=neuter Number=singular Case=instrumental"); + InsertMsd( + "Pg-ndn", + "zaimek vrsta=celostni spol=srednji število=dvojina sklon=imenovalnik", + "Pronoun Type=general Gender=neuter Number=dual Case=nominative"); + InsertMsd( + "Pg-ndg", + "zaimek vrsta=celostni spol=srednji število=dvojina sklon=rodilnik", + "Pronoun Type=general Gender=neuter Number=dual Case=genitive"); + InsertMsd("Pg-ndd", "zaimek vrsta=celostni spol=srednji število=dvojina sklon=dajalnik", "Pronoun Type=general Gender=neuter Number=dual Case=dative"); + InsertMsd( + "Pg-nda", + "zaimek vrsta=celostni spol=srednji število=dvojina sklon=tožilnik", + "Pronoun Type=general Gender=neuter Number=dual Case=accusative"); + InsertMsd("Pg-ndl", "zaimek vrsta=celostni spol=srednji število=dvojina sklon=mestnik", "Pronoun Type=general Gender=neuter Number=dual Case=locative"); + InsertMsd( + "Pg-ndi", + "zaimek vrsta=celostni spol=srednji število=dvojina sklon=orodnik", + "Pronoun Type=general Gender=neuter Number=dual Case=instrumental"); + InsertMsd( + "Pg-npn", + "zaimek vrsta=celostni spol=srednji število=množina sklon=imenovalnik", + "Pronoun Type=general Gender=neuter Number=plural Case=nominative"); + InsertMsd( + "Pg-npg", + "zaimek vrsta=celostni spol=srednji število=množina sklon=rodilnik", + "Pronoun Type=general Gender=neuter Number=plural Case=genitive"); + InsertMsd( + "Pg-npd", + "zaimek vrsta=celostni spol=srednji število=množina sklon=dajalnik", + "Pronoun Type=general Gender=neuter Number=plural Case=dative"); + InsertMsd( + "Pg-npa", + "zaimek vrsta=celostni spol=srednji število=množina sklon=tožilnik", + "Pronoun Type=general Gender=neuter Number=plural Case=accusative"); + InsertMsd( + "Pg-npl", + "zaimek vrsta=celostni spol=srednji število=množina sklon=mestnik", + "Pronoun Type=general Gender=neuter Number=plural Case=locative"); + InsertMsd( + "Pg-npi", + "zaimek vrsta=celostni spol=srednji število=množina sklon=orodnik", + "Pronoun Type=general Gender=neuter Number=plural Case=instrumental"); + InsertMsd( + "Pq-msn", + "zaimek vrsta=vprašalni spol=moški število=ednina sklon=imenovalnik", + "Pronoun Type=interrogative Gender=masculine Number=singular Case=nominative"); + InsertMsd( + "Pq-msg", + "zaimek vrsta=vprašalni spol=moški število=ednina sklon=rodilnik", + "Pronoun Type=interrogative Gender=masculine Number=singular Case=genitive"); + InsertMsd( + "Pq-msd", + "zaimek vrsta=vprašalni spol=moški število=ednina sklon=dajalnik", + "Pronoun Type=interrogative Gender=masculine Number=singular Case=dative"); + InsertMsd( + "Pq-msa", + "zaimek vrsta=vprašalni spol=moški število=ednina sklon=tožilnik", + "Pronoun Type=interrogative Gender=masculine Number=singular Case=accusative"); + InsertMsd( + "Pq-msl", + "zaimek vrsta=vprašalni spol=moški število=ednina sklon=mestnik", + "Pronoun Type=interrogative Gender=masculine Number=singular Case=locative"); + InsertMsd( + "Pq-msi", + "zaimek vrsta=vprašalni spol=moški število=ednina sklon=orodnik", + "Pronoun Type=interrogative Gender=masculine Number=singular Case=instrumental"); + InsertMsd( + "Pq-mdn", + "zaimek vrsta=vprašalni spol=moški število=dvojina sklon=imenovalnik", + "Pronoun Type=interrogative Gender=masculine Number=dual Case=nominative"); + InsertMsd( + "Pq-mdg", + "zaimek vrsta=vprašalni spol=moški število=dvojina sklon=rodilnik", + "Pronoun Type=interrogative Gender=masculine Number=dual Case=genitive"); + InsertMsd( + "Pq-mdd", + "zaimek vrsta=vprašalni spol=moški število=dvojina sklon=dajalnik", + "Pronoun Type=interrogative Gender=masculine Number=dual Case=dative"); + InsertMsd( + "Pq-mda", + "zaimek vrsta=vprašalni spol=moški število=dvojina sklon=tožilnik", + "Pronoun Type=interrogative Gender=masculine Number=dual Case=accusative"); + InsertMsd( + "Pq-mdl", + "zaimek vrsta=vprašalni spol=moški število=dvojina sklon=mestnik", + "Pronoun Type=interrogative Gender=masculine Number=dual Case=locative"); + InsertMsd( + "Pq-mdi", + "zaimek vrsta=vprašalni spol=moški število=dvojina sklon=orodnik", + "Pronoun Type=interrogative Gender=masculine Number=dual Case=instrumental"); + InsertMsd( + "Pq-mpn", + "zaimek vrsta=vprašalni spol=moški število=množina sklon=imenovalnik", + "Pronoun Type=interrogative Gender=masculine Number=plural Case=nominative"); + InsertMsd( + "Pq-mpg", + "zaimek vrsta=vprašalni spol=moški število=množina sklon=rodilnik", + "Pronoun Type=interrogative Gender=masculine Number=plural Case=genitive"); + InsertMsd( + "Pq-mpd", + "zaimek vrsta=vprašalni spol=moški število=množina sklon=dajalnik", + "Pronoun Type=interrogative Gender=masculine Number=plural Case=dative"); + InsertMsd( + "Pq-mpa", + "zaimek vrsta=vprašalni spol=moški število=množina sklon=tožilnik", + "Pronoun Type=interrogative Gender=masculine Number=plural Case=accusative"); + InsertMsd( + "Pq-mpl", + "zaimek vrsta=vprašalni spol=moški število=množina sklon=mestnik", + "Pronoun Type=interrogative Gender=masculine Number=plural Case=locative"); + InsertMsd( + "Pq-mpi", + "zaimek vrsta=vprašalni spol=moški število=množina sklon=orodnik", + "Pronoun Type=interrogative Gender=masculine Number=plural Case=instrumental"); + InsertMsd( + "Pq-fsn", + "zaimek vrsta=vprašalni spol=ženski število=ednina sklon=imenovalnik", + "Pronoun Type=interrogative Gender=feminine Number=singular Case=nominative"); + InsertMsd( + "Pq-fsg", + "zaimek vrsta=vprašalni spol=ženski število=ednina sklon=rodilnik", + "Pronoun Type=interrogative Gender=feminine Number=singular Case=genitive"); + InsertMsd( + "Pq-fsd", + "zaimek vrsta=vprašalni spol=ženski število=ednina sklon=dajalnik", + "Pronoun Type=interrogative Gender=feminine Number=singular Case=dative"); + InsertMsd( + "Pq-fsa", + "zaimek vrsta=vprašalni spol=ženski število=ednina sklon=tožilnik", + "Pronoun Type=interrogative Gender=feminine Number=singular Case=accusative"); + InsertMsd( + "Pq-fsl", + "zaimek vrsta=vprašalni spol=ženski število=ednina sklon=mestnik", + "Pronoun Type=interrogative Gender=feminine Number=singular Case=locative"); + InsertMsd( + "Pq-fsi", + "zaimek vrsta=vprašalni spol=ženski število=ednina sklon=orodnik", + "Pronoun Type=interrogative Gender=feminine Number=singular Case=instrumental"); + InsertMsd( + "Pq-fdn", + "zaimek vrsta=vprašalni spol=ženski število=dvojina sklon=imenovalnik", + "Pronoun Type=interrogative Gender=feminine Number=dual Case=nominative"); + InsertMsd( + "Pq-fdg", + "zaimek vrsta=vprašalni spol=ženski število=dvojina sklon=rodilnik", + "Pronoun Type=interrogative Gender=feminine Number=dual Case=genitive"); + InsertMsd( + "Pq-fdd", + "zaimek vrsta=vprašalni spol=ženski število=dvojina sklon=dajalnik", + "Pronoun Type=interrogative Gender=feminine Number=dual Case=dative"); + InsertMsd( + "Pq-fda", + "zaimek vrsta=vprašalni spol=ženski število=dvojina sklon=tožilnik", + "Pronoun Type=interrogative Gender=feminine Number=dual Case=accusative"); + InsertMsd( + "Pq-fdl", + "zaimek vrsta=vprašalni spol=ženski število=dvojina sklon=mestnik", + "Pronoun Type=interrogative Gender=feminine Number=dual Case=locative"); + InsertMsd( + "Pq-fdi", + "zaimek vrsta=vprašalni spol=ženski število=dvojina sklon=orodnik", + "Pronoun Type=interrogative Gender=feminine Number=dual Case=instrumental"); + InsertMsd( + "Pq-fpn", + "zaimek vrsta=vprašalni spol=ženski število=množina sklon=imenovalnik", + "Pronoun Type=interrogative Gender=feminine Number=plural Case=nominative"); + InsertMsd( + "Pq-fpg", + "zaimek vrsta=vprašalni spol=ženski število=množina sklon=rodilnik", + "Pronoun Type=interrogative Gender=feminine Number=plural Case=genitive"); + InsertMsd( + "Pq-fpd", + "zaimek vrsta=vprašalni spol=ženski število=množina sklon=dajalnik", + "Pronoun Type=interrogative Gender=feminine Number=plural Case=dative"); + InsertMsd( + "Pq-fpa", + "zaimek vrsta=vprašalni spol=ženski število=množina sklon=tožilnik", + "Pronoun Type=interrogative Gender=feminine Number=plural Case=accusative"); + InsertMsd( + "Pq-fpl", + "zaimek vrsta=vprašalni spol=ženski število=množina sklon=mestnik", + "Pronoun Type=interrogative Gender=feminine Number=plural Case=locative"); + InsertMsd( + "Pq-fpi", + "zaimek vrsta=vprašalni spol=ženski število=množina sklon=orodnik", + "Pronoun Type=interrogative Gender=feminine Number=plural Case=instrumental"); + InsertMsd( + "Pq-nsn", + "zaimek vrsta=vprašalni spol=srednji število=ednina sklon=imenovalnik", + "Pronoun Type=interrogative Gender=neuter Number=singular Case=nominative"); + InsertMsd( + "Pq-nsg", + "zaimek vrsta=vprašalni spol=srednji število=ednina sklon=rodilnik", + "Pronoun Type=interrogative Gender=neuter Number=singular Case=genitive"); + InsertMsd( + "Pq-nsd", + "zaimek vrsta=vprašalni spol=srednji število=ednina sklon=dajalnik", + "Pronoun Type=interrogative Gender=neuter Number=singular Case=dative"); + InsertMsd( + "Pq-nsa", + "zaimek vrsta=vprašalni spol=srednji število=ednina sklon=tožilnik", + "Pronoun Type=interrogative Gender=neuter Number=singular Case=accusative"); + InsertMsd( + "Pq-nsl", + "zaimek vrsta=vprašalni spol=srednji število=ednina sklon=mestnik", + "Pronoun Type=interrogative Gender=neuter Number=singular Case=locative"); + InsertMsd( + "Pq-nsi", + "zaimek vrsta=vprašalni spol=srednji število=ednina sklon=orodnik", + "Pronoun Type=interrogative Gender=neuter Number=singular Case=instrumental"); + InsertMsd( + "Pq-ndn", + "zaimek vrsta=vprašalni spol=srednji število=dvojina sklon=imenovalnik", + "Pronoun Type=interrogative Gender=neuter Number=dual Case=nominative"); + InsertMsd( + "Pq-ndg", + "zaimek vrsta=vprašalni spol=srednji število=dvojina sklon=rodilnik", + "Pronoun Type=interrogative Gender=neuter Number=dual Case=genitive"); + InsertMsd( + "Pq-ndd", + "zaimek vrsta=vprašalni spol=srednji število=dvojina sklon=dajalnik", + "Pronoun Type=interrogative Gender=neuter Number=dual Case=dative"); + InsertMsd( + "Pq-nda", + "zaimek vrsta=vprašalni spol=srednji število=dvojina sklon=tožilnik", + "Pronoun Type=interrogative Gender=neuter Number=dual Case=accusative"); + InsertMsd( + "Pq-ndl", + "zaimek vrsta=vprašalni spol=srednji število=dvojina sklon=mestnik", + "Pronoun Type=interrogative Gender=neuter Number=dual Case=locative"); + InsertMsd( + "Pq-ndi", + "zaimek vrsta=vprašalni spol=srednji število=dvojina sklon=orodnik", + "Pronoun Type=interrogative Gender=neuter Number=dual Case=instrumental"); + InsertMsd( + "Pq-npn", + "zaimek vrsta=vprašalni spol=srednji število=množina sklon=imenovalnik", + "Pronoun Type=interrogative Gender=neuter Number=plural Case=nominative"); + InsertMsd( + "Pq-npg", + "zaimek vrsta=vprašalni spol=srednji število=množina sklon=rodilnik", + "Pronoun Type=interrogative Gender=neuter Number=plural Case=genitive"); + InsertMsd( + "Pq-npd", + "zaimek vrsta=vprašalni spol=srednji število=množina sklon=dajalnik", + "Pronoun Type=interrogative Gender=neuter Number=plural Case=dative"); + InsertMsd( + "Pq-npa", + "zaimek vrsta=vprašalni spol=srednji število=množina sklon=tožilnik", + "Pronoun Type=interrogative Gender=neuter Number=plural Case=accusative"); + InsertMsd( + "Pq-npl", + "zaimek vrsta=vprašalni spol=srednji število=množina sklon=mestnik", + "Pronoun Type=interrogative Gender=neuter Number=plural Case=locative"); + InsertMsd( + "Pq-npi", + "zaimek vrsta=vprašalni spol=srednji število=množina sklon=orodnik", + "Pronoun Type=interrogative Gender=neuter Number=plural Case=instrumental"); + InsertMsd( + "Pi-msn", + "zaimek vrsta=nedolocni spol=moški število=ednina sklon=imenovalnik", + "Pronoun Type=indefinite Gender=masculine Number=singular Case=nominative"); + InsertMsd( + "Pi-msg", + "zaimek vrsta=nedolocni spol=moški število=ednina sklon=rodilnik", + "Pronoun Type=indefinite Gender=masculine Number=singular Case=genitive"); + InsertMsd( + "Pi-msd", + "zaimek vrsta=nedolocni spol=moški število=ednina sklon=dajalnik", + "Pronoun Type=indefinite Gender=masculine Number=singular Case=dative"); + InsertMsd( + "Pi-msa", + "zaimek vrsta=nedolocni spol=moški število=ednina sklon=tožilnik", + "Pronoun Type=indefinite Gender=masculine Number=singular Case=accusative"); + InsertMsd( + "Pi-msl", + "zaimek vrsta=nedolocni spol=moški število=ednina sklon=mestnik", + "Pronoun Type=indefinite Gender=masculine Number=singular Case=locative"); + InsertMsd( + "Pi-msi", + "zaimek vrsta=nedolocni spol=moški število=ednina sklon=orodnik", + "Pronoun Type=indefinite Gender=masculine Number=singular Case=instrumental"); + InsertMsd( + "Pi-mdn", + "zaimek vrsta=nedolocni spol=moški število=dvojina sklon=imenovalnik", + "Pronoun Type=indefinite Gender=masculine Number=dual Case=nominative"); + InsertMsd( + "Pi-mdg", + "zaimek vrsta=nedolocni spol=moški število=dvojina sklon=rodilnik", + "Pronoun Type=indefinite Gender=masculine Number=dual Case=genitive"); + InsertMsd( + "Pi-mdd", + "zaimek vrsta=nedolocni spol=moški število=dvojina sklon=dajalnik", + "Pronoun Type=indefinite Gender=masculine Number=dual Case=dative"); + InsertMsd( + "Pi-mda", + "zaimek vrsta=nedolocni spol=moški število=dvojina sklon=tožilnik", + "Pronoun Type=indefinite Gender=masculine Number=dual Case=accusative"); + InsertMsd( + "Pi-mdl", + "zaimek vrsta=nedolocni spol=moški število=dvojina sklon=mestnik", + "Pronoun Type=indefinite Gender=masculine Number=dual Case=locative"); + InsertMsd( + "Pi-mdi", + "zaimek vrsta=nedolocni spol=moški število=dvojina sklon=orodnik", + "Pronoun Type=indefinite Gender=masculine Number=dual Case=instrumental"); + InsertMsd( + "Pi-mpn", + "zaimek vrsta=nedolocni spol=moški število=množina sklon=imenovalnik", + "Pronoun Type=indefinite Gender=masculine Number=plural Case=nominative"); + InsertMsd( + "Pi-mpg", + "zaimek vrsta=nedolocni spol=moški število=množina sklon=rodilnik", + "Pronoun Type=indefinite Gender=masculine Number=plural Case=genitive"); + InsertMsd( + "Pi-mpd", + "zaimek vrsta=nedolocni spol=moški število=množina sklon=dajalnik", + "Pronoun Type=indefinite Gender=masculine Number=plural Case=dative"); + InsertMsd( + "Pi-mpa", + "zaimek vrsta=nedolocni spol=moški število=množina sklon=tožilnik", + "Pronoun Type=indefinite Gender=masculine Number=plural Case=accusative"); + InsertMsd( + "Pi-mpl", + "zaimek vrsta=nedolocni spol=moški število=množina sklon=mestnik", + "Pronoun Type=indefinite Gender=masculine Number=plural Case=locative"); + InsertMsd( + "Pi-mpi", + "zaimek vrsta=nedolocni spol=moški število=množina sklon=orodnik", + "Pronoun Type=indefinite Gender=masculine Number=plural Case=instrumental"); + InsertMsd( + "Pi-fsn", + "zaimek vrsta=nedolocni spol=ženski število=ednina sklon=imenovalnik", + "Pronoun Type=indefinite Gender=feminine Number=singular Case=nominative"); + InsertMsd( + "Pi-fsg", + "zaimek vrsta=nedolocni spol=ženski število=ednina sklon=rodilnik", + "Pronoun Type=indefinite Gender=feminine Number=singular Case=genitive"); + InsertMsd( + "Pi-fsd", + "zaimek vrsta=nedolocni spol=ženski število=ednina sklon=dajalnik", + "Pronoun Type=indefinite Gender=feminine Number=singular Case=dative"); + InsertMsd( + "Pi-fsa", + "zaimek vrsta=nedolocni spol=ženski število=ednina sklon=tožilnik", + "Pronoun Type=indefinite Gender=feminine Number=singular Case=accusative"); + InsertMsd( + "Pi-fsl", + "zaimek vrsta=nedolocni spol=ženski število=ednina sklon=mestnik", + "Pronoun Type=indefinite Gender=feminine Number=singular Case=locative"); + InsertMsd( + "Pi-fsi", + "zaimek vrsta=nedolocni spol=ženski število=ednina sklon=orodnik", + "Pronoun Type=indefinite Gender=feminine Number=singular Case=instrumental"); + InsertMsd( + "Pi-fdn", + "zaimek vrsta=nedolocni spol=ženski število=dvojina sklon=imenovalnik", + "Pronoun Type=indefinite Gender=feminine Number=dual Case=nominative"); + InsertMsd( + "Pi-fdg", + "zaimek vrsta=nedolocni spol=ženski število=dvojina sklon=rodilnik", + "Pronoun Type=indefinite Gender=feminine Number=dual Case=genitive"); + InsertMsd( + "Pi-fdd", + "zaimek vrsta=nedolocni spol=ženski število=dvojina sklon=dajalnik", + "Pronoun Type=indefinite Gender=feminine Number=dual Case=dative"); + InsertMsd( + "Pi-fda", + "zaimek vrsta=nedolocni spol=ženski število=dvojina sklon=tožilnik", + "Pronoun Type=indefinite Gender=feminine Number=dual Case=accusative"); + InsertMsd( + "Pi-fdl", + "zaimek vrsta=nedolocni spol=ženski število=dvojina sklon=mestnik", + "Pronoun Type=indefinite Gender=feminine Number=dual Case=locative"); + InsertMsd( + "Pi-fdi", + "zaimek vrsta=nedolocni spol=ženski število=dvojina sklon=orodnik", + "Pronoun Type=indefinite Gender=feminine Number=dual Case=instrumental"); + InsertMsd( + "Pi-fpn", + "zaimek vrsta=nedolocni spol=ženski število=množina sklon=imenovalnik", + "Pronoun Type=indefinite Gender=feminine Number=plural Case=nominative"); + InsertMsd( + "Pi-fpg", + "zaimek vrsta=nedolocni spol=ženski število=množina sklon=rodilnik", + "Pronoun Type=indefinite Gender=feminine Number=plural Case=genitive"); + InsertMsd( + "Pi-fpd", + "zaimek vrsta=nedolocni spol=ženski število=množina sklon=dajalnik", + "Pronoun Type=indefinite Gender=feminine Number=plural Case=dative"); + InsertMsd( + "Pi-fpa", + "zaimek vrsta=nedolocni spol=ženski število=množina sklon=tožilnik", + "Pronoun Type=indefinite Gender=feminine Number=plural Case=accusative"); + InsertMsd( + "Pi-fpl", + "zaimek vrsta=nedolocni spol=ženski število=množina sklon=mestnik", + "Pronoun Type=indefinite Gender=feminine Number=plural Case=locative"); + InsertMsd( + "Pi-fpi", + "zaimek vrsta=nedolocni spol=ženski število=množina sklon=orodnik", + "Pronoun Type=indefinite Gender=feminine Number=plural Case=instrumental"); + InsertMsd( + "Pi-nsn", + "zaimek vrsta=nedolocni spol=srednji število=ednina sklon=imenovalnik", + "Pronoun Type=indefinite Gender=neuter Number=singular Case=nominative"); + InsertMsd( + "Pi-nsg", + "zaimek vrsta=nedolocni spol=srednji število=ednina sklon=rodilnik", + "Pronoun Type=indefinite Gender=neuter Number=singular Case=genitive"); + InsertMsd( + "Pi-nsd", + "zaimek vrsta=nedolocni spol=srednji število=ednina sklon=dajalnik", + "Pronoun Type=indefinite Gender=neuter Number=singular Case=dative"); + InsertMsd( + "Pi-nsa", + "zaimek vrsta=nedolocni spol=srednji število=ednina sklon=tožilnik", + "Pronoun Type=indefinite Gender=neuter Number=singular Case=accusative"); + InsertMsd( + "Pi-nsl", + "zaimek vrsta=nedolocni spol=srednji število=ednina sklon=mestnik", + "Pronoun Type=indefinite Gender=neuter Number=singular Case=locative"); + InsertMsd( + "Pi-nsi", + "zaimek vrsta=nedolocni spol=srednji število=ednina sklon=orodnik", + "Pronoun Type=indefinite Gender=neuter Number=singular Case=instrumental"); + InsertMsd( + "Pi-ndn", + "zaimek vrsta=nedolocni spol=srednji število=dvojina sklon=imenovalnik", + "Pronoun Type=indefinite Gender=neuter Number=dual Case=nominative"); + InsertMsd( + "Pi-ndg", + "zaimek vrsta=nedolocni spol=srednji število=dvojina sklon=rodilnik", + "Pronoun Type=indefinite Gender=neuter Number=dual Case=genitive"); + InsertMsd( + "Pi-ndd", + "zaimek vrsta=nedolocni spol=srednji število=dvojina sklon=dajalnik", + "Pronoun Type=indefinite Gender=neuter Number=dual Case=dative"); + InsertMsd( + "Pi-nda", + "zaimek vrsta=nedolocni spol=srednji število=dvojina sklon=tožilnik", + "Pronoun Type=indefinite Gender=neuter Number=dual Case=accusative"); + InsertMsd( + "Pi-ndl", + "zaimek vrsta=nedolocni spol=srednji število=dvojina sklon=mestnik", + "Pronoun Type=indefinite Gender=neuter Number=dual Case=locative"); + InsertMsd( + "Pi-ndi", + "zaimek vrsta=nedolocni spol=srednji število=dvojina sklon=orodnik", + "Pronoun Type=indefinite Gender=neuter Number=dual Case=instrumental"); + InsertMsd( + "Pi-npn", + "zaimek vrsta=nedolocni spol=srednji število=množina sklon=imenovalnik", + "Pronoun Type=indefinite Gender=neuter Number=plural Case=nominative"); + InsertMsd( + "Pi-npg", + "zaimek vrsta=nedolocni spol=srednji število=množina sklon=rodilnik", + "Pronoun Type=indefinite Gender=neuter Number=plural Case=genitive"); + InsertMsd( + "Pi-npd", + "zaimek vrsta=nedolocni spol=srednji število=množina sklon=dajalnik", + "Pronoun Type=indefinite Gender=neuter Number=plural Case=dative"); + InsertMsd( + "Pi-npa", + "zaimek vrsta=nedolocni spol=srednji število=množina sklon=tožilnik", + "Pronoun Type=indefinite Gender=neuter Number=plural Case=accusative"); + InsertMsd( + "Pi-npl", + "zaimek vrsta=nedolocni spol=srednji število=množina sklon=mestnik", + "Pronoun Type=indefinite Gender=neuter Number=plural Case=locative"); + InsertMsd( + "Pi-npi", + "zaimek vrsta=nedolocni spol=srednji število=množina sklon=orodnik", + "Pronoun Type=indefinite Gender=neuter Number=plural Case=instrumental"); + InsertMsd( + "Pz-msn", + "zaimek vrsta=nikalni spol=moški število=ednina sklon=imenovalnik", + "Pronoun Type=negative Gender=masculine Number=singular Case=nominative"); + InsertMsd( + "Pz-msg", + "zaimek vrsta=nikalni spol=moški število=ednina sklon=rodilnik", + "Pronoun Type=negative Gender=masculine Number=singular Case=genitive"); + InsertMsd( + "Pz-msd", + "zaimek vrsta=nikalni spol=moški število=ednina sklon=dajalnik", + "Pronoun Type=negative Gender=masculine Number=singular Case=dative"); + InsertMsd( + "Pz-msa", + "zaimek vrsta=nikalni spol=moški število=ednina sklon=tožilnik", + "Pronoun Type=negative Gender=masculine Number=singular Case=accusative"); + InsertMsd( + "Pz-msl", + "zaimek vrsta=nikalni spol=moški število=ednina sklon=mestnik", + "Pronoun Type=negative Gender=masculine Number=singular Case=locative"); + InsertMsd( + "Pz-msi", + "zaimek vrsta=nikalni spol=moški število=ednina sklon=orodnik", + "Pronoun Type=negative Gender=masculine Number=singular Case=instrumental"); + InsertMsd( + "Pz-mdn", + "zaimek vrsta=nikalni spol=moški število=dvojina sklon=imenovalnik", + "Pronoun Type=negative Gender=masculine Number=dual Case=nominative"); + InsertMsd( + "Pz-mdg", + "zaimek vrsta=nikalni spol=moški število=dvojina sklon=rodilnik", + "Pronoun Type=negative Gender=masculine Number=dual Case=genitive"); + InsertMsd("Pz-mdd", "zaimek vrsta=nikalni spol=moški število=dvojina sklon=dajalnik", "Pronoun Type=negative Gender=masculine Number=dual Case=dative"); + InsertMsd( + "Pz-mda", + "zaimek vrsta=nikalni spol=moški število=dvojina sklon=tožilnik", + "Pronoun Type=negative Gender=masculine Number=dual Case=accusative"); + InsertMsd( + "Pz-mdl", + "zaimek vrsta=nikalni spol=moški število=dvojina sklon=mestnik", + "Pronoun Type=negative Gender=masculine Number=dual Case=locative"); + InsertMsd( + "Pz-mdi", + "zaimek vrsta=nikalni spol=moški število=dvojina sklon=orodnik", + "Pronoun Type=negative Gender=masculine Number=dual Case=instrumental"); + InsertMsd( + "Pz-mpn", + "zaimek vrsta=nikalni spol=moški število=množina sklon=imenovalnik", + "Pronoun Type=negative Gender=masculine Number=plural Case=nominative"); + InsertMsd( + "Pz-mpg", + "zaimek vrsta=nikalni spol=moški število=množina sklon=rodilnik", + "Pronoun Type=negative Gender=masculine Number=plural Case=genitive"); + InsertMsd( + "Pz-mpd", + "zaimek vrsta=nikalni spol=moški število=množina sklon=dajalnik", + "Pronoun Type=negative Gender=masculine Number=plural Case=dative"); + InsertMsd( + "Pz-mpa", + "zaimek vrsta=nikalni spol=moški število=množina sklon=tožilnik", + "Pronoun Type=negative Gender=masculine Number=plural Case=accusative"); + InsertMsd( + "Pz-mpl", + "zaimek vrsta=nikalni spol=moški število=množina sklon=mestnik", + "Pronoun Type=negative Gender=masculine Number=plural Case=locative"); + InsertMsd( + "Pz-mpi", + "zaimek vrsta=nikalni spol=moški število=množina sklon=orodnik", + "Pronoun Type=negative Gender=masculine Number=plural Case=instrumental"); + InsertMsd( + "Pz-fsn", + "zaimek vrsta=nikalni spol=ženski število=ednina sklon=imenovalnik", + "Pronoun Type=negative Gender=feminine Number=singular Case=nominative"); + InsertMsd( + "Pz-fsg", + "zaimek vrsta=nikalni spol=ženski število=ednina sklon=rodilnik", + "Pronoun Type=negative Gender=feminine Number=singular Case=genitive"); + InsertMsd( + "Pz-fsd", + "zaimek vrsta=nikalni spol=ženski število=ednina sklon=dajalnik", + "Pronoun Type=negative Gender=feminine Number=singular Case=dative"); + InsertMsd( + "Pz-fsa", + "zaimek vrsta=nikalni spol=ženski število=ednina sklon=tožilnik", + "Pronoun Type=negative Gender=feminine Number=singular Case=accusative"); + InsertMsd( + "Pz-fsl", + "zaimek vrsta=nikalni spol=ženski število=ednina sklon=mestnik", + "Pronoun Type=negative Gender=feminine Number=singular Case=locative"); + InsertMsd( + "Pz-fsi", + "zaimek vrsta=nikalni spol=ženski število=ednina sklon=orodnik", + "Pronoun Type=negative Gender=feminine Number=singular Case=instrumental"); + InsertMsd( + "Pz-fdn", + "zaimek vrsta=nikalni spol=ženski število=dvojina sklon=imenovalnik", + "Pronoun Type=negative Gender=feminine Number=dual Case=nominative"); + InsertMsd( + "Pz-fdg", + "zaimek vrsta=nikalni spol=ženski število=dvojina sklon=rodilnik", + "Pronoun Type=negative Gender=feminine Number=dual Case=genitive"); + InsertMsd("Pz-fdd", "zaimek vrsta=nikalni spol=ženski število=dvojina sklon=dajalnik", "Pronoun Type=negative Gender=feminine Number=dual Case=dative"); + InsertMsd( + "Pz-fda", + "zaimek vrsta=nikalni spol=ženski število=dvojina sklon=tožilnik", + "Pronoun Type=negative Gender=feminine Number=dual Case=accusative"); + InsertMsd( + "Pz-fdl", + "zaimek vrsta=nikalni spol=ženski število=dvojina sklon=mestnik", + "Pronoun Type=negative Gender=feminine Number=dual Case=locative"); + InsertMsd( + "Pz-fdi", + "zaimek vrsta=nikalni spol=ženski število=dvojina sklon=orodnik", + "Pronoun Type=negative Gender=feminine Number=dual Case=instrumental"); + InsertMsd( + "Pz-fpn", + "zaimek vrsta=nikalni spol=ženski število=množina sklon=imenovalnik", + "Pronoun Type=negative Gender=feminine Number=plural Case=nominative"); + InsertMsd( + "Pz-fpg", + "zaimek vrsta=nikalni spol=ženski število=množina sklon=rodilnik", + "Pronoun Type=negative Gender=feminine Number=plural Case=genitive"); + InsertMsd( + "Pz-fpd", + "zaimek vrsta=nikalni spol=ženski število=množina sklon=dajalnik", + "Pronoun Type=negative Gender=feminine Number=plural Case=dative"); + InsertMsd( + "Pz-fpa", + "zaimek vrsta=nikalni spol=ženski število=množina sklon=tožilnik", + "Pronoun Type=negative Gender=feminine Number=plural Case=accusative"); + InsertMsd( + "Pz-fpl", + "zaimek vrsta=nikalni spol=ženski število=množina sklon=mestnik", + "Pronoun Type=negative Gender=feminine Number=plural Case=locative"); + InsertMsd( + "Pz-fpi", + "zaimek vrsta=nikalni spol=ženski število=množina sklon=orodnik", + "Pronoun Type=negative Gender=feminine Number=plural Case=instrumental"); + InsertMsd( + "Pz-nsn", + "zaimek vrsta=nikalni spol=srednji število=ednina sklon=imenovalnik", + "Pronoun Type=negative Gender=neuter Number=singular Case=nominative"); + InsertMsd( + "Pz-nsg", + "zaimek vrsta=nikalni spol=srednji število=ednina sklon=rodilnik", + "Pronoun Type=negative Gender=neuter Number=singular Case=genitive"); + InsertMsd( + "Pz-nsd", + "zaimek vrsta=nikalni spol=srednji število=ednina sklon=dajalnik", + "Pronoun Type=negative Gender=neuter Number=singular Case=dative"); + InsertMsd( + "Pz-nsa", + "zaimek vrsta=nikalni spol=srednji število=ednina sklon=tožilnik", + "Pronoun Type=negative Gender=neuter Number=singular Case=accusative"); + InsertMsd( + "Pz-nsl", + "zaimek vrsta=nikalni spol=srednji število=ednina sklon=mestnik", + "Pronoun Type=negative Gender=neuter Number=singular Case=locative"); + InsertMsd( + "Pz-nsi", + "zaimek vrsta=nikalni spol=srednji število=ednina sklon=orodnik", + "Pronoun Type=negative Gender=neuter Number=singular Case=instrumental"); + InsertMsd( + "Pz-ndn", + "zaimek vrsta=nikalni spol=srednji število=dvojina sklon=imenovalnik", + "Pronoun Type=negative Gender=neuter Number=dual Case=nominative"); + InsertMsd( + "Pz-ndg", + "zaimek vrsta=nikalni spol=srednji število=dvojina sklon=rodilnik", + "Pronoun Type=negative Gender=neuter Number=dual Case=genitive"); + InsertMsd("Pz-ndd", "zaimek vrsta=nikalni spol=srednji število=dvojina sklon=dajalnik", "Pronoun Type=negative Gender=neuter Number=dual Case=dative"); + InsertMsd( + "Pz-nda", + "zaimek vrsta=nikalni spol=srednji število=dvojina sklon=tožilnik", + "Pronoun Type=negative Gender=neuter Number=dual Case=accusative"); + InsertMsd("Pz-ndl", "zaimek vrsta=nikalni spol=srednji število=dvojina sklon=mestnik", "Pronoun Type=negative Gender=neuter Number=dual Case=locative"); + InsertMsd( + "Pz-ndi", + "zaimek vrsta=nikalni spol=srednji število=dvojina sklon=orodnik", + "Pronoun Type=negative Gender=neuter Number=dual Case=instrumental"); + InsertMsd( + "Pz-npn", + "zaimek vrsta=nikalni spol=srednji število=množina sklon=imenovalnik", + "Pronoun Type=negative Gender=neuter Number=plural Case=nominative"); + InsertMsd( + "Pz-npg", + "zaimek vrsta=nikalni spol=srednji število=množina sklon=rodilnik", + "Pronoun Type=negative Gender=neuter Number=plural Case=genitive"); + InsertMsd( + "Pz-npd", + "zaimek vrsta=nikalni spol=srednji število=množina sklon=dajalnik", + "Pronoun Type=negative Gender=neuter Number=plural Case=dative"); + InsertMsd( + "Pz-npa", + "zaimek vrsta=nikalni spol=srednji število=množina sklon=tožilnik", + "Pronoun Type=negative Gender=neuter Number=plural Case=accusative"); + InsertMsd( + "Pz-npl", + "zaimek vrsta=nikalni spol=srednji število=množina sklon=mestnik", + "Pronoun Type=negative Gender=neuter Number=plural Case=locative"); + InsertMsd( + "Pz-npi", + "zaimek vrsta=nikalni spol=srednji število=množina sklon=orodnik", + "Pronoun Type=negative Gender=neuter Number=plural Case=instrumental"); + InsertMsd("Mdc", "števnik zapis=arabski vrsta=glavni", "Numeral Form=digit Type=cardinal"); + InsertMsd("Mdo", "števnik zapis=arabski vrsta=vrstilni", "Numeral Form=digit Type=ordinal"); + InsertMsd("Mrc", "števnik zapis=rimski vrsta=glavni", "Numeral Form=roman Type=cardinal"); + InsertMsd("Mro", "števnik zapis=rimski vrsta=vrstilni", "Numeral Form=roman Type=ordinal"); + InsertMsd( + "Mlc-pn", + "števnik zapis=besedni vrsta=glavni število=množina sklon=imenovalnik", + "Numeral Form=letter Type=cardinal Number=plural Case=nominative"); + InsertMsd( + "Mlc-pg", + "števnik zapis=besedni vrsta=glavni število=množina sklon=rodilnik", + "Numeral Form=letter Type=cardinal Number=plural Case=genitive"); + InsertMsd("Mlc-pd", "števnik zapis=besedni vrsta=glavni število=množina sklon=dajalnik", "Numeral Form=letter Type=cardinal Number=plural Case=dative"); + InsertMsd( + "Mlc-pa", + "števnik zapis=besedni vrsta=glavni število=množina sklon=tožilnik", + "Numeral Form=letter Type=cardinal Number=plural Case=accusative"); + InsertMsd( + "Mlc-pl", + "števnik zapis=besedni vrsta=glavni število=množina sklon=mestnik", + "Numeral Form=letter Type=cardinal Number=plural Case=locative"); + InsertMsd( + "Mlc-pi", + "števnik zapis=besedni vrsta=glavni število=množina sklon=orodnik", + "Numeral Form=letter Type=cardinal Number=plural Case=instrumental"); + InsertMsd( + "Mlcmdn", + "števnik zapis=besedni vrsta=glavni spol=moški število=dvojina sklon=imenovalnik", + "Numeral Form=letter Type=cardinal Gender=masculine Number=dual Case=nominative"); + InsertMsd( + "Mlcmdg", + "števnik zapis=besedni vrsta=glavni spol=moški število=dvojina sklon=rodilnik", + "Numeral Form=letter Type=cardinal Gender=masculine Number=dual Case=genitive"); + InsertMsd( + "Mlcmdd", + "števnik zapis=besedni vrsta=glavni spol=moški število=dvojina sklon=dajalnik", + "Numeral Form=letter Type=cardinal Gender=masculine Number=dual Case=dative"); + InsertMsd( + "Mlcmda", + "števnik zapis=besedni vrsta=glavni spol=moški število=dvojina sklon=tožilnik", + "Numeral Form=letter Type=cardinal Gender=masculine Number=dual Case=accusative"); + InsertMsd( + "Mlcmdl", + "števnik zapis=besedni vrsta=glavni spol=moški število=dvojina sklon=mestnik", + "Numeral Form=letter Type=cardinal Gender=masculine Number=dual Case=locative"); + InsertMsd( + "Mlcmdi", + "števnik zapis=besedni vrsta=glavni spol=moški število=dvojina sklon=orodnik", + "Numeral Form=letter Type=cardinal Gender=masculine Number=dual Case=instrumental"); + InsertMsd( + "Mlcmpn", + "števnik zapis=besedni vrsta=glavni spol=moški število=množina sklon=imenovalnik", + "Numeral Form=letter Type=cardinal Gender=masculine Number=plural Case=nominative"); + InsertMsd( + "Mlcmpg", + "števnik zapis=besedni vrsta=glavni spol=moški število=množina sklon=rodilnik", + "Numeral Form=letter Type=cardinal Gender=masculine Number=plural Case=genitive"); + InsertMsd( + "Mlcmpd", + "števnik zapis=besedni vrsta=glavni spol=moški število=množina sklon=dajalnik", + "Numeral Form=letter Type=cardinal Gender=masculine Number=plural Case=dative"); + InsertMsd( + "Mlcmpa", + "števnik zapis=besedni vrsta=glavni spol=moški število=množina sklon=tožilnik", + "Numeral Form=letter Type=cardinal Gender=masculine Number=plural Case=accusative"); + InsertMsd( + "Mlcmpl", + "števnik zapis=besedni vrsta=glavni spol=moški število=množina sklon=mestnik", + "Numeral Form=letter Type=cardinal Gender=masculine Number=plural Case=locative"); + InsertMsd( + "Mlcmpi", + "števnik zapis=besedni vrsta=glavni spol=moški število=množina sklon=orodnik", + "Numeral Form=letter Type=cardinal Gender=masculine Number=plural Case=instrumental"); + InsertMsd( + "Mlcfdn", + "števnik zapis=besedni vrsta=glavni spol=ženski število=dvojina sklon=imenovalnik", + "Numeral Form=letter Type=cardinal Gender=feminine Number=dual Case=nominative"); + InsertMsd( + "Mlcfdg", + "števnik zapis=besedni vrsta=glavni spol=ženski število=dvojina sklon=rodilnik", + "Numeral Form=letter Type=cardinal Gender=feminine Number=dual Case=genitive"); + InsertMsd( + "Mlcfdd", + "števnik zapis=besedni vrsta=glavni spol=ženski število=dvojina sklon=dajalnik", + "Numeral Form=letter Type=cardinal Gender=feminine Number=dual Case=dative"); + InsertMsd( + "Mlcfda", + "števnik zapis=besedni vrsta=glavni spol=ženski število=dvojina sklon=tožilnik", + "Numeral Form=letter Type=cardinal Gender=feminine Number=dual Case=accusative"); + InsertMsd( + "Mlcfdl", + "števnik zapis=besedni vrsta=glavni spol=ženski število=dvojina sklon=mestnik", + "Numeral Form=letter Type=cardinal Gender=feminine Number=dual Case=locative"); + InsertMsd( + "Mlcfdi", + "števnik zapis=besedni vrsta=glavni spol=ženski število=dvojina sklon=orodnik", + "Numeral Form=letter Type=cardinal Gender=feminine Number=dual Case=instrumental"); + InsertMsd( + "Mlcfpn", + "števnik zapis=besedni vrsta=glavni spol=ženski število=množina sklon=imenovalnik", + "Numeral Form=letter Type=cardinal Gender=feminine Number=plural Case=nominative"); + InsertMsd( + "Mlcfpg", + "števnik zapis=besedni vrsta=glavni spol=ženski število=množina sklon=rodilnik", + "Numeral Form=letter Type=cardinal Gender=feminine Number=plural Case=genitive"); + InsertMsd( + "Mlcfpd", + "števnik zapis=besedni vrsta=glavni spol=ženski število=množina sklon=dajalnik", + "Numeral Form=letter Type=cardinal Gender=feminine Number=plural Case=dative"); + InsertMsd( + "Mlcfpa", + "števnik zapis=besedni vrsta=glavni spol=ženski število=množina sklon=tožilnik", + "Numeral Form=letter Type=cardinal Gender=feminine Number=plural Case=accusative"); + InsertMsd( + "Mlcfpl", + "števnik zapis=besedni vrsta=glavni spol=ženski število=množina sklon=mestnik", + "Numeral Form=letter Type=cardinal Gender=feminine Number=plural Case=locative"); + InsertMsd( + "Mlcfpi", + "števnik zapis=besedni vrsta=glavni spol=ženski število=množina sklon=orodnik", + "Numeral Form=letter Type=cardinal Gender=feminine Number=plural Case=instrumental"); + InsertMsd( + "Mlcndn", + "števnik zapis=besedni vrsta=glavni spol=srednji število=dvojina sklon=imenovalnik", + "Numeral Form=letter Type=cardinal Gender=neuter Number=dual Case=nominative"); + InsertMsd( + "Mlcndg", + "števnik zapis=besedni vrsta=glavni spol=srednji število=dvojina sklon=rodilnik", + "Numeral Form=letter Type=cardinal Gender=neuter Number=dual Case=genitive"); + InsertMsd( + "Mlcndd", + "števnik zapis=besedni vrsta=glavni spol=srednji število=dvojina sklon=dajalnik", + "Numeral Form=letter Type=cardinal Gender=neuter Number=dual Case=dative"); + InsertMsd( + "Mlcnda", + "števnik zapis=besedni vrsta=glavni spol=srednji število=dvojina sklon=tožilnik", + "Numeral Form=letter Type=cardinal Gender=neuter Number=dual Case=accusative"); + InsertMsd( + "Mlcndl", + "števnik zapis=besedni vrsta=glavni spol=srednji število=dvojina sklon=mestnik", + "Numeral Form=letter Type=cardinal Gender=neuter Number=dual Case=locative"); + InsertMsd( + "Mlcndi", + "števnik zapis=besedni vrsta=glavni spol=srednji število=dvojina sklon=orodnik", + "Numeral Form=letter Type=cardinal Gender=neuter Number=dual Case=instrumental"); + InsertMsd( + "Mlcnpn", + "števnik zapis=besedni vrsta=glavni spol=srednji število=množina sklon=imenovalnik", + "Numeral Form=letter Type=cardinal Gender=neuter Number=plural Case=nominative"); + InsertMsd( + "Mlcnpg", + "števnik zapis=besedni vrsta=glavni spol=srednji število=množina sklon=rodilnik", + "Numeral Form=letter Type=cardinal Gender=neuter Number=plural Case=genitive"); + InsertMsd( + "Mlcnpd", + "števnik zapis=besedni vrsta=glavni spol=srednji število=množina sklon=dajalnik", + "Numeral Form=letter Type=cardinal Gender=neuter Number=plural Case=dative"); + InsertMsd( + "Mlcnpa", + "števnik zapis=besedni vrsta=glavni spol=srednji število=množina sklon=tožilnik", + "Numeral Form=letter Type=cardinal Gender=neuter Number=plural Case=accusative"); + InsertMsd( + "Mlcnpl", + "števnik zapis=besedni vrsta=glavni spol=srednji število=množina sklon=mestnik", + "Numeral Form=letter Type=cardinal Gender=neuter Number=plural Case=locative"); + InsertMsd( + "Mlcnpi", + "števnik zapis=besedni vrsta=glavni spol=srednji število=množina sklon=orodnik", + "Numeral Form=letter Type=cardinal Gender=neuter Number=plural Case=instrumental"); + InsertMsd( + "Mlomsn", + "števnik zapis=besedni vrsta=vrstilni spol=moški število=ednina sklon=imenovalnik", + "Numeral Form=letter Type=ordinal Gender=masculine Number=singular Case=nominative"); + InsertMsd( + "Mlomsg", + "števnik zapis=besedni vrsta=vrstilni spol=moški število=ednina sklon=rodilnik", + "Numeral Form=letter Type=ordinal Gender=masculine Number=singular Case=genitive"); + InsertMsd( + "Mlomsd", + "števnik zapis=besedni vrsta=vrstilni spol=moški število=ednina sklon=dajalnik", + "Numeral Form=letter Type=ordinal Gender=masculine Number=singular Case=dative"); + InsertMsd( + "Mlomsa", + "števnik zapis=besedni vrsta=vrstilni spol=moški število=ednina sklon=tožilnik", + "Numeral Form=letter Type=ordinal Gender=masculine Number=singular Case=accusative"); + InsertMsd( + "Mlomsl", + "števnik zapis=besedni vrsta=vrstilni spol=moški število=ednina sklon=mestnik", + "Numeral Form=letter Type=ordinal Gender=masculine Number=singular Case=locative"); + InsertMsd( + "Mlomsi", + "števnik zapis=besedni vrsta=vrstilni spol=moški število=ednina sklon=orodnik", + "Numeral Form=letter Type=ordinal Gender=masculine Number=singular Case=instrumental"); + InsertMsd( + "Mlomdn", + "števnik zapis=besedni vrsta=vrstilni spol=moški število=dvojina sklon=imenovalnik", + "Numeral Form=letter Type=ordinal Gender=masculine Number=dual Case=nominative"); + InsertMsd( + "Mlomdg", + "števnik zapis=besedni vrsta=vrstilni spol=moški število=dvojina sklon=rodilnik", + "Numeral Form=letter Type=ordinal Gender=masculine Number=dual Case=genitive"); + InsertMsd( + "Mlomdd", + "števnik zapis=besedni vrsta=vrstilni spol=moški število=dvojina sklon=dajalnik", + "Numeral Form=letter Type=ordinal Gender=masculine Number=dual Case=dative"); + InsertMsd( + "Mlomda", + "števnik zapis=besedni vrsta=vrstilni spol=moški število=dvojina sklon=tožilnik", + "Numeral Form=letter Type=ordinal Gender=masculine Number=dual Case=accusative"); + InsertMsd( + "Mlomdl", + "števnik zapis=besedni vrsta=vrstilni spol=moški število=dvojina sklon=mestnik", + "Numeral Form=letter Type=ordinal Gender=masculine Number=dual Case=locative"); + InsertMsd( + "Mlomdi", + "števnik zapis=besedni vrsta=vrstilni spol=moški število=dvojina sklon=orodnik", + "Numeral Form=letter Type=ordinal Gender=masculine Number=dual Case=instrumental"); + InsertMsd( + "Mlompn", + "števnik zapis=besedni vrsta=vrstilni spol=moški število=množina sklon=imenovalnik", + "Numeral Form=letter Type=ordinal Gender=masculine Number=plural Case=nominative"); + InsertMsd( + "Mlompg", + "števnik zapis=besedni vrsta=vrstilni spol=moški število=množina sklon=rodilnik", + "Numeral Form=letter Type=ordinal Gender=masculine Number=plural Case=genitive"); + InsertMsd( + "Mlompd", + "števnik zapis=besedni vrsta=vrstilni spol=moški število=množina sklon=dajalnik", + "Numeral Form=letter Type=ordinal Gender=masculine Number=plural Case=dative"); + InsertMsd( + "Mlompa", + "števnik zapis=besedni vrsta=vrstilni spol=moški število=množina sklon=tožilnik", + "Numeral Form=letter Type=ordinal Gender=masculine Number=plural Case=accusative"); + InsertMsd( + "Mlompl", + "števnik zapis=besedni vrsta=vrstilni spol=moški število=množina sklon=mestnik", + "Numeral Form=letter Type=ordinal Gender=masculine Number=plural Case=locative"); + InsertMsd( + "Mlompi", + "števnik zapis=besedni vrsta=vrstilni spol=moški število=množina sklon=orodnik", + "Numeral Form=letter Type=ordinal Gender=masculine Number=plural Case=instrumental"); + InsertMsd( + "Mlofsn", + "števnik zapis=besedni vrsta=vrstilni spol=ženski število=ednina sklon=imenovalnik", + "Numeral Form=letter Type=ordinal Gender=feminine Number=singular Case=nominative"); + InsertMsd( + "Mlofsg", + "števnik zapis=besedni vrsta=vrstilni spol=ženski število=ednina sklon=rodilnik", + "Numeral Form=letter Type=ordinal Gender=feminine Number=singular Case=genitive"); + InsertMsd( + "Mlofsd", + "števnik zapis=besedni vrsta=vrstilni spol=ženski število=ednina sklon=dajalnik", + "Numeral Form=letter Type=ordinal Gender=feminine Number=singular Case=dative"); + InsertMsd( + "Mlofsa", + "števnik zapis=besedni vrsta=vrstilni spol=ženski število=ednina sklon=tožilnik", + "Numeral Form=letter Type=ordinal Gender=feminine Number=singular Case=accusative"); + InsertMsd( + "Mlofsl", + "števnik zapis=besedni vrsta=vrstilni spol=ženski število=ednina sklon=mestnik", + "Numeral Form=letter Type=ordinal Gender=feminine Number=singular Case=locative"); + InsertMsd( + "Mlofsi", + "števnik zapis=besedni vrsta=vrstilni spol=ženski število=ednina sklon=orodnik", + "Numeral Form=letter Type=ordinal Gender=feminine Number=singular Case=instrumental"); + InsertMsd( + "Mlofdn", + "števnik zapis=besedni vrsta=vrstilni spol=ženski število=dvojina sklon=imenovalnik", + "Numeral Form=letter Type=ordinal Gender=feminine Number=dual Case=nominative"); + InsertMsd( + "Mlofdg", + "števnik zapis=besedni vrsta=vrstilni spol=ženski število=dvojina sklon=rodilnik", + "Numeral Form=letter Type=ordinal Gender=feminine Number=dual Case=genitive"); + InsertMsd( + "Mlofdd", + "števnik zapis=besedni vrsta=vrstilni spol=ženski število=dvojina sklon=dajalnik", + "Numeral Form=letter Type=ordinal Gender=feminine Number=dual Case=dative"); + InsertMsd( + "Mlofda", + "števnik zapis=besedni vrsta=vrstilni spol=ženski število=dvojina sklon=tožilnik", + "Numeral Form=letter Type=ordinal Gender=feminine Number=dual Case=accusative"); + InsertMsd( + "Mlofdl", + "števnik zapis=besedni vrsta=vrstilni spol=ženski število=dvojina sklon=mestnik", + "Numeral Form=letter Type=ordinal Gender=feminine Number=dual Case=locative"); + InsertMsd( + "Mlofdi", + "števnik zapis=besedni vrsta=vrstilni spol=ženski število=dvojina sklon=orodnik", + "Numeral Form=letter Type=ordinal Gender=feminine Number=dual Case=instrumental"); + InsertMsd( + "Mlofpn", + "števnik zapis=besedni vrsta=vrstilni spol=ženski število=množina sklon=imenovalnik", + "Numeral Form=letter Type=ordinal Gender=feminine Number=plural Case=nominative"); + InsertMsd( + "Mlofpg", + "števnik zapis=besedni vrsta=vrstilni spol=ženski število=množina sklon=rodilnik", + "Numeral Form=letter Type=ordinal Gender=feminine Number=plural Case=genitive"); + InsertMsd( + "Mlofpd", + "števnik zapis=besedni vrsta=vrstilni spol=ženski število=množina sklon=dajalnik", + "Numeral Form=letter Type=ordinal Gender=feminine Number=plural Case=dative"); + InsertMsd( + "Mlofpa", + "števnik zapis=besedni vrsta=vrstilni spol=ženski število=množina sklon=tožilnik", + "Numeral Form=letter Type=ordinal Gender=feminine Number=plural Case=accusative"); + InsertMsd( + "Mlofpl", + "števnik zapis=besedni vrsta=vrstilni spol=ženski število=množina sklon=mestnik", + "Numeral Form=letter Type=ordinal Gender=feminine Number=plural Case=locative"); + InsertMsd( + "Mlofpi", + "števnik zapis=besedni vrsta=vrstilni spol=ženski število=množina sklon=orodnik", + "Numeral Form=letter Type=ordinal Gender=feminine Number=plural Case=instrumental"); + InsertMsd( + "Mlonsn", + "števnik zapis=besedni vrsta=vrstilni spol=srednji število=ednina sklon=imenovalnik", + "Numeral Form=letter Type=ordinal Gender=neuter Number=singular Case=nominative"); + InsertMsd( + "Mlonsg", + "števnik zapis=besedni vrsta=vrstilni spol=srednji število=ednina sklon=rodilnik", + "Numeral Form=letter Type=ordinal Gender=neuter Number=singular Case=genitive"); + InsertMsd( + "Mlonsd", + "števnik zapis=besedni vrsta=vrstilni spol=srednji število=ednina sklon=dajalnik", + "Numeral Form=letter Type=ordinal Gender=neuter Number=singular Case=dative"); + InsertMsd( + "Mlonsa", + "števnik zapis=besedni vrsta=vrstilni spol=srednji število=ednina sklon=tožilnik", + "Numeral Form=letter Type=ordinal Gender=neuter Number=singular Case=accusative"); + InsertMsd( + "Mlonsl", + "števnik zapis=besedni vrsta=vrstilni spol=srednji število=ednina sklon=mestnik", + "Numeral Form=letter Type=ordinal Gender=neuter Number=singular Case=locative"); + InsertMsd( + "Mlonsi", + "števnik zapis=besedni vrsta=vrstilni spol=srednji število=ednina sklon=orodnik", + "Numeral Form=letter Type=ordinal Gender=neuter Number=singular Case=instrumental"); + InsertMsd( + "Mlondn", + "števnik zapis=besedni vrsta=vrstilni spol=srednji število=dvojina sklon=imenovalnik", + "Numeral Form=letter Type=ordinal Gender=neuter Number=dual Case=nominative"); + InsertMsd( + "Mlondg", + "števnik zapis=besedni vrsta=vrstilni spol=srednji število=dvojina sklon=rodilnik", + "Numeral Form=letter Type=ordinal Gender=neuter Number=dual Case=genitive"); + InsertMsd( + "Mlondd", + "števnik zapis=besedni vrsta=vrstilni spol=srednji število=dvojina sklon=dajalnik", + "Numeral Form=letter Type=ordinal Gender=neuter Number=dual Case=dative"); + InsertMsd( + "Mlonda", + "števnik zapis=besedni vrsta=vrstilni spol=srednji število=dvojina sklon=tožilnik", + "Numeral Form=letter Type=ordinal Gender=neuter Number=dual Case=accusative"); + InsertMsd( + "Mlondl", + "števnik zapis=besedni vrsta=vrstilni spol=srednji število=dvojina sklon=mestnik", + "Numeral Form=letter Type=ordinal Gender=neuter Number=dual Case=locative"); + InsertMsd( + "Mlondi", + "števnik zapis=besedni vrsta=vrstilni spol=srednji število=dvojina sklon=orodnik", + "Numeral Form=letter Type=ordinal Gender=neuter Number=dual Case=instrumental"); + InsertMsd( + "Mlonpn", + "števnik zapis=besedni vrsta=vrstilni spol=srednji število=množina sklon=imenovalnik", + "Numeral Form=letter Type=ordinal Gender=neuter Number=plural Case=nominative"); + InsertMsd( + "Mlonpg", + "števnik zapis=besedni vrsta=vrstilni spol=srednji število=množina sklon=rodilnik", + "Numeral Form=letter Type=ordinal Gender=neuter Number=plural Case=genitive"); + InsertMsd( + "Mlonpd", + "števnik zapis=besedni vrsta=vrstilni spol=srednji število=množina sklon=dajalnik", + "Numeral Form=letter Type=ordinal Gender=neuter Number=plural Case=dative"); + InsertMsd( + "Mlonpa", + "števnik zapis=besedni vrsta=vrstilni spol=srednji število=množina sklon=tožilnik", + "Numeral Form=letter Type=ordinal Gender=neuter Number=plural Case=accusative"); + InsertMsd( + "Mlonpl", + "števnik zapis=besedni vrsta=vrstilni spol=srednji število=množina sklon=mestnik", + "Numeral Form=letter Type=ordinal Gender=neuter Number=plural Case=locative"); + InsertMsd( + "Mlonpi", + "števnik zapis=besedni vrsta=vrstilni spol=srednji število=množina sklon=orodnik", + "Numeral Form=letter Type=ordinal Gender=neuter Number=plural Case=instrumental"); + InsertMsd( + "Mlpmsn", + "števnik zapis=besedni vrsta=zaimkovni spol=moški število=ednina sklon=imenovalnik", + "Numeral Form=letter Type=pronominal Gender=masculine Number=singular Case=nominative"); + InsertMsd( + "Mlpmsnn", + "števnik zapis=besedni vrsta=zaimkovni spol=moški število=ednina sklon=imenovalnik dolocnost=ne", + "Numeral Form=letter Type=pronominal Gender=masculine Number=singular Case=nominative Definiteness=no"); + InsertMsd( + "Mlpmsny", + "števnik zapis=besedni vrsta=zaimkovni spol=moški število=ednina sklon=imenovalnik dolocnost=da", + "Numeral Form=letter Type=pronominal Gender=masculine Number=singular Case=nominative Definiteness=yes"); + InsertMsd( + "Mlpmsg", + "števnik zapis=besedni vrsta=zaimkovni spol=moški število=ednina sklon=rodilnik", + "Numeral Form=letter Type=pronominal Gender=masculine Number=singular Case=genitive"); + InsertMsd( + "Mlpmsd", + "števnik zapis=besedni vrsta=zaimkovni spol=moški število=ednina sklon=dajalnik", + "Numeral Form=letter Type=pronominal Gender=masculine Number=singular Case=dative"); + InsertMsd( + "Mlpmsa", + "števnik zapis=besedni vrsta=zaimkovni spol=moški število=ednina sklon=tožilnik", + "Numeral Form=letter Type=pronominal Gender=masculine Number=singular Case=accusative"); + InsertMsd( + "Mlpmsan", + "števnik zapis=besedni vrsta=zaimkovni spol=moški število=ednina sklon=tožilnik dolocnost=ne", + "Numeral Form=letter Type=pronominal Gender=masculine Number=singular Case=accusative Definiteness=no"); + InsertMsd( + "Mlpmsay", + "števnik zapis=besedni vrsta=zaimkovni spol=moški število=ednina sklon=tožilnik dolocnost=da", + "Numeral Form=letter Type=pronominal Gender=masculine Number=singular Case=accusative Definiteness=yes"); + InsertMsd( + "Mlpmsl", + "števnik zapis=besedni vrsta=zaimkovni spol=moški število=ednina sklon=mestnik", + "Numeral Form=letter Type=pronominal Gender=masculine Number=singular Case=locative"); + InsertMsd( + "Mlpmsi", + "števnik zapis=besedni vrsta=zaimkovni spol=moški število=ednina sklon=orodnik", + "Numeral Form=letter Type=pronominal Gender=masculine Number=singular Case=instrumental"); + InsertMsd( + "Mlpmdn", + "števnik zapis=besedni vrsta=zaimkovni spol=moški število=dvojina sklon=imenovalnik", + "Numeral Form=letter Type=pronominal Gender=masculine Number=dual Case=nominative"); + InsertMsd( + "Mlpmdg", + "števnik zapis=besedni vrsta=zaimkovni spol=moški število=dvojina sklon=rodilnik", + "Numeral Form=letter Type=pronominal Gender=masculine Number=dual Case=genitive"); + InsertMsd( + "Mlpmdd", + "števnik zapis=besedni vrsta=zaimkovni spol=moški število=dvojina sklon=dajalnik", + "Numeral Form=letter Type=pronominal Gender=masculine Number=dual Case=dative"); + InsertMsd( + "Mlpmda", + "števnik zapis=besedni vrsta=zaimkovni spol=moški število=dvojina sklon=tožilnik", + "Numeral Form=letter Type=pronominal Gender=masculine Number=dual Case=accusative"); + InsertMsd( + "Mlpmdl", + "števnik zapis=besedni vrsta=zaimkovni spol=moški število=dvojina sklon=mestnik", + "Numeral Form=letter Type=pronominal Gender=masculine Number=dual Case=locative"); + InsertMsd( + "Mlpmdi", + "števnik zapis=besedni vrsta=zaimkovni spol=moški število=dvojina sklon=orodnik", + "Numeral Form=letter Type=pronominal Gender=masculine Number=dual Case=instrumental"); + InsertMsd( + "Mlpmpn", + "števnik zapis=besedni vrsta=zaimkovni spol=moški število=množina sklon=imenovalnik", + "Numeral Form=letter Type=pronominal Gender=masculine Number=plural Case=nominative"); + InsertMsd( + "Mlpmpg", + "števnik zapis=besedni vrsta=zaimkovni spol=moški število=množina sklon=rodilnik", + "Numeral Form=letter Type=pronominal Gender=masculine Number=plural Case=genitive"); + InsertMsd( + "Mlpmpd", + "števnik zapis=besedni vrsta=zaimkovni spol=moški število=množina sklon=dajalnik", + "Numeral Form=letter Type=pronominal Gender=masculine Number=plural Case=dative"); + InsertMsd( + "Mlpmpa", + "števnik zapis=besedni vrsta=zaimkovni spol=moški število=množina sklon=tožilnik", + "Numeral Form=letter Type=pronominal Gender=masculine Number=plural Case=accusative"); + InsertMsd( + "Mlpmpl", + "števnik zapis=besedni vrsta=zaimkovni spol=moški število=množina sklon=mestnik", + "Numeral Form=letter Type=pronominal Gender=masculine Number=plural Case=locative"); + InsertMsd( + "Mlpmpi", + "števnik zapis=besedni vrsta=zaimkovni spol=moški število=množina sklon=orodnik", + "Numeral Form=letter Type=pronominal Gender=masculine Number=plural Case=instrumental"); + InsertMsd( + "Mlpfsn", + "števnik zapis=besedni vrsta=zaimkovni spol=ženski število=ednina sklon=imenovalnik", + "Numeral Form=letter Type=pronominal Gender=feminine Number=singular Case=nominative"); + InsertMsd( + "Mlpfsg", + "števnik zapis=besedni vrsta=zaimkovni spol=ženski število=ednina sklon=rodilnik", + "Numeral Form=letter Type=pronominal Gender=feminine Number=singular Case=genitive"); + InsertMsd( + "Mlpfsd", + "števnik zapis=besedni vrsta=zaimkovni spol=ženski število=ednina sklon=dajalnik", + "Numeral Form=letter Type=pronominal Gender=feminine Number=singular Case=dative"); + InsertMsd( + "Mlpfsa", + "števnik zapis=besedni vrsta=zaimkovni spol=ženski število=ednina sklon=tožilnik", + "Numeral Form=letter Type=pronominal Gender=feminine Number=singular Case=accusative"); + InsertMsd( + "Mlpfsl", + "števnik zapis=besedni vrsta=zaimkovni spol=ženski število=ednina sklon=mestnik", + "Numeral Form=letter Type=pronominal Gender=feminine Number=singular Case=locative"); + InsertMsd( + "Mlpfsi", + "števnik zapis=besedni vrsta=zaimkovni spol=ženski število=ednina sklon=orodnik", + "Numeral Form=letter Type=pronominal Gender=feminine Number=singular Case=instrumental"); + InsertMsd( + "Mlpfdn", + "števnik zapis=besedni vrsta=zaimkovni spol=ženski število=dvojina sklon=imenovalnik", + "Numeral Form=letter Type=pronominal Gender=feminine Number=dual Case=nominative"); + InsertMsd( + "Mlpfdg", + "števnik zapis=besedni vrsta=zaimkovni spol=ženski število=dvojina sklon=rodilnik", + "Numeral Form=letter Type=pronominal Gender=feminine Number=dual Case=genitive"); + InsertMsd( + "Mlpfdd", + "števnik zapis=besedni vrsta=zaimkovni spol=ženski število=dvojina sklon=dajalnik", + "Numeral Form=letter Type=pronominal Gender=feminine Number=dual Case=dative"); + InsertMsd( + "Mlpfda", + "števnik zapis=besedni vrsta=zaimkovni spol=ženski število=dvojina sklon=tožilnik", + "Numeral Form=letter Type=pronominal Gender=feminine Number=dual Case=accusative"); + InsertMsd( + "Mlpfdl", + "števnik zapis=besedni vrsta=zaimkovni spol=ženski število=dvojina sklon=mestnik", + "Numeral Form=letter Type=pronominal Gender=feminine Number=dual Case=locative"); + InsertMsd( + "Mlpfdi", + "števnik zapis=besedni vrsta=zaimkovni spol=ženski število=dvojina sklon=orodnik", + "Numeral Form=letter Type=pronominal Gender=feminine Number=dual Case=instrumental"); + InsertMsd( + "Mlpfpn", + "števnik zapis=besedni vrsta=zaimkovni spol=ženski število=množina sklon=imenovalnik", + "Numeral Form=letter Type=pronominal Gender=feminine Number=plural Case=nominative"); + InsertMsd( + "Mlpfpg", + "števnik zapis=besedni vrsta=zaimkovni spol=ženski število=množina sklon=rodilnik", + "Numeral Form=letter Type=pronominal Gender=feminine Number=plural Case=genitive"); + InsertMsd( + "Mlpfpd", + "števnik zapis=besedni vrsta=zaimkovni spol=ženski število=množina sklon=dajalnik", + "Numeral Form=letter Type=pronominal Gender=feminine Number=plural Case=dative"); + InsertMsd( + "Mlpfpa", + "števnik zapis=besedni vrsta=zaimkovni spol=ženski število=množina sklon=tožilnik", + "Numeral Form=letter Type=pronominal Gender=feminine Number=plural Case=accusative"); + InsertMsd( + "Mlpfpl", + "števnik zapis=besedni vrsta=zaimkovni spol=ženski število=množina sklon=mestnik", + "Numeral Form=letter Type=pronominal Gender=feminine Number=plural Case=locative"); + InsertMsd( + "Mlpfpi", + "števnik zapis=besedni vrsta=zaimkovni spol=ženski število=množina sklon=orodnik", + "Numeral Form=letter Type=pronominal Gender=feminine Number=plural Case=instrumental"); + InsertMsd( + "Mlpnsn", + "števnik zapis=besedni vrsta=zaimkovni spol=srednji število=ednina sklon=imenovalnik", + "Numeral Form=letter Type=pronominal Gender=neuter Number=singular Case=nominative"); + InsertMsd( + "Mlpnsg", + "števnik zapis=besedni vrsta=zaimkovni spol=srednji število=ednina sklon=rodilnik", + "Numeral Form=letter Type=pronominal Gender=neuter Number=singular Case=genitive"); + InsertMsd( + "Mlpnsd", + "števnik zapis=besedni vrsta=zaimkovni spol=srednji število=ednina sklon=dajalnik", + "Numeral Form=letter Type=pronominal Gender=neuter Number=singular Case=dative"); + InsertMsd( + "Mlpnsa", + "števnik zapis=besedni vrsta=zaimkovni spol=srednji število=ednina sklon=tožilnik", + "Numeral Form=letter Type=pronominal Gender=neuter Number=singular Case=accusative"); + InsertMsd( + "Mlpnsl", + "števnik zapis=besedni vrsta=zaimkovni spol=srednji število=ednina sklon=mestnik", + "Numeral Form=letter Type=pronominal Gender=neuter Number=singular Case=locative"); + InsertMsd( + "Mlpnsi", + "števnik zapis=besedni vrsta=zaimkovni spol=srednji število=ednina sklon=orodnik", + "Numeral Form=letter Type=pronominal Gender=neuter Number=singular Case=instrumental"); + InsertMsd( + "Mlpndn", + "števnik zapis=besedni vrsta=zaimkovni spol=srednji število=dvojina sklon=imenovalnik", + "Numeral Form=letter Type=pronominal Gender=neuter Number=dual Case=nominative"); + InsertMsd( + "Mlpndg", + "števnik zapis=besedni vrsta=zaimkovni spol=srednji število=dvojina sklon=rodilnik", + "Numeral Form=letter Type=pronominal Gender=neuter Number=dual Case=genitive"); + InsertMsd( + "Mlpndd", + "števnik zapis=besedni vrsta=zaimkovni spol=srednji število=dvojina sklon=dajalnik", + "Numeral Form=letter Type=pronominal Gender=neuter Number=dual Case=dative"); + InsertMsd( + "Mlpnda", + "števnik zapis=besedni vrsta=zaimkovni spol=srednji število=dvojina sklon=tožilnik", + "Numeral Form=letter Type=pronominal Gender=neuter Number=dual Case=accusative"); + InsertMsd( + "Mlpndl", + "števnik zapis=besedni vrsta=zaimkovni spol=srednji število=dvojina sklon=mestnik", + "Numeral Form=letter Type=pronominal Gender=neuter Number=dual Case=locative"); + InsertMsd( + "Mlpndi", + "števnik zapis=besedni vrsta=zaimkovni spol=srednji število=dvojina sklon=orodnik", + "Numeral Form=letter Type=pronominal Gender=neuter Number=dual Case=instrumental"); + InsertMsd( + "Mlpnpn", + "števnik zapis=besedni vrsta=zaimkovni spol=srednji število=množina sklon=imenovalnik", + "Numeral Form=letter Type=pronominal Gender=neuter Number=plural Case=nominative"); + InsertMsd( + "Mlpnpg", + "števnik zapis=besedni vrsta=zaimkovni spol=srednji število=množina sklon=rodilnik", + "Numeral Form=letter Type=pronominal Gender=neuter Number=plural Case=genitive"); + InsertMsd( + "Mlpnpd", + "števnik zapis=besedni vrsta=zaimkovni spol=srednji število=množina sklon=dajalnik", + "Numeral Form=letter Type=pronominal Gender=neuter Number=plural Case=dative"); + InsertMsd( + "Mlpnpa", + "števnik zapis=besedni vrsta=zaimkovni spol=srednji število=množina sklon=tožilnik", + "Numeral Form=letter Type=pronominal Gender=neuter Number=plural Case=accusative"); + InsertMsd( + "Mlpnpl", + "števnik zapis=besedni vrsta=zaimkovni spol=srednji število=množina sklon=mestnik", + "Numeral Form=letter Type=pronominal Gender=neuter Number=plural Case=locative"); + InsertMsd( + "Mlpnpi", + "števnik zapis=besedni vrsta=zaimkovni spol=srednji število=množina sklon=orodnik", + "Numeral Form=letter Type=pronominal Gender=neuter Number=plural Case=instrumental"); + InsertMsd( + "Mlsmsnn", + "števnik zapis=besedni vrsta=drugi spol=moški število=ednina sklon=imenovalnik dolocnost=ne", + "Numeral Form=letter Type=special Gender=masculine Number=singular Case=nominative Definiteness=no"); + InsertMsd( + "Mlsmsny", + "števnik zapis=besedni vrsta=drugi spol=moški število=ednina sklon=imenovalnik dolocnost=da", + "Numeral Form=letter Type=special Gender=masculine Number=singular Case=nominative Definiteness=yes"); + InsertMsd( + "Mlsmsg", + "števnik zapis=besedni vrsta=drugi spol=moški število=ednina sklon=rodilnik", + "Numeral Form=letter Type=special Gender=masculine Number=singular Case=genitive"); + InsertMsd( + "Mlsmsd", + "števnik zapis=besedni vrsta=drugi spol=moški število=ednina sklon=dajalnik", + "Numeral Form=letter Type=special Gender=masculine Number=singular Case=dative"); + InsertMsd( + "Mlsmsa", + "števnik zapis=besedni vrsta=drugi spol=moški število=ednina sklon=tožilnik", + "Numeral Form=letter Type=special Gender=masculine Number=singular Case=accusative"); + InsertMsd( + "Mlsmsan", + "števnik zapis=besedni vrsta=drugi spol=moški število=ednina sklon=tožilnik dolocnost=ne", + "Numeral Form=letter Type=special Gender=masculine Number=singular Case=accusative Definiteness=no"); + InsertMsd( + "Mlsmsay", + "števnik zapis=besedni vrsta=drugi spol=moški število=ednina sklon=tožilnik dolocnost=da", + "Numeral Form=letter Type=special Gender=masculine Number=singular Case=accusative Definiteness=yes"); + InsertMsd( + "Mlsmsl", + "števnik zapis=besedni vrsta=drugi spol=moški število=ednina sklon=mestnik", + "Numeral Form=letter Type=special Gender=masculine Number=singular Case=locative"); + InsertMsd( + "Mlsmsi", + "števnik zapis=besedni vrsta=drugi spol=moški število=ednina sklon=orodnik", + "Numeral Form=letter Type=special Gender=masculine Number=singular Case=instrumental"); + InsertMsd( + "Mlsmdn", + "števnik zapis=besedni vrsta=drugi spol=moški število=dvojina sklon=imenovalnik", + "Numeral Form=letter Type=special Gender=masculine Number=dual Case=nominative"); + InsertMsd( + "Mlsmdg", + "števnik zapis=besedni vrsta=drugi spol=moški število=dvojina sklon=rodilnik", + "Numeral Form=letter Type=special Gender=masculine Number=dual Case=genitive"); + InsertMsd( + "Mlsmdd", + "števnik zapis=besedni vrsta=drugi spol=moški število=dvojina sklon=dajalnik", + "Numeral Form=letter Type=special Gender=masculine Number=dual Case=dative"); + InsertMsd( + "Mlsmda", + "števnik zapis=besedni vrsta=drugi spol=moški število=dvojina sklon=tožilnik", + "Numeral Form=letter Type=special Gender=masculine Number=dual Case=accusative"); + InsertMsd( + "Mlsmdl", + "števnik zapis=besedni vrsta=drugi spol=moški število=dvojina sklon=mestnik", + "Numeral Form=letter Type=special Gender=masculine Number=dual Case=locative"); + InsertMsd( + "Mlsmdi", + "števnik zapis=besedni vrsta=drugi spol=moški število=dvojina sklon=orodnik", + "Numeral Form=letter Type=special Gender=masculine Number=dual Case=instrumental"); + InsertMsd( + "Mlsmpn", + "števnik zapis=besedni vrsta=drugi spol=moški število=množina sklon=imenovalnik", + "Numeral Form=letter Type=special Gender=masculine Number=plural Case=nominative"); + InsertMsd( + "Mlsmpg", + "števnik zapis=besedni vrsta=drugi spol=moški število=množina sklon=rodilnik", + "Numeral Form=letter Type=special Gender=masculine Number=plural Case=genitive"); + InsertMsd( + "Mlsmpd", + "števnik zapis=besedni vrsta=drugi spol=moški število=množina sklon=dajalnik", + "Numeral Form=letter Type=special Gender=masculine Number=plural Case=dative"); + InsertMsd( + "Mlsmpa", + "števnik zapis=besedni vrsta=drugi spol=moški število=množina sklon=tožilnik", + "Numeral Form=letter Type=special Gender=masculine Number=plural Case=accusative"); + InsertMsd( + "Mlsmpl", + "števnik zapis=besedni vrsta=drugi spol=moški število=množina sklon=mestnik", + "Numeral Form=letter Type=special Gender=masculine Number=plural Case=locative"); + InsertMsd( + "Mlsmpi", + "števnik zapis=besedni vrsta=drugi spol=moški število=množina sklon=orodnik", + "Numeral Form=letter Type=special Gender=masculine Number=plural Case=instrumental"); + InsertMsd( + "Mlsfsn", + "števnik zapis=besedni vrsta=drugi spol=ženski število=ednina sklon=imenovalnik", + "Numeral Form=letter Type=special Gender=feminine Number=singular Case=nominative"); + InsertMsd( + "Mlsfsg", + "števnik zapis=besedni vrsta=drugi spol=ženski število=ednina sklon=rodilnik", + "Numeral Form=letter Type=special Gender=feminine Number=singular Case=genitive"); + InsertMsd( + "Mlsfsd", + "števnik zapis=besedni vrsta=drugi spol=ženski število=ednina sklon=dajalnik", + "Numeral Form=letter Type=special Gender=feminine Number=singular Case=dative"); + InsertMsd( + "Mlsfsa", + "števnik zapis=besedni vrsta=drugi spol=ženski število=ednina sklon=tožilnik", + "Numeral Form=letter Type=special Gender=feminine Number=singular Case=accusative"); + InsertMsd( + "Mlsfsl", + "števnik zapis=besedni vrsta=drugi spol=ženski število=ednina sklon=mestnik", + "Numeral Form=letter Type=special Gender=feminine Number=singular Case=locative"); + InsertMsd( + "Mlsfsi", + "števnik zapis=besedni vrsta=drugi spol=ženski število=ednina sklon=orodnik", + "Numeral Form=letter Type=special Gender=feminine Number=singular Case=instrumental"); + InsertMsd( + "Mlsfdn", + "števnik zapis=besedni vrsta=drugi spol=ženski število=dvojina sklon=imenovalnik", + "Numeral Form=letter Type=special Gender=feminine Number=dual Case=nominative"); + InsertMsd( + "Mlsfdg", + "števnik zapis=besedni vrsta=drugi spol=ženski število=dvojina sklon=rodilnik", + "Numeral Form=letter Type=special Gender=feminine Number=dual Case=genitive"); + InsertMsd( + "Mlsfdd", + "števnik zapis=besedni vrsta=drugi spol=ženski število=dvojina sklon=dajalnik", + "Numeral Form=letter Type=special Gender=feminine Number=dual Case=dative"); + InsertMsd( + "Mlsfda", + "števnik zapis=besedni vrsta=drugi spol=ženski število=dvojina sklon=tožilnik", + "Numeral Form=letter Type=special Gender=feminine Number=dual Case=accusative"); + InsertMsd( + "Mlsfdl", + "števnik zapis=besedni vrsta=drugi spol=ženski število=dvojina sklon=mestnik", + "Numeral Form=letter Type=special Gender=feminine Number=dual Case=locative"); + InsertMsd( + "Mlsfdi", + "števnik zapis=besedni vrsta=drugi spol=ženski število=dvojina sklon=orodnik", + "Numeral Form=letter Type=special Gender=feminine Number=dual Case=instrumental"); + InsertMsd( + "Mlsfpn", + "števnik zapis=besedni vrsta=drugi spol=ženski število=množina sklon=imenovalnik", + "Numeral Form=letter Type=special Gender=feminine Number=plural Case=nominative"); + InsertMsd( + "Mlsfpg", + "števnik zapis=besedni vrsta=drugi spol=ženski število=množina sklon=rodilnik", + "Numeral Form=letter Type=special Gender=feminine Number=plural Case=genitive"); + InsertMsd( + "Mlsfpd", + "števnik zapis=besedni vrsta=drugi spol=ženski število=množina sklon=dajalnik", + "Numeral Form=letter Type=special Gender=feminine Number=plural Case=dative"); + InsertMsd( + "Mlsfpa", + "števnik zapis=besedni vrsta=drugi spol=ženski število=množina sklon=tožilnik", + "Numeral Form=letter Type=special Gender=feminine Number=plural Case=accusative"); + InsertMsd( + "Mlsfpl", + "števnik zapis=besedni vrsta=drugi spol=ženski število=množina sklon=mestnik", + "Numeral Form=letter Type=special Gender=feminine Number=plural Case=locative"); + InsertMsd( + "Mlsfpi", + "števnik zapis=besedni vrsta=drugi spol=ženski število=množina sklon=orodnik", + "Numeral Form=letter Type=special Gender=feminine Number=plural Case=instrumental"); + InsertMsd( + "Mlsnsn", + "števnik zapis=besedni vrsta=drugi spol=srednji število=ednina sklon=imenovalnik", + "Numeral Form=letter Type=special Gender=neuter Number=singular Case=nominative"); + InsertMsd( + "Mlsnsg", + "števnik zapis=besedni vrsta=drugi spol=srednji število=ednina sklon=rodilnik", + "Numeral Form=letter Type=special Gender=neuter Number=singular Case=genitive"); + InsertMsd( + "Mlsnsd", + "števnik zapis=besedni vrsta=drugi spol=srednji število=ednina sklon=dajalnik", + "Numeral Form=letter Type=special Gender=neuter Number=singular Case=dative"); + InsertMsd( + "Mlsnsa", + "števnik zapis=besedni vrsta=drugi spol=srednji število=ednina sklon=tožilnik", + "Numeral Form=letter Type=special Gender=neuter Number=singular Case=accusative"); + InsertMsd( + "Mlsnsl", + "števnik zapis=besedni vrsta=drugi spol=srednji število=ednina sklon=mestnik", + "Numeral Form=letter Type=special Gender=neuter Number=singular Case=locative"); + InsertMsd( + "Mlsnsi", + "števnik zapis=besedni vrsta=drugi spol=srednji število=ednina sklon=orodnik", + "Numeral Form=letter Type=special Gender=neuter Number=singular Case=instrumental"); + InsertMsd( + "Mlsndn", + "števnik zapis=besedni vrsta=drugi spol=srednji število=dvojina sklon=imenovalnik", + "Numeral Form=letter Type=special Gender=neuter Number=dual Case=nominative"); + InsertMsd( + "Mlsndg", + "števnik zapis=besedni vrsta=drugi spol=srednji število=dvojina sklon=rodilnik", + "Numeral Form=letter Type=special Gender=neuter Number=dual Case=genitive"); + InsertMsd( + "Mlsndd", + "števnik zapis=besedni vrsta=drugi spol=srednji število=dvojina sklon=dajalnik", + "Numeral Form=letter Type=special Gender=neuter Number=dual Case=dative"); + InsertMsd( + "Mlsnda", + "števnik zapis=besedni vrsta=drugi spol=srednji število=dvojina sklon=tožilnik", + "Numeral Form=letter Type=special Gender=neuter Number=dual Case=accusative"); + InsertMsd( + "Mlsndl", + "števnik zapis=besedni vrsta=drugi spol=srednji število=dvojina sklon=mestnik", + "Numeral Form=letter Type=special Gender=neuter Number=dual Case=locative"); + InsertMsd( + "Mlsndi", + "števnik zapis=besedni vrsta=drugi spol=srednji število=dvojina sklon=orodnik", + "Numeral Form=letter Type=special Gender=neuter Number=dual Case=instrumental"); + InsertMsd( + "Mlsnpn", + "števnik zapis=besedni vrsta=drugi spol=srednji število=množina sklon=imenovalnik", + "Numeral Form=letter Type=special Gender=neuter Number=plural Case=nominative"); + InsertMsd( + "Mlsnpg", + "števnik zapis=besedni vrsta=drugi spol=srednji število=množina sklon=rodilnik", + "Numeral Form=letter Type=special Gender=neuter Number=plural Case=genitive"); + InsertMsd( + "Mlsnpd", + "števnik zapis=besedni vrsta=drugi spol=srednji število=množina sklon=dajalnik", + "Numeral Form=letter Type=special Gender=neuter Number=plural Case=dative"); + InsertMsd( + "Mlsnpa", + "števnik zapis=besedni vrsta=drugi spol=srednji število=množina sklon=tožilnik", + "Numeral Form=letter Type=special Gender=neuter Number=plural Case=accusative"); + InsertMsd( + "Mlsnpl", + "števnik zapis=besedni vrsta=drugi spol=srednji število=množina sklon=mestnik", + "Numeral Form=letter Type=special Gender=neuter Number=plural Case=locative"); + InsertMsd( + "Mlsnpi", + "števnik zapis=besedni vrsta=drugi spol=srednji število=množina sklon=orodnik", + "Numeral Form=letter Type=special Gender=neuter Number=plural Case=instrumental"); + InsertMsd("Sn", "predlog sklon=imenovalnik", "Adposition Case=nominative"); + InsertMsd("Sg", "predlog sklon=rodilnik", "Adposition Case=genitive"); + InsertMsd("Sd", "predlog sklon=dajalnik", "Adposition Case=dative"); + InsertMsd("Sa", "predlog sklon=tožilnik", "Adposition Case=accusative"); + InsertMsd("Sl", "predlog sklon=mestnik", "Adposition Case=locative"); + InsertMsd("Si", "predlog sklon=orodnik", "Adposition Case=instrumental"); + InsertMsd("Cc", "veznik vrsta=priredni", "Conjunction Type=coordinating"); + InsertMsd("Cs", "veznik vrsta=podredni", "Conjunction Type=subordinating"); + InsertMsd("Q", "clenek", "Particle"); + InsertMsd("I", "medmet", "Interjection"); + InsertMsd("Y", "okrajšava", "Abbreviation"); + InsertMsd("X", "neuvršceno", "Residual"); + InsertMsd("Xf", "neuvršceno vrsta=tujejezicno", "Residual Type=foreign"); + InsertMsd("Xt", "neuvršceno vrsta=tipkarska", "Residual Type=typo"); + InsertMsd("Xw", "neuvršceno vrsta=splet", "Residual Type=web"); + InsertMsd("Xe", "neuvršceno vrsta=emo", "Residual Type=emo"); + InsertMsd("Xh", "neuvršceno vrsta=kljucnik", "Residual Type=hashtag"); + InsertMsd("Xa", "neuvršceno vrsta=afna", "Residual Type=at"); + InsertMsd("Xp", "neuvršceno vrsta=program", "Residual Type=program"); + InsertMsd("Z", "locilo", "Punctuation"); + } + + private void InsertMsd(string code, string description, string englishDescription) + { + var currentDate = DateTime.UtcNow; + var data = new Dictionary(); + data.Add(nameof(Msd.Id), Guid.NewGuid()); + data.Add(nameof(Msd.CreatedDate), currentDate); + data.Add(nameof(Msd.ModifiedDate), currentDate); + data.Add(nameof(Msd.Code), code); + data.Add(nameof(Msd.Description), description); + data.Add(nameof(Msd.EnglishDescription), englishDescription); + Insert.IntoTable(nameof(Msd)).Row(data); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Data/Rsdo.Concordancer.Data.csproj b/src/core/Rsdo.Concordancer.Data/Rsdo.Concordancer.Data.csproj new file mode 100644 index 0000000..03e2dd3 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Data/Rsdo.Concordancer.Data.csproj @@ -0,0 +1,23 @@ + + + + net6.0 + true + false + 1.0.0 + + + + + + + + + + + + + + + + diff --git a/src/core/Rsdo.Concordancer.Data/Services/DatabaseMigrationRunner.cs b/src/core/Rsdo.Concordancer.Data/Services/DatabaseMigrationRunner.cs new file mode 100644 index 0000000..bab03d8 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Data/Services/DatabaseMigrationRunner.cs @@ -0,0 +1,43 @@ +using System; +using FluentMigrator.Runner; +using FluentMigrator.Runner.Generators.Postgres; +using FluentMigrator.Runner.Initialization; +using FluentMigrator.Runner.VersionTableInfo; +using Microsoft.Extensions.DependencyInjection; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.Data.CompositionRoot; +using Rsdo.Concordancer.Data.Framework; + +namespace Rsdo.Concordancer.Data.Services; + +public class DatabaseMigrationRunner : IDatabaseMigrationRunner +{ + public void MigrateUp(string connectionString, MigrationTag migrationTag) + { + var serviceProvider = CreateServices(connectionString, migrationTag); + + using var scope = serviceProvider.CreateScope(); + UpdateDatabase(scope.ServiceProvider); + } + + private static IServiceProvider CreateServices(string connectionString, MigrationTag migrationTag) + { + return new ServiceCollection().AddFluentMigratorCore() + .ConfigureRunner(rb => rb.AddPostgres11_0().WithGlobalConnectionString(connectionString).ScanIn(typeof(DataModule).Assembly).For.Migrations()) + .AddLogging(lb => lb.AddFluentMigratorConsole()) + .Configure( + opt => opt.Tags = new[] + { + migrationTag.ToString(), + }) + .AddScoped() + .AddScoped() + .BuildServiceProvider(false); + } + + private static void UpdateDatabase(IServiceProvider serviceProvider) + { + var runner = serviceProvider.GetRequiredService(); + runner.MigrateUp(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/CompositionRoot/InfrastructureModule.cs b/src/core/Rsdo.Concordancer.Infrastructure/CompositionRoot/InfrastructureModule.cs new file mode 100644 index 0000000..1a8f708 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/CompositionRoot/InfrastructureModule.cs @@ -0,0 +1,69 @@ +using System.Reflection; +using Autofac; +using Microsoft.Extensions.Configuration; +using Rsdo.Concordancer.Core.Search; +using Rsdo.Concordancer.Core.Search.Aggregations; +using Rsdo.Concordancer.Infrastructure.Search; +using Rsdo.Concordancer.Infrastructure.Search.AddRecordsHandlers; +using Rsdo.Concordancer.Infrastructure.Search.Aggregations; +using Rsdo.Concordancer.Infrastructure.Search.Client; +using Rsdo.Concordancer.Infrastructure.Search.DeleteRecordsHandlers; +using Rsdo.Concordancer.Infrastructure.Search.Indexes; +using Rsdo.Concordancer.Infrastructure.Search.QueryBuilders; +using Rsdo.Concordancer.ServiceModel.Types; +using Module = Autofac.Module; + +namespace Rsdo.Concordancer.Infrastructure.CompositionRoot; + +public class InfrastructureModule : Module +{ + private Assembly InfrastructureAssembly => GetType().Assembly; + + protected override void Load(ContainerBuilder builder) + { + base.Load(builder); + + RegisterConfiguration(builder); + RegisterSearch(builder); + } + + private static void RegisterConfiguration(ContainerBuilder builder) + { + var configuration = new ConfigurationBuilder().AddEnvironmentVariables().Build(); + builder.RegisterInstance(configuration).As().SingleInstance(); + } + + private void RegisterSearch(ContainerBuilder builder) + { + // Search engine + builder.RegisterType().As().SingleInstance(); + + // Elastic client + builder.RegisterType().As().SingleInstance(); + builder.Register( + c => + { + var factory = c.Resolve(); + return factory.Get(); + }) + .SingleInstance(); + + // Index providers + builder.RegisterType().As().SingleInstance(); + builder.RegisterAssemblyTypes(InfrastructureAssembly).AsClosedTypesOf(typeof(IIndexProvider<>)).AsImplementedInterfaces().SingleInstance(); + + // Add and delete records + builder.RegisterType().As().SingleInstance(); + builder.RegisterType().As().SingleInstance(); + builder.RegisterAssemblyTypes(InfrastructureAssembly).AsClosedTypesOf(typeof(IAddRecordsHandler<>)).AsImplementedInterfaces().SingleInstance(); + builder.RegisterAssemblyTypes(InfrastructureAssembly).AsClosedTypesOf(typeof(IDeleteRecordsHandler<>)).AsImplementedInterfaces().SingleInstance(); + + // Query builders + builder.RegisterType().As().SingleInstance(); + builder.RegisterAssemblyTypes(InfrastructureAssembly).AsClosedTypesOf(typeof(IQueryBuilder<>)).AsImplementedInterfaces().SingleInstance(); + + // Aggregations + builder.RegisterType().As().SingleInstance(); + builder.RegisterType().Keyed(AggregationType.Text).SingleInstance(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Extensions/ElasticQueryExtensions.cs b/src/core/Rsdo.Concordancer.Infrastructure/Extensions/ElasticQueryExtensions.cs new file mode 100644 index 0000000..674afd1 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Extensions/ElasticQueryExtensions.cs @@ -0,0 +1,33 @@ +using System.Collections.Generic; +using OpenSearch.Client; + +namespace Rsdo.Concordancer.Infrastructure.Extensions; + +public static class ElasticQueryExtensions +{ + public static QueryContainer ToBooleanAndQuery(this List queries) + { + return queries.Count switch + { + 0 => null, + 1 => queries[0], + _ => new BoolQuery() + { + Must = queries, + }, + }; + } + + public static QueryContainer ToBooleanOrQuery(this List queries) + { + return queries.Count switch + { + 0 => null, + 1 => queries[0], + _ => new BoolQuery() + { + Should = queries, + }, + }; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Rsdo.Concordancer.Infrastructure.csproj b/src/core/Rsdo.Concordancer.Infrastructure/Rsdo.Concordancer.Infrastructure.csproj new file mode 100644 index 0000000..330e89d --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Rsdo.Concordancer.Infrastructure.csproj @@ -0,0 +1,22 @@ + + + + net6.0 + true + false + 1.0.0 + + + + + + + + + + + + + + + diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/AddRecordsHandlers/AddConcordanceRecordsHandler.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/AddRecordsHandlers/AddConcordanceRecordsHandler.cs new file mode 100644 index 0000000..f367e50 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/AddRecordsHandlers/AddConcordanceRecordsHandler.cs @@ -0,0 +1,61 @@ +using OpenSearch.Client; +using Rsdo.Concordancer.Core.Model; +using Rsdo.Concordancer.Infrastructure.Search.Indexes; +using Rsdo.Concordancer.Infrastructure.Search.Model; + +namespace Rsdo.Concordancer.Infrastructure.Search.AddRecordsHandlers; + +public class AddConcordanceRecordsHandler : BaseAddRecordsHandler +{ + public AddConcordanceRecordsHandler(IOpenSearchClient client, IIndexProviderFactory indexProviderFactory) + : base(client, indexProviderFactory) + { + } + + protected override EsConcordance ConvertEntity(Concordance entity) + { + return new EsConcordance + { + Id = entity.Token.Id, + TextId = entity.TextId, + Token = ConvertToken(entity.Token), + TokenLeft1 = ConvertToken(entity.TokenLeft1), + TokenLeft2 = ConvertToken(entity.TokenLeft2), + TokenLeft3 = ConvertToken(entity.TokenLeft3), + TokenLeft4 = ConvertToken(entity.TokenLeft4), + TokenLeft5 = ConvertToken(entity.TokenLeft5), + TokenLeft6 = ConvertToken(entity.TokenLeft6), + TokenLeft7 = ConvertToken(entity.TokenLeft7), + TokenLeft8 = ConvertToken(entity.TokenLeft8), + TokenLeft9 = ConvertToken(entity.TokenLeft9), + TokenLeft10 = ConvertToken(entity.TokenLeft10), + TokenRight1 = ConvertToken(entity.TokenRight1), + TokenRight2 = ConvertToken(entity.TokenRight2), + TokenRight3 = ConvertToken(entity.TokenRight3), + TokenRight4 = ConvertToken(entity.TokenRight4), + TokenRight5 = ConvertToken(entity.TokenRight5), + TokenRight6 = ConvertToken(entity.TokenRight6), + TokenRight7 = ConvertToken(entity.TokenRight7), + TokenRight8 = ConvertToken(entity.TokenRight8), + TokenRight9 = ConvertToken(entity.TokenRight9), + TokenRight10 = ConvertToken(entity.TokenRight10), + }; + } + + private static EsToken ConvertToken(Rsdo.Concordancer.Core.Entities.Token token) + { + if (token == null) + { + return null; + } + + return new EsToken + { + Form = token.Form, + FormLower = token.Form?.ToLower(), + Lemma = token.Lemma, + LemmaLower = token.Lemma?.ToLower(), + Msd = token.Msd, + }; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/AddRecordsHandlers/AddRecordsHandlerFactory.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/AddRecordsHandlers/AddRecordsHandlerFactory.cs new file mode 100644 index 0000000..00c0cdc --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/AddRecordsHandlers/AddRecordsHandlerFactory.cs @@ -0,0 +1,18 @@ +using Autofac; + +namespace Rsdo.Concordancer.Infrastructure.Search.AddRecordsHandlers; + +public class AddRecordsHandlerFactory : IAddRecordsHandlerFactory +{ + private readonly ILifetimeScope lifetimeScope; + + public AddRecordsHandlerFactory(ILifetimeScope lifetimeScope) + { + this.lifetimeScope = lifetimeScope; + } + + public IAddRecordsHandler GetHandler() + { + return lifetimeScope.Resolve>(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/AddRecordsHandlers/AddTermRecordsHandler.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/AddRecordsHandlers/AddTermRecordsHandler.cs new file mode 100644 index 0000000..041e3e3 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/AddRecordsHandlers/AddTermRecordsHandler.cs @@ -0,0 +1,57 @@ +using System; +using OpenSearch.Client; +using Rsdo.Concordancer.Infrastructure.Search.Indexes; +using Rsdo.Concordancer.Infrastructure.Search.Model; +using Term = Rsdo.Concordancer.Core.Entities.Term; + +namespace Rsdo.Concordancer.Infrastructure.Search.AddRecordsHandlers; + +public class AddTermRecordsHandler : BaseAddRecordsHandler +{ + public AddTermRecordsHandler(IOpenSearchClient client, IIndexProviderFactory indexProviderFactory) + : base(client, indexProviderFactory) + { + } + + protected override EsTerm ConvertEntity(Term entity) + { + // Tokenize form, lemma and msd + var forms = entity.Form.Split(' '); + var lemmas = entity.Lemma.Split(' '); + var msds = entity.Msd.Split(' '); + + return new EsTerm + { + Id = entity.Id, + Frequency = entity.Frequency, + Token = GetToken(0), + TokenRight1 = GetToken(1), + TokenRight2 = GetToken(2), + TokenRight3 = GetToken(3), + TokenRight4 = GetToken(4), + Weight = entity.Weight, + }; + + EsToken GetToken(int index) + { + if (index > forms.Length) + { + return null; + } + + return new EsToken() + { + Form = GetValue(forms, index), + Lemma = GetValue(lemmas, index), + Msd = GetValue(msds, index), + FormLower = GetValue(forms, index)?.ToLower(), + LemmaLower = GetValue(lemmas, index)?.ToLower(), + }; + } + + string GetValue(string[] values, int index) + { + return index < values.Length ? values[index] : null; + } + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/AddRecordsHandlers/BaseAddRecordsHandler.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/AddRecordsHandlers/BaseAddRecordsHandler.cs new file mode 100644 index 0000000..4b3dc4c --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/AddRecordsHandlers/BaseAddRecordsHandler.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using OpenSearch.Client; +using Rsdo.Concordancer.Infrastructure.Search.Extensions; +using Rsdo.Concordancer.Infrastructure.Search.Indexes; + +namespace Rsdo.Concordancer.Infrastructure.Search.AddRecordsHandlers; + +public abstract class BaseAddRecordsHandler : IAddRecordsHandler + where TElasticEntity : class +{ + private readonly IOpenSearchClient client; + private readonly IIndexProviderFactory indexProviderFactory; + + protected BaseAddRecordsHandler(IOpenSearchClient client, IIndexProviderFactory indexProviderFactory) + { + this.client = client; + this.indexProviderFactory = indexProviderFactory; + } + + public async Task Add(IEnumerable entities) + { + // Get index provider + var indexProvider = indexProviderFactory.GetProvider(); + + // Get index name + var indexName = indexProvider.IndexName; + + // Create request + var request = new BulkRequest(indexName) + { + Operations = new List(), + Timeout = TimeSpan.FromMinutes(5), + }; + + // Convert entities to elastic entities + foreach (var entity in entities) + { + var elasticEntity = ConvertEntity(entity); + request.Operations.Add(new BulkIndexOperation(elasticEntity)); + } + + // Get response + var response = await client.BulkAsync(request); + response.ThrowIfInvalid(); + } + + protected abstract TElasticEntity ConvertEntity(TEntity entity); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/AddRecordsHandlers/IAddRecordsHandler.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/AddRecordsHandlers/IAddRecordsHandler.cs new file mode 100644 index 0000000..cfe1b66 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/AddRecordsHandlers/IAddRecordsHandler.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Rsdo.Concordancer.Infrastructure.Search.AddRecordsHandlers; + +public interface IAddRecordsHandler +{ + Task Add(IEnumerable entities); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/AddRecordsHandlers/IAddRecordsHandlerFactory.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/AddRecordsHandlers/IAddRecordsHandlerFactory.cs new file mode 100644 index 0000000..b45a187 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/AddRecordsHandlers/IAddRecordsHandlerFactory.cs @@ -0,0 +1,6 @@ +namespace Rsdo.Concordancer.Infrastructure.Search.AddRecordsHandlers; + +public interface IAddRecordsHandlerFactory +{ + IAddRecordsHandler GetHandler(); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/Aggregations/AggregatorFactory.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/Aggregations/AggregatorFactory.cs new file mode 100644 index 0000000..34b4179 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/Aggregations/AggregatorFactory.cs @@ -0,0 +1,20 @@ +using Autofac.Features.Indexed; +using Rsdo.Concordancer.Core.Search.Aggregations; +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.Infrastructure.Search.Aggregations; + +public class AggregatorFactory : IAggregatorFactory +{ + private readonly IIndex aggregators; + + public AggregatorFactory(IIndex aggregators) + { + this.aggregators = aggregators; + } + + public IAggregator GetAggregator(AggregationType aggregationType) + { + return aggregators[aggregationType]; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/Aggregations/BaseAggregator.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/Aggregations/BaseAggregator.cs new file mode 100644 index 0000000..7a709e6 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/Aggregations/BaseAggregator.cs @@ -0,0 +1,73 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using OpenSearch.Client; +using Rsdo.Concordancer.Core.Search.Aggregations; +using Rsdo.Concordancer.Core.Search.Queries; +using Rsdo.Concordancer.Infrastructure.Search.Extensions; +using Rsdo.Concordancer.Infrastructure.Search.Indexes; +using Rsdo.Concordancer.Infrastructure.Search.Model; +using Rsdo.Concordancer.Infrastructure.Search.QueryBuilders; + +namespace Rsdo.Concordancer.Infrastructure.Search.Aggregations; + +public abstract class BaseAggregator : IAggregator +{ + private readonly IOpenSearchClient client; + private readonly IIndexProviderFactory indexProviderFactory; + private readonly IQueryBuilderFactory queryBuilderFactory; + + protected BaseAggregator(IOpenSearchClient client, IIndexProviderFactory indexProviderFactory, IQueryBuilderFactory queryBuilderFactory) + { + this.client = client; + this.indexProviderFactory = indexProviderFactory; + this.queryBuilderFactory = queryBuilderFactory; + } + + protected abstract string FieldName { get; } + + public async Task> Get(TQuery query) + where TQuery : Query + { + // Get elastic query + var queryBuilder = queryBuilderFactory.GetBuilder(); + var elasticQuery = queryBuilder.Build(query); + + // Get and execute search request + var searchRequest = GetSearchRequest(elasticQuery); + var response = await client.SearchAsync(searchRequest); + response.ThrowIfInvalid(); + + // Read response + return ReadAggregations(response); + } + + private static IDictionary ReadAggregations(ISearchResponse response) + { + var terms = response.Aggregations.Terms("agg"); + return terms?.Buckets?.ToDictionary(x => x.Key, x => x.DocCount ?? 0); + } + + private SearchRequest GetSearchRequest(QueryContainer query) + { + var indexProvider = indexProviderFactory.GetProvider(); + var indexName = indexProvider.IndexName; + + return new SearchRequest(indexName) + { + From = 0, + Size = 0, + Query = query, + Aggregations = new AggregationDictionary() + { + { + "agg", new TermsAggregation("terms") + { + Field = FieldName, + Size = 100, + } + }, + }, + }; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/Aggregations/TextAggregator.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/Aggregations/TextAggregator.cs new file mode 100644 index 0000000..b071b06 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/Aggregations/TextAggregator.cs @@ -0,0 +1,15 @@ +using OpenSearch.Client; +using Rsdo.Concordancer.Infrastructure.Search.Indexes; +using Rsdo.Concordancer.Infrastructure.Search.QueryBuilders; + +namespace Rsdo.Concordancer.Infrastructure.Search.Aggregations; + +public class TextAggregator : BaseAggregator +{ + public TextAggregator(IOpenSearchClient client, IIndexProviderFactory indexProviderFactory, IQueryBuilderFactory queryBuilderFactory) + : base(client, indexProviderFactory, queryBuilderFactory) + { + } + + protected override string FieldName => "textId"; +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/Client/ElasticClientFactory.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/Client/ElasticClientFactory.cs new file mode 100644 index 0000000..a1c7e04 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/Client/ElasticClientFactory.cs @@ -0,0 +1,26 @@ +using System; +using Microsoft.Extensions.Configuration; +using OpenSearch.Client; +using Rsdo.Concordancer.Core.Constants; + +namespace Rsdo.Concordancer.Infrastructure.Search.Client; + +public class ElasticClientFactory : IElasticClientFactory +{ + private readonly IConfiguration configuration; + + public ElasticClientFactory(IConfiguration configuration) + { + this.configuration = configuration; + } + + public IOpenSearchClient Get() + { + var connectionString = configuration[ConfigurationKey.Search.ElasticConnectionString]; + var connectionSettings = new ConnectionSettings(new Uri(connectionString)).SniffOnStartup(false).RequestTimeout(TimeSpan.FromSeconds(30)); +#if DEBUG + connectionSettings.EnableDebugMode().IncludeServerStackTraceOnError(false); +#endif + return new OpenSearchClient(connectionSettings); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/Client/IElasticClientFactory.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/Client/IElasticClientFactory.cs new file mode 100644 index 0000000..099e039 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/Client/IElasticClientFactory.cs @@ -0,0 +1,8 @@ +using OpenSearch.Client; + +namespace Rsdo.Concordancer.Infrastructure.Search.Client; + +public interface IElasticClientFactory +{ + IOpenSearchClient Get(); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/DeleteRecordsHandlers/BaseDeleteRecordsHandler.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/DeleteRecordsHandlers/BaseDeleteRecordsHandler.cs new file mode 100644 index 0000000..27b58c0 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/DeleteRecordsHandlers/BaseDeleteRecordsHandler.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using OpenSearch.Client; +using Rsdo.Concordancer.Infrastructure.Search.Extensions; +using Rsdo.Concordancer.Infrastructure.Search.Indexes; + +namespace Rsdo.Concordancer.Infrastructure.Search.DeleteRecordsHandlers; + +public abstract class BaseDeleteRecordsHandler : IDeleteRecordsHandler + where TElasticEntity : class +{ + private readonly IOpenSearchClient client; + private readonly IIndexProviderFactory indexProviderFactory; + + protected BaseDeleteRecordsHandler(IOpenSearchClient client, IIndexProviderFactory indexProviderFactory) + { + this.client = client; + this.indexProviderFactory = indexProviderFactory; + } + + public async Task Delete(IEnumerable entityIds) + { + // Get index provider + var indexProvider = indexProviderFactory.GetProvider(); + + // Get index name + var indexName = indexProvider.IndexName; + + // Create request + var request = new BulkRequest(indexName) + { + Operations = new List(), + Timeout = TimeSpan.FromMinutes(5), + }; + + // Convert entities to elastic entities + foreach (var entityId in entityIds) + { + request.Operations.Add(new BulkDeleteDescriptor().Id(entityId)); + } + + // Get response + var response = await client.BulkAsync(request); + response.ThrowIfInvalid(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/DeleteRecordsHandlers/DeleteConcordanceRecordsHandler.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/DeleteRecordsHandlers/DeleteConcordanceRecordsHandler.cs new file mode 100644 index 0000000..792e694 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/DeleteRecordsHandlers/DeleteConcordanceRecordsHandler.cs @@ -0,0 +1,14 @@ +using OpenSearch.Client; +using Rsdo.Concordancer.Core.Model; +using Rsdo.Concordancer.Infrastructure.Search.Indexes; +using Rsdo.Concordancer.Infrastructure.Search.Model; + +namespace Rsdo.Concordancer.Infrastructure.Search.DeleteRecordsHandlers; + +public class DeleteConcordanceRecordsHandler : BaseDeleteRecordsHandler +{ + public DeleteConcordanceRecordsHandler(IOpenSearchClient client, IIndexProviderFactory indexProviderFactory) + : base(client, indexProviderFactory) + { + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/DeleteRecordsHandlers/DeleteRecordsHandlerFactory.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/DeleteRecordsHandlers/DeleteRecordsHandlerFactory.cs new file mode 100644 index 0000000..cee005e --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/DeleteRecordsHandlers/DeleteRecordsHandlerFactory.cs @@ -0,0 +1,18 @@ +using Autofac; + +namespace Rsdo.Concordancer.Infrastructure.Search.DeleteRecordsHandlers; + +public class DeleteRecordsHandlerFactory : IDeleteRecordsHandlerFactory +{ + private readonly ILifetimeScope lifetimeScope; + + public DeleteRecordsHandlerFactory(ILifetimeScope lifetimeScope) + { + this.lifetimeScope = lifetimeScope; + } + + public IDeleteRecordsHandler GetHandler() + { + return lifetimeScope.Resolve>(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/DeleteRecordsHandlers/DeleteTermRecordsHandler.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/DeleteRecordsHandlers/DeleteTermRecordsHandler.cs new file mode 100644 index 0000000..25391d5 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/DeleteRecordsHandlers/DeleteTermRecordsHandler.cs @@ -0,0 +1,14 @@ +using OpenSearch.Client; +using Rsdo.Concordancer.Infrastructure.Search.Indexes; +using Rsdo.Concordancer.Infrastructure.Search.Model; +using Term = Rsdo.Concordancer.Core.Entities.Term; + +namespace Rsdo.Concordancer.Infrastructure.Search.DeleteRecordsHandlers; + +public class DeleteTermRecordsHandler : BaseDeleteRecordsHandler +{ + public DeleteTermRecordsHandler(IOpenSearchClient client, IIndexProviderFactory indexProviderFactory) + : base(client, indexProviderFactory) + { + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/DeleteRecordsHandlers/IDeleteRecordsHandler.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/DeleteRecordsHandlers/IDeleteRecordsHandler.cs new file mode 100644 index 0000000..11a9e85 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/DeleteRecordsHandlers/IDeleteRecordsHandler.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Rsdo.Concordancer.Infrastructure.Search.DeleteRecordsHandlers; + +public interface IDeleteRecordsHandler +{ + Task Delete(IEnumerable entityIds); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/DeleteRecordsHandlers/IDeleteRecordsHandlerFactory.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/DeleteRecordsHandlers/IDeleteRecordsHandlerFactory.cs new file mode 100644 index 0000000..d67722d --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/DeleteRecordsHandlers/IDeleteRecordsHandlerFactory.cs @@ -0,0 +1,6 @@ +namespace Rsdo.Concordancer.Infrastructure.Search.DeleteRecordsHandlers; + +public interface IDeleteRecordsHandlerFactory +{ + IDeleteRecordsHandler GetHandler(); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/ElasticSearchEngine.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/ElasticSearchEngine.cs new file mode 100644 index 0000000..7799396 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/ElasticSearchEngine.cs @@ -0,0 +1,136 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using OpenSearch.Client; +using Rsdo.Concordancer.Core.Model; +using Rsdo.Concordancer.Core.Search; +using Rsdo.Concordancer.Core.Search.Queries; +using Rsdo.Concordancer.Infrastructure.Search.AddRecordsHandlers; +using Rsdo.Concordancer.Infrastructure.Search.DeleteRecordsHandlers; +using Rsdo.Concordancer.Infrastructure.Search.Extensions; +using Rsdo.Concordancer.Infrastructure.Search.Indexes; +using Rsdo.Concordancer.Infrastructure.Search.Model; +using Rsdo.Concordancer.Infrastructure.Search.QueryBuilders; +using Term = Rsdo.Concordancer.Core.Entities.Term; + +namespace Rsdo.Concordancer.Infrastructure.Search; + +public class ElasticSearchEngine : ISearchEngine +{ + private readonly IAddRecordsHandlerFactory addRecordsHandlerFactory; + private readonly IOpenSearchClient client; + private readonly IDeleteRecordsHandlerFactory deleteRecordsHandlerFactory; + private readonly IIndexProviderFactory indexProviderFactory; + private readonly IQueryBuilderFactory queryBuilderFactory; + + public ElasticSearchEngine( + IAddRecordsHandlerFactory addRecordsHandlerFactory, + IOpenSearchClient client, + IDeleteRecordsHandlerFactory deleteRecordsHandlerFactory, + IIndexProviderFactory indexProviderFactory, + IQueryBuilderFactory queryBuilderFactory) + { + this.addRecordsHandlerFactory = addRecordsHandlerFactory; + this.client = client; + this.deleteRecordsHandlerFactory = deleteRecordsHandlerFactory; + this.indexProviderFactory = indexProviderFactory; + this.queryBuilderFactory = queryBuilderFactory; + } + + public Task Add(IEnumerable entities) + { + var handler = addRecordsHandlerFactory.GetHandler(); + return handler.Add(entities); + } + + public async Task Commit() + { + foreach (var provider in indexProviderFactory.GetAllProviders()) + { + await provider.Refresh(); + } + } + + public async Task CreateSchema() + { + foreach (var provider in indexProviderFactory.GetAllProviders()) + { + await provider.Create(); + } + } + + public Task Delete(IEnumerable entityIds) + { + var handler = deleteRecordsHandlerFactory.GetHandler(); + return handler.Delete(entityIds); + } + + public async Task DeleteSchema() + { + foreach (var provider in indexProviderFactory.GetAllProviders()) + { + if (await provider.Exists()) + { + await provider.Delete(); + } + } + } + + public async Task Search(TQuery query) + where TEntity : class + where TQuery : Query + { + // Get search request + var searchRequest = GetSearchRequest(query); + + // Execute search + var searchResponse = await client.SearchAsync(searchRequest); + searchResponse.ThrowIfInvalid(); + + // Return result + return new QueryResult() + { + EntityIds = searchResponse.Hits?.Select(h => h.Id).ToList(), + Total = searchResponse.Total, + }; + } + + private IIndexProvider GetIndexProvider() + { + // ToDo: this should be done with some kind of mapper + if (typeof(TEntity) == typeof(Concordance)) + { + return indexProviderFactory.GetProvider(); + } + + if (typeof(TEntity) == typeof(Term)) + { + return indexProviderFactory.GetProvider(); + } + + throw new ArgumentOutOfRangeException($"Entity type {typeof(TEntity)} is not supported as a search type in Elastic!"); + } + + private SearchRequest GetSearchRequest(TQuery query) + where TQuery : Query + { + // Get query builder + var queryBuilder = queryBuilderFactory.GetBuilder(); + + // Build elastic query + var elasticQuery = queryBuilder.Build(query); + + // Get index provider + var indexProvider = GetIndexProvider(); + + // Return search request + return new SearchRequest(indexProvider.IndexName) + { + From = query.From, + Size = query.Size, + TrackTotalHits = true, + Query = elasticQuery, + }; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/Extensions/ElasticResponseExtensions.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/Extensions/ElasticResponseExtensions.cs new file mode 100644 index 0000000..bb14c82 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/Extensions/ElasticResponseExtensions.cs @@ -0,0 +1,15 @@ +using System; +using OpenSearch.Client; + +namespace Rsdo.Concordancer.Infrastructure.Search.Extensions; + +public static class ElasticResponseExtensions +{ + public static void ThrowIfInvalid(this IResponse response) + { + if (!response.IsValid) + { + throw new Exception($"Invalid Elastic response: {response.DebugInformation}!"); + } + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/Indexes/BaseIndexProvider.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/Indexes/BaseIndexProvider.cs new file mode 100644 index 0000000..dd70b39 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/Indexes/BaseIndexProvider.cs @@ -0,0 +1,44 @@ +using System.Threading.Tasks; +using OpenSearch.Client; +using Rsdo.Concordancer.Core.Framework; +using Rsdo.Concordancer.Infrastructure.Search.Extensions; + +namespace Rsdo.Concordancer.Infrastructure.Search.Indexes; + +public abstract class BaseIndexProvider : IIndexProvider + where TModel : class +{ + private readonly IOpenSearchClient client; + + protected BaseIndexProvider(IOpenSearchClient client) + { + this.client = client; + } + + public string IndexName => $"rsdo_{typeof(TModel).Name.ToLower()}_{CurrentContext.Current.CorpusId:N}"; + + public async Task Create() + { + var response = await client.Indices.CreateAsync( + IndexName, + c => c.Settings(s => s.NumberOfShards(3).NumberOfReplicas(0)).Map(ms => ms.AutoMap().SourceField(sf => sf.Enabled(false)))); + response.ThrowIfInvalid(); + } + + public async Task Delete() + { + var response = await client.Indices.DeleteAsync(IndexName); + response.ThrowIfInvalid(); + } + + public async Task Exists() + { + return (await client.Indices.ExistsAsync(IndexName)).Exists; + } + + public async Task Refresh() + { + var response = await client.Indices.RefreshAsync(IndexName); + response.ThrowIfInvalid(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/Indexes/ConcordanceIndexProvider.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/Indexes/ConcordanceIndexProvider.cs new file mode 100644 index 0000000..76e34bb --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/Indexes/ConcordanceIndexProvider.cs @@ -0,0 +1,12 @@ +using OpenSearch.Client; +using Rsdo.Concordancer.Infrastructure.Search.Model; + +namespace Rsdo.Concordancer.Infrastructure.Search.Indexes; + +public class ConcordanceIndexProvider : BaseIndexProvider +{ + public ConcordanceIndexProvider(IOpenSearchClient client) + : base(client) + { + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/Indexes/IIndexProvider.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/Indexes/IIndexProvider.cs new file mode 100644 index 0000000..4d27278 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/Indexes/IIndexProvider.cs @@ -0,0 +1,20 @@ +using System.Threading.Tasks; + +namespace Rsdo.Concordancer.Infrastructure.Search.Indexes; + +public interface IIndexProvider : IIndexProvider +{ +} + +public interface IIndexProvider +{ + string IndexName { get; } + + Task Create(); + + Task Delete(); + + Task Exists(); + + Task Refresh(); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/Indexes/IIndexProviderFactory.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/Indexes/IIndexProviderFactory.cs new file mode 100644 index 0000000..6921e26 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/Indexes/IIndexProviderFactory.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; + +namespace Rsdo.Concordancer.Infrastructure.Search.Indexes; + +public interface IIndexProviderFactory +{ + IEnumerable GetAllProviders(); + + IIndexProvider GetProvider(); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/Indexes/IndexProviderFactory.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/Indexes/IndexProviderFactory.cs new file mode 100644 index 0000000..b7a6db7 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/Indexes/IndexProviderFactory.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; +using Autofac; + +namespace Rsdo.Concordancer.Infrastructure.Search.Indexes; + +public class IndexProviderFactory : IIndexProviderFactory +{ + private readonly ILifetimeScope lifetimeScope; + + public IndexProviderFactory(ILifetimeScope lifetimeScope) + { + this.lifetimeScope = lifetimeScope; + } + + public IEnumerable GetAllProviders() + { + return lifetimeScope.Resolve>(); + } + + public IIndexProvider GetProvider() + { + return lifetimeScope.Resolve>(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/Indexes/TermIndexProvider.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/Indexes/TermIndexProvider.cs new file mode 100644 index 0000000..de86088 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/Indexes/TermIndexProvider.cs @@ -0,0 +1,12 @@ +using OpenSearch.Client; +using Rsdo.Concordancer.Infrastructure.Search.Model; + +namespace Rsdo.Concordancer.Infrastructure.Search.Indexes; + +public class TermIndexProvider : BaseIndexProvider +{ + public TermIndexProvider(IOpenSearchClient client) + : base(client) + { + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/Model/EsConcordance.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/Model/EsConcordance.cs new file mode 100644 index 0000000..ad75d55 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/Model/EsConcordance.cs @@ -0,0 +1,54 @@ +using System; +using OpenSearch.Client; + +namespace Rsdo.Concordancer.Infrastructure.Search.Model; + +public class EsConcordance +{ + public Guid Id { get; set; } + + [Keyword] + public Guid TextId { get; set; } + + public EsToken Token { get; set; } + + public EsToken TokenLeft1 { get; set; } + + public EsToken TokenLeft2 { get; set; } + + public EsToken TokenLeft3 { get; set; } + + public EsToken TokenLeft4 { get; set; } + + public EsToken TokenLeft5 { get; set; } + + public EsToken TokenLeft6 { get; set; } + + public EsToken TokenLeft7 { get; set; } + + public EsToken TokenLeft8 { get; set; } + + public EsToken TokenLeft9 { get; set; } + + public EsToken TokenLeft10 { get; set; } + + public EsToken TokenRight1 { get; set; } + + public EsToken TokenRight2 { get; set; } + + public EsToken TokenRight3 { get; set; } + + public EsToken TokenRight4 { get; set; } + + public EsToken TokenRight5 { get; set; } + + public EsToken TokenRight6 { get; set; } + + public EsToken TokenRight7 { get; set; } + + public EsToken TokenRight8 { get; set; } + + public EsToken TokenRight9 { get; set; } + + public EsToken TokenRight10 { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/Model/EsTerm.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/Model/EsTerm.cs new file mode 100644 index 0000000..b680e9d --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/Model/EsTerm.cs @@ -0,0 +1,22 @@ +using System; + +namespace Rsdo.Concordancer.Infrastructure.Search.Model; + +public class EsTerm +{ + public Guid Id { get; set; } + + public int Frequency { get; set; } + + public EsToken Token { get; set; } + + public EsToken TokenRight1 { get; set; } + + public EsToken TokenRight2 { get; set; } + + public EsToken TokenRight3 { get; set; } + + public EsToken TokenRight4 { get; set; } + + public decimal Weight { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/Model/EsToken.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/Model/EsToken.cs new file mode 100644 index 0000000..2396bbc --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/Model/EsToken.cs @@ -0,0 +1,21 @@ +using OpenSearch.Client; + +namespace Rsdo.Concordancer.Infrastructure.Search.Model; + +public class EsToken +{ + [Keyword] + public string Form { get; set; } + + [Keyword] + public string FormLower { get; set; } + + [Keyword] + public string Lemma { get; set; } + + [Keyword] + public string LemmaLower { get; set; } + + [Keyword] + public string Msd { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/QueryBuilders/ConcordancesQueryBuilder.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/QueryBuilders/ConcordancesQueryBuilder.cs new file mode 100644 index 0000000..a984bf7 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/QueryBuilders/ConcordancesQueryBuilder.cs @@ -0,0 +1,135 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using OpenSearch.Client; +using Rsdo.Concordancer.Core.Extensions; +using Rsdo.Concordancer.Core.Search.Queries.Concordances; +using Rsdo.Concordancer.Infrastructure.Extensions; + +namespace Rsdo.Concordancer.Infrastructure.Search.QueryBuilders; + +public class ConcordancesQueryBuilder : IQueryBuilder +{ + public QueryContainer Build(ConcordancesQuery query) + { + // Get filter queries + var queries = GetFilterQueries(query); + + // Main word query + queries.Add(GetMainWordEsQuery(query.MainWord)); + + // Words in context queries + if (!query.WordsInContext.IsNullOrEmpty()) + { + queries.AddRange(query.WordsInContext.Select(GetWordInContextEsQuery)); + } + + // Merge queries + var mergedQuery = queries.ToBooleanAndQuery(); + + // Check if we should return random rows (used in export) + if (query.ReturnRandomRows) + { + mergedQuery = new FunctionScoreQuery() + { + Query = mergedQuery, + Functions = new List() + { + new RandomScoreFunction() + { + Seed = DateTime.Now.Ticks, + }, + }, + }; + } + + return mergedQuery; + } + + private static List GetFilterQueries(ConcordancesQuery query) + { + var queries = new List(); + + if (!query.TextIds.IsNullOrEmpty()) + { + queries.Add( + new TermsQuery() + { + Field = "textId", + Terms = query.TextIds.Cast(), + }); + } + + return queries; + } + + private static QueryContainer GetMainWordEsQuery(SearchedMainWordQuery mainWordQuery) + { + return GetWordEsQuery(mainWordQuery, GetTokenField(0)); + } + + private static QueryContainer GetWordEsQuery(SearchedWordQuery wordQuery, string tokenField) + { + var queries = new List(); + + if (!string.IsNullOrEmpty(wordQuery.Form)) + { + queries.Add( + new TermQuery() + { + Field = $"{tokenField}.formLower", + Value = wordQuery.Form.ToLower(), + }); + } + + if (!wordQuery.Lemmas.IsNullOrEmpty()) + { + queries.Add( + new TermsQuery() + { + Field = $"{tokenField}.lemma", + Terms = wordQuery.Lemmas, + }); + } + + if (queries.Count == 0) + { + return new MatchNoneQuery(); + } + + if (!wordQuery.Msds.IsNullOrEmpty()) + { + queries.Add( + new TermsQuery() + { + Field = $"{tokenField}.msd", + Terms = wordQuery.Msds, + }); + } + + return queries.ToBooleanAndQuery(); + } + + private static QueryContainer GetWordInContextEsQuery(SearchedWordInContextQuery searchedWord) + { + var queries = new List(); + foreach (var position in searchedWord.Positions) + { + var positionQuery = GetWordEsQuery(searchedWord, GetTokenField(position)); + queries.Add(positionQuery); + } + + var query = queries.ToBooleanOrQuery(); + return searchedWord.ConditionType == ServiceModel.Types.ConditionType.Is ? query : !query; + } + + private static string GetTokenField(int position) + { + return position switch + { + < 0 => $"tokenLeft{-position}", + > 0 => $"tokenRight{position}", + _ => "token", + }; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/QueryBuilders/IQueryBuilder.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/QueryBuilders/IQueryBuilder.cs new file mode 100644 index 0000000..1bdddb4 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/QueryBuilders/IQueryBuilder.cs @@ -0,0 +1,10 @@ +using OpenSearch.Client; +using Rsdo.Concordancer.Core.Search.Queries; + +namespace Rsdo.Concordancer.Infrastructure.Search.QueryBuilders; + +public interface IQueryBuilder + where TQuery : Query +{ + QueryContainer Build(TQuery query); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/QueryBuilders/IQueryBuilderFactory.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/QueryBuilders/IQueryBuilderFactory.cs new file mode 100644 index 0000000..88261f1 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/QueryBuilders/IQueryBuilderFactory.cs @@ -0,0 +1,9 @@ +using Rsdo.Concordancer.Core.Search.Queries; + +namespace Rsdo.Concordancer.Infrastructure.Search.QueryBuilders; + +public interface IQueryBuilderFactory +{ + IQueryBuilder GetBuilder() + where TQuery : Query; +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/QueryBuilders/QueryBuilderFactory.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/QueryBuilders/QueryBuilderFactory.cs new file mode 100644 index 0000000..76355c9 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/QueryBuilders/QueryBuilderFactory.cs @@ -0,0 +1,20 @@ +using Autofac; +using Rsdo.Concordancer.Core.Search.Queries; + +namespace Rsdo.Concordancer.Infrastructure.Search.QueryBuilders; + +public class QueryBuilderFactory : IQueryBuilderFactory +{ + private readonly ILifetimeScope lifetimeScope; + + public QueryBuilderFactory(ILifetimeScope lifetimeScope) + { + this.lifetimeScope = lifetimeScope; + } + + public IQueryBuilder GetBuilder() + where TQuery : Query + { + return lifetimeScope.Resolve>(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Infrastructure/Search/QueryBuilders/TermListQueryBuilder.cs b/src/core/Rsdo.Concordancer.Infrastructure/Search/QueryBuilders/TermListQueryBuilder.cs new file mode 100644 index 0000000..806cbda --- /dev/null +++ b/src/core/Rsdo.Concordancer.Infrastructure/Search/QueryBuilders/TermListQueryBuilder.cs @@ -0,0 +1,67 @@ +using System.Collections.Generic; +using OpenSearch.Client; +using Rsdo.Concordancer.Core.Extensions; +using Rsdo.Concordancer.Core.Search.Queries.TermLists; +using Rsdo.Concordancer.Infrastructure.Extensions; + +namespace Rsdo.Concordancer.Infrastructure.Search.QueryBuilders; + +public class TermListQueryBuilder : IQueryBuilder +{ + public QueryContainer Build(TermListQuery query) + { + var queries = new List(); + + // Search for words in all possible positions + for (var i = 0; i <= 5 - query.Words.Count; i++) + { + var termQuery = new List(); + for (var j = 0; j < query.Words.Count; j++) + { + var word = query.Words[j]; + var tokenField = GetTokenField(i + j); + termQuery.Add(GetWordEsQuery(word, tokenField)); + } + + queries.Add(termQuery.ToBooleanAndQuery()); + } + + return queries.ToBooleanOrQuery(); + } + + private static QueryContainer GetWordEsQuery(SearchedTermQuery wordQuery, string tokenField) + { + var queries = new List(); + + if (!string.IsNullOrEmpty(wordQuery.Form)) + { + queries.Add( + new TermQuery() + { + Field = $"{tokenField}.formLower", + Value = wordQuery.Form.ToLower(), + }); + } + + if (!wordQuery.Lemmas.IsNullOrEmpty()) + { + queries.Add( + new TermsQuery() + { + Field = $"{tokenField}.lemma", + Terms = wordQuery.Lemmas, + }); + } + + return queries.Count == 0 ? new MatchNoneQuery() : queries.ToBooleanAndQuery(); + } + + private static string GetTokenField(int position) + { + return position switch + { + > 0 => $"tokenRight{position}", + _ => "token", + }; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Interfaces/IHaveCorpusId.cs b/src/core/Rsdo.Concordancer.ServiceModel/Interfaces/IHaveCorpusId.cs new file mode 100644 index 0000000..c713225 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Interfaces/IHaveCorpusId.cs @@ -0,0 +1,8 @@ +using System; + +namespace Rsdo.Concordancer.ServiceModel.Interfaces; + +public interface IHaveCorpusId +{ + public Guid CorpusId { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Interfaces/IPagedResponse.cs b/src/core/Rsdo.Concordancer.ServiceModel/Interfaces/IPagedResponse.cs new file mode 100644 index 0000000..5983c9c --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Interfaces/IPagedResponse.cs @@ -0,0 +1,8 @@ +namespace Rsdo.Concordancer.ServiceModel.Interfaces; + +public interface IPagedResponse +{ + int Offset { get; } + + long Total { get; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Interfaces/IPagedSearch.cs b/src/core/Rsdo.Concordancer.ServiceModel/Interfaces/IPagedSearch.cs new file mode 100644 index 0000000..4e2e482 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Interfaces/IPagedSearch.cs @@ -0,0 +1,8 @@ +namespace Rsdo.Concordancer.ServiceModel.Interfaces; + +public interface IPagedSearch +{ + int From { get; } + + int Size { get; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Interfaces/IRequest.cs b/src/core/Rsdo.Concordancer.ServiceModel/Interfaces/IRequest.cs new file mode 100644 index 0000000..386d465 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Interfaces/IRequest.cs @@ -0,0 +1,9 @@ +namespace Rsdo.Concordancer.ServiceModel.Interfaces; + +public interface IRequest : IRequest +{ +} + +public interface IRequest +{ +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/BaseSearchConcordances.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/BaseSearchConcordances.cs new file mode 100644 index 0000000..881b343 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/BaseSearchConcordances.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using Rsdo.Concordancer.ServiceModel.Requests.Shared; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Concordances; + +public abstract class BaseSearchConcordances : Search +{ + public SearchedMainWord MainWord { get; set; } + + public List TextIds { get; set; } + + public List WordsInContext { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/ConcordanceDetails.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/ConcordanceDetails.cs new file mode 100644 index 0000000..a1d2ff9 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/ConcordanceDetails.cs @@ -0,0 +1,10 @@ +using System; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Concordances; + +public class ConcordanceDetails : BaseSearchConcordances +{ + public Guid ParagraphId { get; set; } + + public int TokenOrder { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/ConcordanceDetailsResponse.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/ConcordanceDetailsResponse.cs new file mode 100644 index 0000000..aaa5a93 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/ConcordanceDetailsResponse.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; +using Rsdo.Concordancer.ServiceModel.Shared; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Concordances; + +public class ConcordanceDetailsResponse +{ + public string Author { get; set; } + + public string SourceFile { get; set; } + + public string Title { get; set; } + + public List Tokens { get; set; } + + public short? Year { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/ExportConcordances.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/ExportConcordances.cs new file mode 100644 index 0000000..fc0b204 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/ExportConcordances.cs @@ -0,0 +1,10 @@ +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Concordances; + +public class ExportConcordances : BaseSearchConcordances +{ + public int Rows { get; set; } + + public ConcordanceExportType Type { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/ExportConcordancesResponse.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/ExportConcordancesResponse.cs new file mode 100644 index 0000000..e1cb0a5 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/ExportConcordancesResponse.cs @@ -0,0 +1,7 @@ +using Rsdo.Concordancer.ServiceModel.Requests.Shared; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Concordances; + +public class ExportConcordancesResponse : Export +{ +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/SearchConcordances.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/SearchConcordances.cs new file mode 100644 index 0000000..ccebc19 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/SearchConcordances.cs @@ -0,0 +1,10 @@ +using Rsdo.Concordancer.ServiceModel.Interfaces; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Concordances; + +public class SearchConcordances : BaseSearchConcordances, IPagedSearch +{ + public int From { get; set; } = 0; + + public int Size { get; set; } = 20; +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/SearchConcordancesResponse.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/SearchConcordancesResponse.cs new file mode 100644 index 0000000..1250c48 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/SearchConcordancesResponse.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using Rsdo.Concordancer.ServiceModel.Interfaces; +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Concordances; + +public class SearchConcordancesResponse : IPagedResponse +{ + public List Aggregations { get; set; } + + public List Items { get; set; } + + public AlternateSearch LemmasAlternateSearch { get; set; } + + public int Offset { get; set; } + + public long Total { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/SearchConcordancesResponseItem.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/SearchConcordancesResponseItem.cs new file mode 100644 index 0000000..7742d61 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/SearchConcordancesResponseItem.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using Rsdo.Concordancer.ServiceModel.Shared; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Concordances; + +public class SearchConcordancesResponseItem +{ + public ConcordanceToken CenterContext { get; set; } + + public List LeftContext { get; set; } + + public Guid ParagraphId { get; set; } + + public List RightContext { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/SearchedMainWord.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/SearchedMainWord.cs new file mode 100644 index 0000000..4bb84d3 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/SearchedMainWord.cs @@ -0,0 +1,5 @@ +namespace Rsdo.Concordancer.ServiceModel.Requests.Concordances; + +public class SearchedMainWord : SearchedWord +{ +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/SearchedWord.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/SearchedWord.cs new file mode 100644 index 0000000..110fafd --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/SearchedWord.cs @@ -0,0 +1,12 @@ +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Concordances; + +public abstract class SearchedWord +{ + public string Form { get; set; } + + public FormSearchType FormSearchType { get; set; } + + public string Lemma { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/SearchedWordInContext.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/SearchedWordInContext.cs new file mode 100644 index 0000000..5cf5187 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Concordances/SearchedWordInContext.cs @@ -0,0 +1,14 @@ +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Concordances; + +public class SearchedWordInContext : SearchedWord +{ + public ConditionType ConditionType { get; set; } + + public DistanceType DistanceType { get; set; } + + public int LeftPosition { get; set; } + + public int RightPosition { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/CreateCorpus.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/CreateCorpus.cs new file mode 100644 index 0000000..92d0848 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/CreateCorpus.cs @@ -0,0 +1,20 @@ +using Rsdo.Concordancer.ServiceModel.Interfaces; +using Rsdo.Concordancer.ServiceModel.Shared; +using Swashbuckle.AspNetCore.Annotations; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Corpuses; + +[SwaggerSchema( + "Corpus information", + Required = new[] + { + "title", + })] +public class CreateCorpus : IRequest +{ + [SwaggerSchema("Description")] + public string Description { get; set; } + + [SwaggerSchema("Title")] + public string Title { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/CreateCorpusStore.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/CreateCorpusStore.cs new file mode 100644 index 0000000..112358a --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/CreateCorpusStore.cs @@ -0,0 +1,10 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Interfaces; +using Rsdo.Concordancer.ServiceModel.Shared; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Corpuses; + +public class CreateCorpusStore : IRequest, IHaveCorpusId +{ + public Guid CorpusId { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/DeleteCorpus.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/DeleteCorpus.cs new file mode 100644 index 0000000..614e9c0 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/DeleteCorpus.cs @@ -0,0 +1,10 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Interfaces; +using Rsdo.Concordancer.ServiceModel.Shared; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Corpuses; + +public class DeleteCorpus : IRequest, IHaveCorpusId +{ + public Guid CorpusId { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/DeleteCorpusStore.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/DeleteCorpusStore.cs new file mode 100644 index 0000000..11a0e02 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/DeleteCorpusStore.cs @@ -0,0 +1,10 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Interfaces; +using Rsdo.Concordancer.ServiceModel.Shared; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Corpuses; + +public class DeleteCorpusStore : IRequest, IHaveCorpusId +{ + public Guid CorpusId { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/GetCorpus.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/GetCorpus.cs new file mode 100644 index 0000000..2e921c5 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/GetCorpus.cs @@ -0,0 +1,9 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Interfaces; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Corpuses; + +public class GetCorpus : IHaveCorpusId, IRequest +{ + public Guid CorpusId { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/GetCorpusResponse.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/GetCorpusResponse.cs new file mode 100644 index 0000000..24cd583 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/GetCorpusResponse.cs @@ -0,0 +1,15 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Corpuses; + +public class GetCorpusResponse +{ + public string Description { get; set; } + + public Guid Id { get; set; } + + public CorpusStatus Status { get; set; } + + public string Title { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/GetCorpusStatistics.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/GetCorpusStatistics.cs new file mode 100644 index 0000000..eb76cf8 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/GetCorpusStatistics.cs @@ -0,0 +1,9 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Interfaces; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Corpuses; + +public class GetCorpusStatistics : IHaveCorpusId, IRequest +{ + public Guid CorpusId { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/GetCorpusStatisticsResponse.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/GetCorpusStatisticsResponse.cs new file mode 100644 index 0000000..a32580f --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Corpuses/GetCorpusStatisticsResponse.cs @@ -0,0 +1,10 @@ +namespace Rsdo.Concordancer.ServiceModel.Requests.Corpuses; + +public class GetCorpusStatisticsResponse +{ + public int Texts { get; set; } + + public int Sentences { get; set; } + + public int Words { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Shared/Export.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Shared/Export.cs new file mode 100644 index 0000000..9d35623 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Shared/Export.cs @@ -0,0 +1,12 @@ +using System.IO; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Shared; + +public abstract class Export +{ + public string ContentType { get; set; } + + public string FileName { get; set; } + + public Stream Stream { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Shared/Search.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Shared/Search.cs new file mode 100644 index 0000000..ea0e99b --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Shared/Search.cs @@ -0,0 +1,11 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Interfaces; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Shared; + +public abstract class Search : IHaveCorpusId, IRequest +{ + public Guid CorpusId { get; set; } + + public string Query { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Sloleks/ImportSloleks.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Sloleks/ImportSloleks.cs new file mode 100644 index 0000000..2a2af5c --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Sloleks/ImportSloleks.cs @@ -0,0 +1,9 @@ +using Rsdo.Concordancer.ServiceModel.Interfaces; +using Rsdo.Concordancer.ServiceModel.Shared; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Sloleks; + +public class ImportSloleks : IRequest +{ + public string SourceFile { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/BaseSearchTermList.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/BaseSearchTermList.cs new file mode 100644 index 0000000..5bd27a9 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/BaseSearchTermList.cs @@ -0,0 +1,7 @@ +using Rsdo.Concordancer.ServiceModel.Requests.Shared; + +namespace Rsdo.Concordancer.ServiceModel.Requests.TermLists; + +public abstract class BaseSearchTermList : Search +{ +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/CreateTermList.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/CreateTermList.cs new file mode 100644 index 0000000..e482b63 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/CreateTermList.cs @@ -0,0 +1,22 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Interfaces; +using Rsdo.Concordancer.ServiceModel.Shared; +using Swashbuckle.AspNetCore.Annotations; + +namespace Rsdo.Concordancer.ServiceModel.Requests.TermLists; + +[SwaggerSchema( + "Term list information", + Required = new[] + { + "corpusId", + "sourceFile", + })] +public class CreateTermList : IRequest, IHaveCorpusId +{ + [SwaggerSchema("Corpus id")] + public Guid CorpusId { get; set; } + + [SwaggerSchema("Absolute path to the json file containing term list")] + public string SourceFile { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/DeleteTermList.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/DeleteTermList.cs new file mode 100644 index 0000000..f7d7609 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/DeleteTermList.cs @@ -0,0 +1,12 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Interfaces; +using Rsdo.Concordancer.ServiceModel.Shared; + +namespace Rsdo.Concordancer.ServiceModel.Requests.TermLists; + +public class DeleteTermList : IRequest, IHaveCorpusId +{ + public Guid CorpusId { get; set; } + + public Guid TermListId { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/DeleteTermListFromIndex.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/DeleteTermListFromIndex.cs new file mode 100644 index 0000000..aec9ab5 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/DeleteTermListFromIndex.cs @@ -0,0 +1,12 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Interfaces; +using Rsdo.Concordancer.ServiceModel.Shared; + +namespace Rsdo.Concordancer.ServiceModel.Requests.TermLists; + +public class DeleteTermListFromIndex : IRequest, IHaveCorpusId +{ + public Guid CorpusId { get; set; } + + public Guid TermListId { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/DeleteTermListFromStore.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/DeleteTermListFromStore.cs new file mode 100644 index 0000000..c21f8c3 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/DeleteTermListFromStore.cs @@ -0,0 +1,12 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Interfaces; +using Rsdo.Concordancer.ServiceModel.Shared; + +namespace Rsdo.Concordancer.ServiceModel.Requests.TermLists; + +public class DeleteTermListFromStore : IRequest, IHaveCorpusId +{ + public Guid CorpusId { get; set; } + + public Guid TermListId { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/ExportTermList.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/ExportTermList.cs new file mode 100644 index 0000000..359ccd5 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/ExportTermList.cs @@ -0,0 +1,6 @@ +namespace Rsdo.Concordancer.ServiceModel.Requests.TermLists; + +public class ExportTermList : BaseSearchTermList +{ + public int Rows { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/ExportTermListResponse.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/ExportTermListResponse.cs new file mode 100644 index 0000000..e59aeda --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/ExportTermListResponse.cs @@ -0,0 +1,7 @@ +using Rsdo.Concordancer.ServiceModel.Requests.Shared; + +namespace Rsdo.Concordancer.ServiceModel.Requests.TermLists; + +public class ExportTermListResponse : Export +{ +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/GetTermList.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/GetTermList.cs new file mode 100644 index 0000000..072b10d --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/GetTermList.cs @@ -0,0 +1,11 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Interfaces; + +namespace Rsdo.Concordancer.ServiceModel.Requests.TermLists; + +public class GetTermList : IHaveCorpusId, IRequest +{ + public Guid CorpusId { get; set; } + + public Guid TermListId { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/GetTermListResponse.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/GetTermListResponse.cs new file mode 100644 index 0000000..e7c13d1 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/GetTermListResponse.cs @@ -0,0 +1,13 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.ServiceModel.Requests.TermLists; + +public class GetTermListResponse +{ + public Guid Id { get; set; } + + public string SourceFile { get; set; } + + public ImportStatus Status { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/ImportTermList.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/ImportTermList.cs new file mode 100644 index 0000000..a48b2b1 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/ImportTermList.cs @@ -0,0 +1,12 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Interfaces; +using Rsdo.Concordancer.ServiceModel.Shared; + +namespace Rsdo.Concordancer.ServiceModel.Requests.TermLists; + +public class ImportTermList : IRequest, IHaveCorpusId +{ + public Guid CorpusId { get; set; } + + public Guid TermListId { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/IndexTermList.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/IndexTermList.cs new file mode 100644 index 0000000..63dc19e --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/IndexTermList.cs @@ -0,0 +1,12 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Interfaces; +using Rsdo.Concordancer.ServiceModel.Shared; + +namespace Rsdo.Concordancer.ServiceModel.Requests.TermLists; + +public class IndexTermList : IRequest, IHaveCorpusId +{ + public Guid CorpusId { get; set; } + + public Guid TermListId { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/SearchTermList.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/SearchTermList.cs new file mode 100644 index 0000000..f31e1c3 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/SearchTermList.cs @@ -0,0 +1,10 @@ +using Rsdo.Concordancer.ServiceModel.Interfaces; + +namespace Rsdo.Concordancer.ServiceModel.Requests.TermLists; + +public class SearchTermList : BaseSearchTermList, IPagedSearch +{ + public int From { get; set; } = 0; + + public int Size { get; set; } = 20; +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/SearchTermListResponse.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/SearchTermListResponse.cs new file mode 100644 index 0000000..e8de6f5 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/SearchTermListResponse.cs @@ -0,0 +1,13 @@ +using System.Collections.Generic; +using Rsdo.Concordancer.ServiceModel.Interfaces; + +namespace Rsdo.Concordancer.ServiceModel.Requests.TermLists; + +public class SearchTermListResponse : IPagedResponse +{ + public List Items { get; set; } + + public int Offset { get; set; } + + public long Total { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/SearchTermListResponseItem.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/SearchTermListResponseItem.cs new file mode 100644 index 0000000..3fbda65 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/TermLists/SearchTermListResponseItem.cs @@ -0,0 +1,12 @@ +namespace Rsdo.Concordancer.ServiceModel.Requests.TermLists; + +public class SearchTermListResponseItem +{ + public string Form { get; set; } + + public int Frequency { get; set; } + + public string Lemma { get; set; } + + public decimal Weight { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/CreateText.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/CreateText.cs new file mode 100644 index 0000000..25d8fac --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/CreateText.cs @@ -0,0 +1,31 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Interfaces; +using Rsdo.Concordancer.ServiceModel.Shared; +using Swashbuckle.AspNetCore.Annotations; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Texts; + +[SwaggerSchema( + "Text information", + Required = new[] + { + "corpusId", + "sourceFile", + })] +public class CreateText : IRequest, IHaveCorpusId +{ + [SwaggerSchema("Author")] + public string Author { get; set; } + + [SwaggerSchema("Corpus id")] + public Guid CorpusId { get; set; } + + [SwaggerSchema("Absolute path to the conllu file containing tokenized and marked text")] + public string SourceFile { get; set; } + + [SwaggerSchema("Title")] + public string Title { get; set; } + + [SwaggerSchema("Year")] + public short? Year { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/DeleteText.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/DeleteText.cs new file mode 100644 index 0000000..7938182 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/DeleteText.cs @@ -0,0 +1,12 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Interfaces; +using Rsdo.Concordancer.ServiceModel.Shared; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Texts; + +public class DeleteText : IRequest, IHaveCorpusId +{ + public Guid CorpusId { get; set; } + + public Guid TextId { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/DeleteTextFromIndex.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/DeleteTextFromIndex.cs new file mode 100644 index 0000000..7fd941a --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/DeleteTextFromIndex.cs @@ -0,0 +1,12 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Interfaces; +using Rsdo.Concordancer.ServiceModel.Shared; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Texts; + +public class DeleteTextFromIndex : IRequest, IHaveCorpusId +{ + public Guid CorpusId { get; set; } + + public Guid TextId { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/DeleteTextFromStore.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/DeleteTextFromStore.cs new file mode 100644 index 0000000..a83e652 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/DeleteTextFromStore.cs @@ -0,0 +1,12 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Interfaces; +using Rsdo.Concordancer.ServiceModel.Shared; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Texts; + +public class DeleteTextFromStore : IRequest, IHaveCorpusId +{ + public Guid CorpusId { get; set; } + + public Guid TextId { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/GetText.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/GetText.cs new file mode 100644 index 0000000..7d58353 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/GetText.cs @@ -0,0 +1,11 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Interfaces; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Texts; + +public class GetText : IHaveCorpusId, IRequest +{ + public Guid CorpusId { get; set; } + + public Guid TextId { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/GetTextResponse.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/GetTextResponse.cs new file mode 100644 index 0000000..5467fc2 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/GetTextResponse.cs @@ -0,0 +1,19 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Texts; + +public class GetTextResponse +{ + public string Author { get; set; } + + public Guid Id { get; set; } + + public string SourceFile { get; set; } + + public ImportStatus Status { get; set; } + + public string Title { get; set; } + + public short? Year { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/ImportText.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/ImportText.cs new file mode 100644 index 0000000..b707a4e --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/ImportText.cs @@ -0,0 +1,12 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Interfaces; +using Rsdo.Concordancer.ServiceModel.Shared; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Texts; + +public class ImportText : IRequest, IHaveCorpusId +{ + public Guid CorpusId { get; set; } + + public Guid TextId { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/IndexText.cs b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/IndexText.cs new file mode 100644 index 0000000..2e3140f --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Requests/Texts/IndexText.cs @@ -0,0 +1,12 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Interfaces; +using Rsdo.Concordancer.ServiceModel.Shared; + +namespace Rsdo.Concordancer.ServiceModel.Requests.Texts; + +public class IndexText : IRequest, IHaveCorpusId +{ + public Guid CorpusId { get; set; } + + public Guid TextId { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Rsdo.Concordancer.ServiceModel.csproj b/src/core/Rsdo.Concordancer.ServiceModel/Rsdo.Concordancer.ServiceModel.csproj new file mode 100644 index 0000000..9695d28 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Rsdo.Concordancer.ServiceModel.csproj @@ -0,0 +1,15 @@ + + + + net6.0 + true + false + 1.0.0 + + + + + + + + diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Shared/ConcordanceToken.cs b/src/core/Rsdo.Concordancer.ServiceModel/Shared/ConcordanceToken.cs new file mode 100644 index 0000000..2c36a57 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Shared/ConcordanceToken.cs @@ -0,0 +1,22 @@ +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.ServiceModel.Shared; + +public class ConcordanceToken +{ + public string Form { get; set; } + + public bool IsCenterMatch { get; set; } + + public bool IsWordInContextMatch { get; set; } + + public string Lemma { get; set; } + + public string Msd { get; set; } + + public string MsdDescription { get; set; } + + public int TokenOrder { get; set; } + + public TokenType Type { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Shared/EntityInfo.cs b/src/core/Rsdo.Concordancer.ServiceModel/Shared/EntityInfo.cs new file mode 100644 index 0000000..243656e --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Shared/EntityInfo.cs @@ -0,0 +1,11 @@ +using System; +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.ServiceModel.Shared; + +public class EntityInfo +{ + public EntityType EntityType { get; set; } + + public Guid Id { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Shared/ExecutionResult.cs b/src/core/Rsdo.Concordancer.ServiceModel/Shared/ExecutionResult.cs new file mode 100644 index 0000000..5871ff7 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Shared/ExecutionResult.cs @@ -0,0 +1,6 @@ +namespace Rsdo.Concordancer.ServiceModel.Shared; + +public class ExecutionResult +{ + public EntityInfo EntityInfo { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Types/Aggregation.cs b/src/core/Rsdo.Concordancer.ServiceModel/Types/Aggregation.cs new file mode 100644 index 0000000..ff42b06 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Types/Aggregation.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; + +namespace Rsdo.Concordancer.ServiceModel.Types; + +public class Aggregation +{ + public List Items { get; set; } + + public AggregationType Type { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Types/AggregationItem.cs b/src/core/Rsdo.Concordancer.ServiceModel/Types/AggregationItem.cs new file mode 100644 index 0000000..625af41 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Types/AggregationItem.cs @@ -0,0 +1,10 @@ +namespace Rsdo.Concordancer.ServiceModel.Types; + +public class AggregationItem +{ + public long Count { get; set; } + + public object Key { get; set; } + + public string Title { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Types/AggregationType.cs b/src/core/Rsdo.Concordancer.ServiceModel/Types/AggregationType.cs new file mode 100644 index 0000000..a429536 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Types/AggregationType.cs @@ -0,0 +1,6 @@ +namespace Rsdo.Concordancer.ServiceModel.Types; + +public enum AggregationType +{ + Text, +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Types/AlternateSearch.cs b/src/core/Rsdo.Concordancer.ServiceModel/Types/AlternateSearch.cs new file mode 100644 index 0000000..5d8df3e --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Types/AlternateSearch.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; +using Rsdo.Concordancer.ServiceModel.Requests.Shared; + +namespace Rsdo.Concordancer.ServiceModel.Types; + +public class AlternateSearch + where TRequest : Search +{ + public List> Items { get; set; } + + public TRequest OriginalSearch { get; set; } + + public AlternateSearchType Type { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Types/AlternateSearchItem.cs b/src/core/Rsdo.Concordancer.ServiceModel/Types/AlternateSearchItem.cs new file mode 100644 index 0000000..7747e8f --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Types/AlternateSearchItem.cs @@ -0,0 +1,13 @@ +using Rsdo.Concordancer.ServiceModel.Requests.Shared; + +namespace Rsdo.Concordancer.ServiceModel.Types; + +public class AlternateSearchItem + where TRequest : Search +{ + public long Count { get; set; } + + public TRequest Search { get; set; } + + public string Title { get; set; } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Types/AlternateSearchType.cs b/src/core/Rsdo.Concordancer.ServiceModel/Types/AlternateSearchType.cs new file mode 100644 index 0000000..b275713 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Types/AlternateSearchType.cs @@ -0,0 +1,6 @@ +namespace Rsdo.Concordancer.ServiceModel.Types; + +public enum AlternateSearchType +{ + Lemmas, +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Types/ConcordanceExportType.cs b/src/core/Rsdo.Concordancer.ServiceModel/Types/ConcordanceExportType.cs new file mode 100644 index 0000000..39b17f1 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Types/ConcordanceExportType.cs @@ -0,0 +1,7 @@ +namespace Rsdo.Concordancer.ServiceModel.Types; + +public enum ConcordanceExportType +{ + FirstRows, + RandomRows, +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Types/ConditionType.cs b/src/core/Rsdo.Concordancer.ServiceModel/Types/ConditionType.cs new file mode 100644 index 0000000..4499fe0 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Types/ConditionType.cs @@ -0,0 +1,7 @@ +namespace Rsdo.Concordancer.ServiceModel.Types; + +public enum ConditionType +{ + Is, + IsNot, +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Types/CorpusStatus.cs b/src/core/Rsdo.Concordancer.ServiceModel/Types/CorpusStatus.cs new file mode 100644 index 0000000..494d0e0 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Types/CorpusStatus.cs @@ -0,0 +1,22 @@ +namespace Rsdo.Concordancer.ServiceModel.Types; + +public enum CorpusStatus : byte +{ + // Corpus is offline (inactive) + Offline = 0, + + // Corpus is under maintenance (reindexing) + Maintenance = 25, + + // Corpus is being created (database and indexes are not yet created) + Creating = 50, + + // Corpus is active and can be used + Active = 100, + + // Error occured when corpus was created + Faulted = 200, + + // Corpus is marked as deleted (will be deleted by the worker) + Deleted = 201, +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Types/DistanceType.cs b/src/core/Rsdo.Concordancer.ServiceModel/Types/DistanceType.cs new file mode 100644 index 0000000..d250b4a --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Types/DistanceType.cs @@ -0,0 +1,7 @@ +namespace Rsdo.Concordancer.ServiceModel.Types; + +public enum DistanceType +{ + Position, + Distance, +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Types/EntityType.cs b/src/core/Rsdo.Concordancer.ServiceModel/Types/EntityType.cs new file mode 100644 index 0000000..b3c59ff --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Types/EntityType.cs @@ -0,0 +1,14 @@ +namespace Rsdo.Concordancer.ServiceModel.Types; + +public enum EntityType +{ + Corpus, + LemmaFormPair, + Msd, + Paragraph, + Sentence, + Term, + TermList, + Text, + Token, +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Types/FormSearchType.cs b/src/core/Rsdo.Concordancer.ServiceModel/Types/FormSearchType.cs new file mode 100644 index 0000000..11181f6 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Types/FormSearchType.cs @@ -0,0 +1,7 @@ +namespace Rsdo.Concordancer.ServiceModel.Types; + +public enum FormSearchType +{ + AllForms, + ExactForm, +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Types/ImportStatus.cs b/src/core/Rsdo.Concordancer.ServiceModel/Types/ImportStatus.cs new file mode 100644 index 0000000..842178b --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Types/ImportStatus.cs @@ -0,0 +1,31 @@ +namespace Rsdo.Concordancer.ServiceModel.Types; + +public enum ImportStatus : byte +{ + // Data is waiting to be imported + Waiting = 50, + + // Data is being importing + Importing = 60, + + // Data is imported + ImportingCompleted = 70, + + // Data is being indexing + Indexing = 80, + + // Data is indexed + IndexingCompleted = 90, + + // Data is active and can be used + Active = 100, + + // Error occured during importing of data + ImportingFaulted = 200, + + // Error occured during indexing of data + IndexingFaulted = 210, + + // Data is marked as deleted (will be deleted by the worker) + Deleted = 220, +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Types/JobStatus.cs b/src/core/Rsdo.Concordancer.ServiceModel/Types/JobStatus.cs new file mode 100644 index 0000000..499fcdd --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Types/JobStatus.cs @@ -0,0 +1,19 @@ +namespace Rsdo.Concordancer.ServiceModel.Types; + +public enum JobStatus +{ + // Waiting + Waiting = 0, + + // Processing + Processing = 50, + + // Processed + Processed = 100, + + // Failed + Failed = 200, + + // Cancelled + Cancelled = 201, +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.ServiceModel/Types/TokenType.cs b/src/core/Rsdo.Concordancer.ServiceModel/Types/TokenType.cs new file mode 100644 index 0000000..5e4d1a6 --- /dev/null +++ b/src/core/Rsdo.Concordancer.ServiceModel/Types/TokenType.cs @@ -0,0 +1,8 @@ +namespace Rsdo.Concordancer.ServiceModel.Types; + +public enum TokenType +{ + Word = 1, + Character = 2, + PunctuationCharacter = 3, +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/CompositionRoot/ServicesModule.cs b/src/core/Rsdo.Concordancer.Services/CompositionRoot/ServicesModule.cs new file mode 100644 index 0000000..c371d2f --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/CompositionRoot/ServicesModule.cs @@ -0,0 +1,117 @@ +using System; +using System.Reflection; +using Autofac; +using FluentValidation; +using Microsoft.Extensions.Caching.Memory; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.Concordances; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Framework; +using Rsdo.Concordancer.Services.Framework.BulkLoaders; +using Rsdo.Concordancer.Services.Framework.Cache; +using Rsdo.Concordancer.Services.Framework.DatabaseManager; +using Rsdo.Concordancer.Services.Framework.DbContext; +using Rsdo.Concordancer.Services.Framework.Decorators; +using Rsdo.Concordancer.Services.Search.Aggregations; +using Rsdo.Concordancer.Services.Search.AlternateSearches; +using Rsdo.Concordancer.Services.Search.QueryFactories; +using Rsdo.Concordancer.Services.Services.InputQueryParser; +using Rsdo.Concordancer.Services.Services.LemmatizationService; +using Rsdo.Concordancer.Services.Services.ParagraphService; +using Rsdo.Concordancer.Services.Services.PartOfSpeechService; +using Rsdo.Concordancer.Services.Services.TokenizerService; +using Module = Autofac.Module; + +namespace Rsdo.Concordancer.Services.CompositionRoot; + +public class ServicesModule : Module +{ + private Assembly ServicesAssembly => GetType().Assembly; + + protected override void Load(ContainerBuilder builder) + { + base.Load(builder); + + RegisterCache(builder); + RegisterDatabase(builder); + RegisterMediator(builder); + RegisterServiceBus(builder); + RegisterRequestHandlers(builder); + RegisterSearch(builder); + RegisterServices(builder); + } + + private static void RegisterCache(ContainerBuilder builder) + { + var memoryCache = new MemoryCache(new MemoryCacheOptions()); + builder.RegisterInstance(memoryCache).As().SingleInstance(); + + builder.RegisterType().As().InstancePerDependency(); + } + + private static void RegisterDatabase(ContainerBuilder builder) + { + // Temporary switch + AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true); + + // Database manager + builder.RegisterType().As().SingleInstance(); + + // Db contexts + builder.RegisterType().InstancePerLifetimeScope(); + builder.RegisterType().InstancePerLifetimeScope(); + + // Bulk loaders + builder.RegisterType().As().InstancePerLifetimeScope(); + } + + private static void RegisterMediator(ContainerBuilder builder) + { + // Mediator + builder.RegisterType().As().InstancePerLifetimeScope(); + } + + private static void RegisterServiceBus(ContainerBuilder builder) + { + // Service bus + builder.RegisterType().As().InstancePerLifetimeScope(); + } + + private static void RegisterServices(ContainerBuilder builder) + { + builder.RegisterType().Keyed(TokenizerType.Classla).SingleInstance(); + builder.RegisterType().Keyed(TokenizerType.Default).SingleInstance(); + builder.RegisterType().As().SingleInstance(); + builder.RegisterType().As().InstancePerLifetimeScope(); + builder.RegisterType().As().InstancePerLifetimeScope(); + builder.RegisterType().As().InstancePerLifetimeScope(); + } + + private void RegisterRequestHandlers(ContainerBuilder builder) + { + // Validators + builder.RegisterAssemblyTypes(ServicesAssembly).AsClosedTypesOf(typeof(IValidator<>)).AsImplementedInterfaces().InstancePerLifetimeScope(); + + // Request handlers + builder.RegisterAssemblyTypes(ServicesAssembly).AsClosedTypesOf(typeof(IRequestHandler<,>)).AsImplementedInterfaces(); + builder.RegisterGenericDecorator(typeof(SearchConcordancesDecorator<,>), typeof(IRequestHandler<,>)); + builder.RegisterGenericDecorator(typeof(CurrentContextInitializationDecorator<,>), typeof(IRequestHandler<,>)); + builder.RegisterGenericDecorator(typeof(LoggingDecorator<,>), typeof(IRequestHandler<,>)); + builder.RegisterGenericDecorator(typeof(RequestValidationDecorator<,>), typeof(IRequestHandler<,>)); + } + + private void RegisterSearch(ContainerBuilder builder) + { + // Query factories + builder.RegisterAssemblyTypes(ServicesAssembly).AsClosedTypesOf(typeof(IQueryFactory<,>)).AsImplementedInterfaces().InstancePerLifetimeScope(); + + // Aggregations + builder.RegisterType().As().InstancePerLifetimeScope(); + builder.RegisterType().Keyed(AggregationType.Text).InstancePerLifetimeScope(); + + // Alternate searches + builder.RegisterType() + .As>() + .InstancePerLifetimeScope(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Extensions/HighlighterExtensions.cs b/src/core/Rsdo.Concordancer.Services/Extensions/HighlighterExtensions.cs new file mode 100644 index 0000000..8c913d3 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Extensions/HighlighterExtensions.cs @@ -0,0 +1,97 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Rsdo.Concordancer.Core.Extensions; +using Rsdo.Concordancer.Core.Search.Queries.Concordances; +using Rsdo.Concordancer.ServiceModel.Shared; +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.Services.Extensions; + +public static class HighlighterExtensions +{ + public static void Highlight(this List tokens, ConcordancesQuery query, int centerTokenIndex) + { + var wordsInContextIndexes = query.WordsInContext.IsNullOrEmpty() + ? new HashSet() + : GetWordsInContextIndexes(tokens, query, centerTokenIndex).ToHashSet(); + for (var i = 0; i < tokens.Count; i++) + { + // Center word + if (i == centerTokenIndex) + { + tokens[i].IsCenterMatch = true; + } + + if (wordsInContextIndexes.Contains(i)) + { + tokens[i].IsWordInContextMatch = true; + } + } + } + + private static bool CheckCandidateToken(List tokens, ConcordancesQuery query, int relativeTokenIndex, int absoluteTokenIndex) + { + foreach (var wordInContext in query.WordsInContext) + { + // Try to find candidates only on positive criteria + if (wordInContext.ConditionType != ConditionType.Is) + { + continue; + } + + var candidate = tokens[absoluteTokenIndex]; + + if (!wordInContext.Positions.Contains(relativeTokenIndex)) + { + continue; + } + + if (!wordInContext.Form.IsNullOrEmpty()) + { + if (!candidate.Form.Equals(wordInContext.Form, StringComparison.OrdinalIgnoreCase)) + { + continue; + } + } + + if (!wordInContext.Lemmas.IsNullOrEmpty()) + { + if (!wordInContext.Lemmas.Any(l => l.Equals(candidate.Lemma, StringComparison.OrdinalIgnoreCase))) + { + continue; + } + } + + return true; + } + + return false; + } + + private static IEnumerable GetWordsInContextIndexes(List tokens, ConcordancesQuery query, int centerTokenIndex) + { + // Check up to 10 tokens to the right, since we cannot search in the left context of the main word + var candidateTokenIndices = new List(); + for (var i = centerTokenIndex + 1; i < tokens.Count; i++) + { + if (candidateTokenIndices.Count >= 10) + { + break; + } + + if (tokens[i].Type is TokenType.Word or TokenType.PunctuationCharacter) + { + candidateTokenIndices.Add(i); + } + } + + for (var i = 0; i < candidateTokenIndices.Count; i++) + { + if (CheckCandidateToken(tokens, query, i + 1, candidateTokenIndices[i])) + { + yield return candidateTokenIndices[i]; + } + } + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Framework/BulkLoaders/IBulkLoader.cs b/src/core/Rsdo.Concordancer.Services/Framework/BulkLoaders/IBulkLoader.cs new file mode 100644 index 0000000..3128a07 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Framework/BulkLoaders/IBulkLoader.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Entities; + +namespace Rsdo.Concordancer.Services.Framework.BulkLoaders; + +public interface IBulkLoader +{ + Task InsertEntities(List entities, CancellationToken cancellationToken) + where TEntity : Entity; + + Task InsertEntities(List entities, bool loadAutoIds, CancellationToken cancellationToken) + where TEntity : Entity; +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Framework/BulkLoaders/PostgreSqlBulkLoader.cs b/src/core/Rsdo.Concordancer.Services/Framework/BulkLoaders/PostgreSqlBulkLoader.cs new file mode 100644 index 0000000..d090124 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Framework/BulkLoaders/PostgreSqlBulkLoader.cs @@ -0,0 +1,139 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata; +using Npgsql; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.Framework.BulkLoaders; + +public class PostgreSqlBulkLoader : IBulkLoader +{ + private readonly CorpusDbContext corpusDbContext; + private readonly MasterDbContext masterDbContext; + + public PostgreSqlBulkLoader(CorpusDbContext corpusDbContext, MasterDbContext masterDbContext) + { + this.corpusDbContext = corpusDbContext; + this.masterDbContext = masterDbContext; + } + + public Task InsertEntities(List entities, CancellationToken cancellationToken) + where TEntity : Entity + { + return InsertEntities(entities, true, cancellationToken); + } + + public async Task InsertEntities(List entities, bool loadAutoIds, CancellationToken cancellationToken) + where TEntity : Entity + { + // Get table and field names + var entityType = GetEntityType(); + var tableName = entityType.GetTableName(); + var storeObjectIdentifier = GetTableIdentifier(entityType); + var keyProperties = entityType.FindPrimaryKey().Properties; + var dataProperties = entityType.GetDeclaredProperties() + .Where(x => keyProperties.All(kp => kp.Name != x.Name) && x.GetColumnName(storeObjectIdentifier) != null) + .ToList(); + var dataFieldNames = dataProperties.Select(p => p.GetColumnName(storeObjectIdentifier)).ToList(); + var copyFromCommand = $"COPY {tableName} ({string.Join(",", dataFieldNames)}) FROM STDIN (FORMAT BINARY)"; + + var dbContext = GetDbContext(); + await using var connection = new NpgsqlConnection(dbContext.Database.GetConnectionString()); + + // Load data into table + await connection.OpenAsync(cancellationToken); + await using (var writer = await connection.BeginBinaryImportAsync(copyFromCommand, cancellationToken)) + { + foreach (var entity in entities) + { + await writer.StartRowAsync(cancellationToken); + var values = dbContext.Entry(entity).CurrentValues; + foreach (var dataProperty in dataProperties) + { + var value = values[dataProperty]; + if (value == null) + { + await writer.WriteNullAsync(cancellationToken); + } + else + { + if (dataProperty.ClrType.IsEnum) + { + // Try to cast enums to byte + value = Convert.ToByte(value); + } + + await writer.WriteAsync(value, cancellationToken); + } + } + } + + await writer.CompleteAsync(cancellationToken); + } + + if (loadAutoIds) + { + await GetEntityIdentifiers(entities, connection); + } + } + + private static StoreObjectIdentifier GetTableIdentifier(IReadOnlyEntityType entityType) + { + var tableName = entityType.GetTableName(); + var schema = entityType.GetSchema(); + return StoreObjectIdentifier.Table(tableName!, schema); + } + + private async Task GetEntityIdentifiers(List entities, NpgsqlConnection connection) + where TEntity : Entity + { + // Get table and field names + var entityType = GetEntityType(); + var tableName = entityType.GetTableName(); + var storeObjectIdentifier = GetTableIdentifier(entityType); + var autoIdFieldName = entityType.GetProperty(nameof(Entity.AutoId)).GetColumnName(storeObjectIdentifier); + var entityIdFieldName = entityType.GetProperty(nameof(Entity.Id)).GetColumnName(storeObjectIdentifier); + + // Get all Id->AutoId mappings + var autoIds = new Dictionary(); + foreach (var chunk in entities.Chunk(1000)) + { + var ids = string.Join(",", chunk.Select(e => "'" + e.Id + "'")); + var sql = $"SELECT {autoIdFieldName}, {entityIdFieldName} FROM {tableName} WHERE {entityIdFieldName} IN ({ids})"; + await using var command = new NpgsqlCommand(sql, connection); + await using var reader = await command.ExecuteReaderAsync(); + while (await reader.ReadAsync()) + { + autoIds.Add(reader.GetGuid(1), reader.GetInt64(0)); + } + } + + // Update entity AutoIds + foreach (var entity in entities) + { + entity.AutoId = autoIds[entity.Id]; + } + } + + private Microsoft.EntityFrameworkCore.DbContext GetDbContext() + { + return corpusDbContext.Model.FindEntityType(typeof(TEntity)) != null ? corpusDbContext : masterDbContext; + } + + private IEntityType GetEntityType() + { + var entityType = corpusDbContext.Model.FindEntityType(typeof(TEntity)) ?? masterDbContext.Model.FindEntityType(typeof(TEntity)); + + if (entityType == null) + { + throw new Exception($"Entity type {typeof(TEntity).FullName} is not mapped in database context!"); + } + + return entityType; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Framework/Cache/ICacheWarmUp.cs b/src/core/Rsdo.Concordancer.Services/Framework/Cache/ICacheWarmUp.cs new file mode 100644 index 0000000..13d2aa1 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Framework/Cache/ICacheWarmUp.cs @@ -0,0 +1,6 @@ +namespace Rsdo.Concordancer.Services.Framework.Cache; + +public interface ICacheWarmUp +{ + void WarmUp(); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Framework/Cache/PartOfSpeechCacheWarmUp.cs b/src/core/Rsdo.Concordancer.Services/Framework/Cache/PartOfSpeechCacheWarmUp.cs new file mode 100644 index 0000000..e1a2745 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Framework/Cache/PartOfSpeechCacheWarmUp.cs @@ -0,0 +1,34 @@ +using System.Linq; +using Microsoft.Extensions.Caching.Memory; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.Framework.Cache; + +public class PartOfSpeechCacheWarmUp : ICacheWarmUp +{ + private readonly MasterDbContext dbContext; + private readonly IMemoryCache memoryCache; + + public PartOfSpeechCacheWarmUp(MasterDbContext dbContext, IMemoryCache memoryCache) + { + this.dbContext = dbContext; + this.memoryCache = memoryCache; + } + + public void WarmUp() + { + CacheMsds(); + } + + private void CacheMsds() + { + // Get all msds + var msds = dbContext.Msd.ToList(); + + // Cache individual msd by code + foreach (var msd in msds) + { + memoryCache.Set(Core.Constants.Cache.CacheKeys.Msd.ByCode(msd.Code), msd, Core.Constants.Cache.Duration.Long); + } + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Framework/DatabaseManager/IDatabaseManager.cs b/src/core/Rsdo.Concordancer.Services/Framework/DatabaseManager/IDatabaseManager.cs new file mode 100644 index 0000000..68d55a0 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Framework/DatabaseManager/IDatabaseManager.cs @@ -0,0 +1,17 @@ +using System; +using System.Threading.Tasks; + +namespace Rsdo.Concordancer.Services.Framework.DatabaseManager; + +public interface IDatabaseManager +{ + Task CreateCorpusDatabase(); + + Task CreateMasterDatabase(string connectionString, string databaseName); + + Task DeleteCorpusDatabase(); + + Task UpdateCorpusDatabases(); + + Task UpdateMasterDatabase(); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Framework/DatabaseManager/PostgreSqlDatabaseManager.cs b/src/core/Rsdo.Concordancer.Services/Framework/DatabaseManager/PostgreSqlDatabaseManager.cs new file mode 100644 index 0000000..86f699c --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Framework/DatabaseManager/PostgreSqlDatabaseManager.cs @@ -0,0 +1,124 @@ +using System; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Npgsql; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.Framework.DatabaseManager; + +public class PostgreSqlDatabaseManager : IDatabaseManager +{ + private readonly IConnectionStringProvider connectionStringProvider; + private readonly IDatabaseMigrationRunner databaseMigrationRunner; + private readonly MasterDbContext dbContext; + + public PostgreSqlDatabaseManager( + IConnectionStringProvider connectionStringProvider, + IDatabaseMigrationRunner databaseMigrationRunner, + MasterDbContext dbContext) + { + this.connectionStringProvider = connectionStringProvider; + this.databaseMigrationRunner = databaseMigrationRunner; + this.dbContext = dbContext; + } + + public async Task CreateCorpusDatabase() + { + // Create database + var connectionString = connectionStringProvider.GetMasterConnectionString(); + var databaseName = connectionStringProvider.GetCorpusDatabaseName(); + await CreateDatabase(connectionString, databaseName); + + // Run migrations + connectionString = connectionStringProvider.GetCorpusConnectionString(); + databaseMigrationRunner.MigrateUp(connectionString, MigrationTag.Corpus); + } + + public async Task CreateMasterDatabase(string connectionString, string databaseName) + { + // Create database + await CreateDatabase(connectionString, databaseName); + + // Run migrations + var connectionStringWithDatabase = GetConnectionStringWithDatabase(connectionString, databaseName); + databaseMigrationRunner.MigrateUp(connectionStringWithDatabase, MigrationTag.Master); + } + + public async Task DeleteCorpusDatabase() + { + // Delete database + var connectionString = connectionStringProvider.GetMasterConnectionString(); + var databaseName = connectionStringProvider.GetCorpusDatabaseName(); + await DeleteDatabase(connectionString, databaseName); + } + + public async Task UpdateCorpusDatabases() + { + // Update all corpus databases + var corpusIds = await dbContext.Corpus.Select(c => c.Id).ToListAsync(); + foreach (var corpusId in corpusIds) + { + var connectionString = connectionStringProvider.GetCorpusConnectionString(corpusId); + databaseMigrationRunner.MigrateUp(connectionString, MigrationTag.Corpus); + } + } + + public Task UpdateMasterDatabase() + { + // Update master database + var connectionString = connectionStringProvider.GetMasterConnectionString(); + databaseMigrationRunner.MigrateUp(connectionString, MigrationTag.Master); + return Task.CompletedTask; + } + + private static async Task CreateDatabase(string connectionString, string databaseName) + { + // Open connection + await using var connection = new NpgsqlConnection(connectionString); + await connection.OpenAsync(); + + // Check if database already exists + var databaseExists = await DatabaseExists(connection, databaseName); + if (databaseExists) + { + throw new Exception($"Database {databaseName} already exists!"); + } + + // Create database + var sql = $"CREATE DATABASE \"{databaseName}\" ENCODING = 'UTF8'"; + await using var command = new NpgsqlCommand(sql, connection); + await command.ExecuteNonQueryAsync(); + } + + private static async Task DatabaseExists(NpgsqlConnection connection, string databaseName) + { + var sql = $"SELECT datname FROM pg_catalog.pg_database WHERE datname = @databaseName"; + await using var command = new NpgsqlCommand(sql, connection); + command.Parameters.AddWithValue("databaseName", databaseName); + await using var reader = await command.ExecuteReaderAsync(); + return reader.HasRows; + } + + private static async Task DeleteDatabase(string connectionString, string databaseName) + { + // Open connection + await using var connection = new NpgsqlConnection(connectionString); + await connection.OpenAsync(); + + // Drop database + var sql = $"DROP DATABASE IF EXISTS \"{databaseName}\" WITH (FORCE)"; + await using var command = new NpgsqlCommand(sql, connection); + await command.ExecuteNonQueryAsync(); + } + + private static string GetConnectionStringWithDatabase(string connectionString, string databaseName) + { + var builder = new NpgsqlConnectionStringBuilder(connectionString) + { + Database = databaseName, + }; + return builder.ToString(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Framework/DbContext/CorpusDbContext.cs b/src/core/Rsdo.Concordancer.Services/Framework/DbContext/CorpusDbContext.cs new file mode 100644 index 0000000..7c497e4 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Framework/DbContext/CorpusDbContext.cs @@ -0,0 +1,46 @@ +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.Core.Interfaces; + +namespace Rsdo.Concordancer.Services.Framework.DbContext; + +public class CorpusDbContext : Microsoft.EntityFrameworkCore.DbContext +{ + private readonly IConnectionStringProvider connectionStringProvider; + + public CorpusDbContext(IConnectionStringProvider connectionStringProvider) + { + this.connectionStringProvider = connectionStringProvider; + } + + public DbSet Paragraph { get; set; } + + public DbSet Sentence { get; set; } + + public DbSet Term { get; set; } + + public DbSet TermList { get; set; } + + public DbSet Text { get; set; } + + public DbSet Token { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + base.OnConfiguring(optionsBuilder); + + optionsBuilder.UseNpgsql(connectionStringProvider.GetCorpusConnectionString()).UseLowerCaseNamingConvention(); + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity().HasKey(e => e.AutoId); + modelBuilder.Entity().HasKey(e => e.AutoId); + modelBuilder.Entity().HasKey(e => e.AutoId); + modelBuilder.Entity().HasKey(e => e.AutoId); + modelBuilder.Entity().HasKey(e => e.AutoId); + modelBuilder.Entity().HasKey(e => e.AutoId); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Framework/DbContext/MasterDbContext.cs b/src/core/Rsdo.Concordancer.Services/Framework/DbContext/MasterDbContext.cs new file mode 100644 index 0000000..ee1efb2 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Framework/DbContext/MasterDbContext.cs @@ -0,0 +1,37 @@ +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.Core.Interfaces; + +namespace Rsdo.Concordancer.Services.Framework.DbContext; + +public class MasterDbContext : Microsoft.EntityFrameworkCore.DbContext +{ + private readonly IConnectionStringProvider connectionStringProvider; + + public MasterDbContext(IConnectionStringProvider connectionStringProvider) + { + this.connectionStringProvider = connectionStringProvider; + } + + public DbSet Corpus { get; set; } + + public DbSet LemmaFormPair { get; set; } + + public DbSet Msd { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + base.OnConfiguring(optionsBuilder); + + optionsBuilder.UseNpgsql(connectionStringProvider.GetMasterConnectionString()).UseLowerCaseNamingConvention(); + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity().HasKey(e => e.AutoId); + modelBuilder.Entity().HasKey(e => e.AutoId); + modelBuilder.Entity().HasKey(e => e.AutoId); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Framework/Decorators/CurrentContextInitializationDecorator.cs b/src/core/Rsdo.Concordancer.Services/Framework/Decorators/CurrentContextInitializationDecorator.cs new file mode 100644 index 0000000..f533869 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Framework/Decorators/CurrentContextInitializationDecorator.cs @@ -0,0 +1,58 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.Core.Exceptions; +using Rsdo.Concordancer.Core.Framework; +using Rsdo.Concordancer.Core.Framework.CurrentContexts; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.Corpuses; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.Framework.Decorators; + +public class CurrentContextInitializationDecorator : IRequestHandler + where TRequest : IRequest +{ + private readonly IRequestHandler decoratedHandler; + private readonly MasterDbContext dbContext; + + public CurrentContextInitializationDecorator(IRequestHandler decoratedHandler, MasterDbContext dbContext) + { + this.decoratedHandler = decoratedHandler; + this.dbContext = dbContext; + } + + public async Task Handle(TRequest request, CancellationToken cancellationToken) + { + // Check if current context is set-up + CurrentContext.Current ??= new DefaultCurrentContext(); + + // Get corpus ID + if (request is IHaveCorpusId haveCorpus) + { + await ValidateCorpus(request, haveCorpus.CorpusId); + CurrentContext.Current.CorpusId = haveCorpus.CorpusId; + } + + return await decoratedHandler.Handle(request, cancellationToken); + } + + private async Task ValidateCorpus(TRequest request, Guid corpusId) + { + // Corpus must exist + var corpus = await dbContext.Corpus.SingleOrDefaultAsync(c => c.Id == corpusId); + if (corpus == null) + { + throw new XNotFoundException(Errors.NotFound.EntityNotFound(EntityType.Corpus, corpusId)); + } + + // Corpus status must be active + if (request is not (CreateCorpusStore or DeleteCorpusStore) && corpus.Status != CorpusStatus.Active) + { + throw new XForbiddenException(Errors.Forbidden.CorpusStatusIsNotValid(corpus.Status, CorpusStatus.Active)); + } + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Framework/Decorators/LoggingDecorator.cs b/src/core/Rsdo.Concordancer.Services/Framework/Decorators/LoggingDecorator.cs new file mode 100644 index 0000000..63a0919 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Framework/Decorators/LoggingDecorator.cs @@ -0,0 +1,27 @@ +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Interfaces; + +namespace Rsdo.Concordancer.Services.Framework.Decorators; + +public class LoggingDecorator : IRequestHandler + where TRequest : IRequest +{ + private readonly IRequestHandler decoratedHandler; + private readonly ILogger logger; + + public LoggingDecorator(IRequestHandler decoratedHandler, ILogger logger) + { + this.decoratedHandler = decoratedHandler; + this.logger = logger; + } + + public async Task Handle(TRequest request, CancellationToken cancellationToken) + { + logger.LogInformation("Calling handler {handler} to handle {@request}.", decoratedHandler.GetType().ToString(), request); + + return await decoratedHandler.Handle(request, cancellationToken); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Framework/Decorators/RequestValidationDecorator.cs b/src/core/Rsdo.Concordancer.Services/Framework/Decorators/RequestValidationDecorator.cs new file mode 100644 index 0000000..b175b75 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Framework/Decorators/RequestValidationDecorator.cs @@ -0,0 +1,32 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using Autofac; +using FluentValidation; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Interfaces; + +namespace Rsdo.Concordancer.Services.Framework.Decorators; + +public class RequestValidationDecorator : IRequestHandler + where TRequest : IRequest +{ + private readonly IRequestHandler decoratedHandler; + private readonly ILifetimeScope lifetimeScope; + + public RequestValidationDecorator(IRequestHandler decoratedHandler, ILifetimeScope lifetimeScope) + { + this.decoratedHandler = decoratedHandler; + this.lifetimeScope = lifetimeScope; + } + + public async Task Handle(TRequest request, CancellationToken cancellationToken) + { + if (lifetimeScope.TryResolve>(out var validator)) + { + await validator.ValidateAndThrowAsync(request, cancellationToken); + } + + return await decoratedHandler.Handle(request, cancellationToken); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Framework/Decorators/SearchConcordancesDecorator.cs b/src/core/Rsdo.Concordancer.Services/Framework/Decorators/SearchConcordancesDecorator.cs new file mode 100644 index 0000000..f9d31b1 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Framework/Decorators/SearchConcordancesDecorator.cs @@ -0,0 +1,36 @@ +using System.Threading; +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.Concordances; +using Rsdo.Concordancer.Services.Services.InputQueryParser; + +namespace Rsdo.Concordancer.Services.Framework.Decorators; + +public class SearchConcordancesDecorator : IRequestHandler + where TRequest : IRequest +{ + private readonly IRequestHandler decoratedHandler; + private readonly IInputQueryParser inputQueryParser; + + public SearchConcordancesDecorator(IRequestHandler decoratedHandler, IInputQueryParser inputQueryParser) + { + this.decoratedHandler = decoratedHandler; + this.inputQueryParser = inputQueryParser; + } + + public async Task Handle(TRequest request, CancellationToken cancellationToken) + { + if (request is BaseSearchConcordances search) + { + if (!string.IsNullOrEmpty(search.Query)) + { + var parsed = await inputQueryParser.Parse(search.Query); + search.MainWord = parsed.mainWord; + search.WordsInContext = parsed.wordsInContext; + } + } + + return await decoratedHandler.Handle(request, cancellationToken); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Framework/Mediator.cs b/src/core/Rsdo.Concordancer.Services/Framework/Mediator.cs new file mode 100644 index 0000000..5d52c2b --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Framework/Mediator.cs @@ -0,0 +1,35 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using Autofac; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Interfaces; + +namespace Rsdo.Concordancer.Services.Framework; + +public class Mediator : IMediator +{ + private readonly ILifetimeScope lifetimeScope; + + public Mediator(ILifetimeScope lifetimeScope) + { + this.lifetimeScope = lifetimeScope; + } + + public Task Send(IRequest request, CancellationToken cancellationToken = default) + { + return SendInternal(request, cancellationToken); + } + + public Task Send(string requestName, IRequest request, CancellationToken cancellationToken = default) + { + return SendInternal(request, cancellationToken); + } + + private Task SendInternal(IRequest request, CancellationToken cancellationToken = default) + { + var handlerType = typeof(IRequestHandler<,>).MakeGenericType(request.GetType(), typeof(TResponse)); + var handler = (dynamic)lifetimeScope.Resolve(handlerType); + return handler.Handle((dynamic)request, cancellationToken); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Framework/ServiceBus.cs b/src/core/Rsdo.Concordancer.Services/Framework/ServiceBus.cs new file mode 100644 index 0000000..448b036 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Framework/ServiceBus.cs @@ -0,0 +1,18 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using Hangfire; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Interfaces; + +namespace Rsdo.Concordancer.Services.Framework; + +public class ServiceBus : IServiceBus +{ + public Task Send(IRequest request) + { + var requestName = request.GetType().Name; + BackgroundJob.Enqueue(mediator => mediator.Send(requestName, request, CancellationToken.None)); + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/Concordances/BaseSearchConcordancesHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Concordances/BaseSearchConcordancesHandler.cs new file mode 100644 index 0000000..aa62955 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Concordances/BaseSearchConcordancesHandler.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.Core.Search.Queries.Concordances; +using Rsdo.Concordancer.ServiceModel.Requests.Concordances; +using Rsdo.Concordancer.Services.Extensions; +using Rsdo.Concordancer.Services.Services.ParagraphService; + +namespace Rsdo.Concordancer.Services.RequestHandlers.Concordances; + +public abstract class BaseSearchConcordancesHandler +{ + private readonly IParagraphService paragraphService; + + protected BaseSearchConcordancesHandler(IParagraphService paragraphService) + { + this.paragraphService = paragraphService; + } + + protected async Task> GetItems(ConcordancesQuery query, List entityIds) + { + var items = new List(); + foreach (var entityId in entityIds) + { + items.Add(await GetItem(query, entityId)); + } + + return items; + } + + private async Task GetItem(ConcordancesQuery query, string entityId) + { + var centerTokenId = Guid.Parse(entityId); + var centerToken = await paragraphService.GetToken(centerTokenId); + var paragraphId = centerToken.Sentence.Paragraph.Id; + + var orderStart = Math.Max(centerToken.TokenOrder - 20, 1); + var orderEnd = centerToken.TokenOrder + 20; + + // Get predicate for tokens limitation + Expression> predicate = t => + t.Sentence.Paragraph.Id == paragraphId && t.TokenOrder >= orderStart && t.TokenOrder <= orderEnd; + + // Get tokens + var tokens = await paragraphService.GetTokens(predicate); + + // Get center token index + var centerTokenIndex = tokens.FindIndex(t => t.TokenOrder == centerToken.TokenOrder); + + // Highlight tokens + tokens.Highlight(query, centerTokenIndex); + + // Return response item + return new SearchConcordancesResponseItem() + { + ParagraphId = paragraphId, + LeftContext = tokens.GetRange(0, centerTokenIndex), + CenterContext = tokens[centerTokenIndex], + RightContext = tokens.GetRange(centerTokenIndex + 1, tokens.Count - centerTokenIndex - 1), + }; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/Concordances/ConcordanceDetailsHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Concordances/ConcordanceDetailsHandler.cs new file mode 100644 index 0000000..194a786 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Concordances/ConcordanceDetailsHandler.cs @@ -0,0 +1,56 @@ +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.Core.Search.Queries.Concordances; +using Rsdo.Concordancer.ServiceModel.Requests.Concordances; +using Rsdo.Concordancer.Services.Extensions; +using Rsdo.Concordancer.Services.Framework.DbContext; +using Rsdo.Concordancer.Services.Search.QueryFactories; +using Rsdo.Concordancer.Services.Services.ParagraphService; + +namespace Rsdo.Concordancer.Services.RequestHandlers.Concordances; + +public class ConcordanceDetailsHandler : IRequestHandler +{ + private readonly CorpusDbContext dbContext; + private readonly IQueryFactory queryFactory; + private readonly IParagraphService paragraphService; + + public ConcordanceDetailsHandler( + CorpusDbContext dbContext, + IQueryFactory queryFactory, + IParagraphService paragraphService) + { + this.dbContext = dbContext; + this.queryFactory = queryFactory; + this.paragraphService = paragraphService; + } + + public async Task Handle(ConcordanceDetails request, CancellationToken cancellationToken) + { + // Get text + var text = await dbContext.Paragraph.Include(p => p.Text).Where(p => p.Id == request.ParagraphId).Select(x => x.Text).SingleAsync(cancellationToken); + + // Get tokens in paragraph + var tokens = await paragraphService.GetTokens(x => x.Sentence.Paragraph.Id == request.ParagraphId); + + // Highlight tokens + var centerTokenIndex = tokens.FindIndex(t => t.TokenOrder == request.TokenOrder); + if (centerTokenIndex != -1) + { + var query = await queryFactory.GetQuery(request); + tokens.Highlight(query, centerTokenIndex); + } + + return new ConcordanceDetailsResponse() + { + Author = text.Author, + Title = text.Title, + Tokens = tokens, + Year = text.Year, + SourceFile = text.DisplayFileName, + }; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/Concordances/ExportConcordancesHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Concordances/ExportConcordancesHandler.cs new file mode 100644 index 0000000..47ea3ec --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Concordances/ExportConcordancesHandler.cs @@ -0,0 +1,106 @@ +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Constants; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.Core.Model; +using Rsdo.Concordancer.Core.Search; +using Rsdo.Concordancer.Core.Search.Queries.Concordances; +using Rsdo.Concordancer.ServiceModel.Requests.Concordances; +using Rsdo.Concordancer.ServiceModel.Shared; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Search.QueryFactories; +using Rsdo.Concordancer.Services.Services.ParagraphService; + +namespace Rsdo.Concordancer.Services.RequestHandlers.Concordances; + +public class ExportConcordancesHandler : BaseSearchConcordancesHandler, IRequestHandler +{ + private readonly IQueryFactory queryFactory; + private readonly ISearchEngine searchEngine; + + public ExportConcordancesHandler( + IParagraphService paragraphService, + IQueryFactory queryFactory, + ISearchEngine searchEngine) + : base(paragraphService) + { + this.queryFactory = queryFactory; + this.searchEngine = searchEngine; + } + + public async Task Handle(ExportConcordances request, CancellationToken cancellationToken) + { + // Convert request to search query + var query = await queryFactory.GetQuery(request); + + // Execute search + var result = await searchEngine.Search(query); + + // Get search items + var items = await GetItems(query, result.EntityIds); + + // Export + var stream = new MemoryStream(); + await using (var writer = new StreamWriter(stream, Encoding.UTF8, 1024, true)) + { + // Writer header + await WriteHeader(writer); + + // Write items + foreach (var item in items) + { + await WriteItem(writer, item); + } + } + + stream.Position = 0; + return new ExportConcordancesResponse() + { + ContentType = Constants.Export.DefaultContentType, + FileName = "export.txt", + Stream = stream, + }; + } + + private static async Task WriteContext(StreamWriter writer, List tokens) + { + if (tokens != null) + { + foreach (var token in tokens) + { + switch (token.Type) + { + case TokenType.Word or TokenType.PunctuationCharacter: + await writer.WriteAsync(token.Form); + break; + case TokenType.Character: + await writer.WriteAsync(" "); + break; + } + } + } + } + + private static async Task WriteHeader(StreamWriter writer) + { + await writer.WriteAsync("Levo besedilo"); + await writer.WriteAsync("\t"); + await writer.WriteAsync("Iskani niz"); + await writer.WriteAsync("\t"); + await writer.WriteAsync("Desno besedilo"); + await writer.WriteLineAsync(); + } + + private static async Task WriteItem(StreamWriter writer, SearchConcordancesResponseItem item) + { + await WriteContext(writer, item.LeftContext); + await writer.WriteAsync("\t"); + await writer.WriteAsync(item.CenterContext.Form); + await writer.WriteAsync("\t"); + await WriteContext(writer, item.RightContext); + await writer.WriteLineAsync(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/Concordances/SearchConcordancesHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Concordances/SearchConcordancesHandler.cs new file mode 100644 index 0000000..49ff5f2 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Concordances/SearchConcordancesHandler.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Extensions; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.Core.Model; +using Rsdo.Concordancer.Core.Search; +using Rsdo.Concordancer.Core.Search.Queries.Concordances; +using Rsdo.Concordancer.ServiceModel.Requests.Concordances; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Search.Aggregations; +using Rsdo.Concordancer.Services.Search.AlternateSearches; +using Rsdo.Concordancer.Services.Search.QueryFactories; +using Rsdo.Concordancer.Services.Services.ParagraphService; + +namespace Rsdo.Concordancer.Services.RequestHandlers.Concordances; + +public class SearchConcordancesHandler : BaseSearchConcordancesHandler, IRequestHandler +{ + private readonly IAggregationProviderFactory aggregationProviderFactory; + private readonly IAlternateSearchProvider lemmasAlternateSearchProvider; + private readonly IQueryFactory queryFactory; + private readonly ISearchEngine searchEngine; + + public SearchConcordancesHandler( + IAggregationProviderFactory aggregationProviderFactory, + IAlternateSearchProvider lemmasAlternateSearchProvider, + IParagraphService paragraphService, + IQueryFactory queryFactory, + ISearchEngine searchEngine) + : base(paragraphService) + { + this.aggregationProviderFactory = aggregationProviderFactory; + this.lemmasAlternateSearchProvider = lemmasAlternateSearchProvider; + this.queryFactory = queryFactory; + this.searchEngine = searchEngine; + } + + public async Task Handle(SearchConcordances request, CancellationToken cancellationToken) + { + // Convert request to search query + var query = await queryFactory.GetQuery(request); + + // Execute search + var result = await searchEngine.Search(query); + + return new SearchConcordancesResponse() + { + Items = await GetItems(query, result.EntityIds), + Aggregations = new List() + { + await GetAggregation(AggregationType.Text, c => c.TextIds?.Clear()), + }, + LemmasAlternateSearch = await lemmasAlternateSearchProvider.Get(request), + Offset = request.From, + Total = result.Total, + }; + + Task GetAggregation(AggregationType aggregationType, Action modifyAction) + { + // Clone query + var clonedQuery = query.Copy(); + modifyAction(clonedQuery); + + // Get aggregation + var provider = aggregationProviderFactory.GetProvider(aggregationType); + return provider.Get(clonedQuery); + } + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/Corpuses/CreateCorpusHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Corpuses/CreateCorpusHandler.cs new file mode 100644 index 0000000..9ddadea --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Corpuses/CreateCorpusHandler.cs @@ -0,0 +1,48 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.Core.Extensions; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.Corpuses; +using Rsdo.Concordancer.ServiceModel.Shared; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.RequestHandlers.Corpuses; + +public class CreateCorpusHandler : IRequestHandler +{ + private readonly MasterDbContext dbContext; + private readonly IServiceBus serviceBus; + + public CreateCorpusHandler(MasterDbContext dbContext, IServiceBus serviceBus) + { + this.dbContext = dbContext; + this.serviceBus = serviceBus; + } + + public async Task Handle(CreateCorpus request, CancellationToken cancellationToken) + { + // Create new corpus and mark its status as Creating + var corpus = new Corpus + { + Description = request.Description, + Title = request.Title, + Status = CorpusStatus.Creating, + }.ApplyCreateValues(); + + await dbContext.Corpus.AddAsync(corpus, cancellationToken); + await dbContext.SaveChangesAsync(cancellationToken); + + // Send job to create corpus store + await serviceBus.Send( + new CreateCorpusStore + { + CorpusId = corpus.Id, + }); + + // Return result + return new ExecutionResult().WithEntityInfo(EntityType.Corpus, corpus.Id); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/Corpuses/CreateCorpusStoreHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Corpuses/CreateCorpusStoreHandler.cs new file mode 100644 index 0000000..e53fab8 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Corpuses/CreateCorpusStoreHandler.cs @@ -0,0 +1,57 @@ +using System; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.Core.Exceptions; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.Core.Search; +using Rsdo.Concordancer.ServiceModel.Requests.Corpuses; +using Rsdo.Concordancer.ServiceModel.Shared; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Framework.DatabaseManager; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.RequestHandlers.Corpuses; + +public class CreateCorpusStoreHandler : IRequestHandler +{ + private readonly IDatabaseManager databaseManager; + private readonly MasterDbContext dbContext; + private readonly ISearchEngine searchEngine; + + public CreateCorpusStoreHandler(IDatabaseManager databaseManager, MasterDbContext dbContext, ISearchEngine searchEngine) + { + this.databaseManager = databaseManager; + this.dbContext = dbContext; + this.searchEngine = searchEngine; + } + + public async Task Handle(CreateCorpusStore request, CancellationToken cancellationToken) + { + // Get corpus + var corpus = await dbContext.Corpus.SingleAsync(x => x.Id == request.CorpusId, cancellationToken); + + // Check corpus status + if (corpus.Status != CorpusStatus.Creating) + { + throw new XForbiddenException(Errors.Forbidden.CorpusStatusIsNotValid(corpus.Status, CorpusStatus.Creating)); + } + + // Create database for corpus + var createDbTask = databaseManager.CreateCorpusDatabase(); + + // Create elastic indexes + var createSchemaTask = searchEngine.CreateSchema(); + + // Wait to finish + await Task.WhenAll(createDbTask, createSchemaTask); + + // Mark corpus as active + corpus.Status = CorpusStatus.Active; + await dbContext.SaveChangesAsync(cancellationToken); + + // Return result + return new ExecutionResult(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/Corpuses/CreateCorpusValidator.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Corpuses/CreateCorpusValidator.cs new file mode 100644 index 0000000..8d1fbbf --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Corpuses/CreateCorpusValidator.cs @@ -0,0 +1,12 @@ +using FluentValidation; +using Rsdo.Concordancer.ServiceModel.Requests.Corpuses; + +namespace Rsdo.Concordancer.Services.RequestHandlers.Corpuses; + +public class CreateCorpusValidator : AbstractValidator +{ + public CreateCorpusValidator() + { + RuleFor(x => x.Title).NotEmpty(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/Corpuses/DeleteCorpusHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Corpuses/DeleteCorpusHandler.cs new file mode 100644 index 0000000..4c0168c --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Corpuses/DeleteCorpusHandler.cs @@ -0,0 +1,41 @@ +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.Corpuses; +using Rsdo.Concordancer.ServiceModel.Shared; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.RequestHandlers.Corpuses; + +public class DeleteCorpusHandler : IRequestHandler +{ + private readonly MasterDbContext dbContext; + private readonly IServiceBus serviceBus; + + public DeleteCorpusHandler(MasterDbContext dbContext, IServiceBus serviceBus) + { + this.dbContext = dbContext; + this.serviceBus = serviceBus; + } + + public async Task Handle(DeleteCorpus request, CancellationToken cancellationToken) + { + // Get corpus + var corpus = await dbContext.Corpus.SingleAsync(x => x.Id == request.CorpusId, cancellationToken); + + // Set status to deleted + corpus.Status = CorpusStatus.Deleted; + await dbContext.SaveChangesAsync(cancellationToken); + + // Send job to create corpus store + await serviceBus.Send( + new DeleteCorpusStore + { + CorpusId = corpus.Id, + }); + + return new ExecutionResult(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/Corpuses/DeleteCorpusStoreHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Corpuses/DeleteCorpusStoreHandler.cs new file mode 100644 index 0000000..27a849d --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Corpuses/DeleteCorpusStoreHandler.cs @@ -0,0 +1,48 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.Core.Search; +using Rsdo.Concordancer.ServiceModel.Requests.Corpuses; +using Rsdo.Concordancer.ServiceModel.Shared; +using Rsdo.Concordancer.Services.Framework.DatabaseManager; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.RequestHandlers.Corpuses; + +public class DeleteCorpusStoreHandler : IRequestHandler +{ + private readonly IDatabaseManager databaseManager; + private readonly MasterDbContext dbContext; + private readonly ISearchEngine searchEngine; + + public DeleteCorpusStoreHandler(IDatabaseManager databaseManager, MasterDbContext dbContext, ISearchEngine searchEngine) + { + this.databaseManager = databaseManager; + this.dbContext = dbContext; + this.searchEngine = searchEngine; + } + + public async Task Handle(DeleteCorpusStore request, CancellationToken cancellationToken) + { + // Get corpus + var corpus = await dbContext.Corpus.SingleAsync(x => x.Id == request.CorpusId, cancellationToken); + + // Create database for corpus + var deleteDbTask = databaseManager.DeleteCorpusDatabase(); + + // Create elastic indexes + var deleteSchemaTask = searchEngine.DeleteSchema(); + + // Wait to finish + await Task.WhenAll(deleteDbTask, deleteSchemaTask); + + // Remove corpus + dbContext.Corpus.Remove(corpus); + await dbContext.SaveChangesAsync(cancellationToken); + + // Return result + return new ExecutionResult(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/Corpuses/GetCorpusHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Corpuses/GetCorpusHandler.cs new file mode 100644 index 0000000..45ea622 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Corpuses/GetCorpusHandler.cs @@ -0,0 +1,32 @@ +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.Corpuses; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.RequestHandlers.Corpuses; + +public class GetCorpusHandler : IRequestHandler +{ + private readonly MasterDbContext dbContext; + + public GetCorpusHandler(MasterDbContext dbContext) + { + this.dbContext = dbContext; + } + + public async Task Handle(GetCorpus request, CancellationToken cancellationToken) + { + // Get corpus + var corpus = await dbContext.Corpus.SingleAsync(x => x.Id == request.CorpusId, cancellationToken); + + return new GetCorpusResponse() + { + Description = corpus.Description, + Id = corpus.Id, + Status = corpus.Status, + Title = corpus.Title, + }; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/Corpuses/GetCorpusStatisticsHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Corpuses/GetCorpusStatisticsHandler.cs new file mode 100644 index 0000000..293114c --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Corpuses/GetCorpusStatisticsHandler.cs @@ -0,0 +1,33 @@ +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.Corpuses; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.RequestHandlers.Corpuses; + +public class GetCorpusStatisticsHandler : IRequestHandler +{ + private readonly CorpusDbContext dbContext; + + public GetCorpusStatisticsHandler(CorpusDbContext dbContext) + { + this.dbContext = dbContext; + } + + public async Task Handle(GetCorpusStatistics request, CancellationToken cancellationToken) + { + var texts = await dbContext.Text.CountAsync(cancellationToken); + var sentences = await dbContext.Sentence.CountAsync(cancellationToken); + var words = await dbContext.Token.CountAsync(t => t.Type == TokenType.Word, cancellationToken); + + return new GetCorpusStatisticsResponse() + { + Texts = texts, + Sentences = sentences, + Words = words, + }; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/Sloleks/ImportSloleksHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Sloleks/ImportSloleksHandler.cs new file mode 100644 index 0000000..d13ef3e --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Sloleks/ImportSloleksHandler.cs @@ -0,0 +1,119 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using System.Xml; +using System.Xml.Linq; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.Core.Extensions; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.Sloleks; +using Rsdo.Concordancer.ServiceModel.Shared; +using Rsdo.Concordancer.Services.Framework.BulkLoaders; + +namespace Rsdo.Concordancer.Services.RequestHandlers.Sloleks; + +public class ImportSloleksHandler : IRequestHandler +{ + private readonly IBulkLoader bulkLoader; + + public ImportSloleksHandler(IBulkLoader bulkLoader) + { + this.bulkLoader = bulkLoader; + } + + public async Task Handle(ImportSloleks request, CancellationToken cancellationToken) + { + var sourceFile = request.SourceFile; + if (!File.Exists(sourceFile)) + { + throw new FileNotFoundException($"File {sourceFile} not found!", sourceFile); + } + + var items = Import(sourceFile); + await SaveData(items, cancellationToken); + return new ExecutionResult(); + } + + private static string GetFeature(XElement element, string featName) + { + return element?.Elements("feat").SingleOrDefault(e => e.Attribute("att")?.Value == featName)?.Attribute("val")?.Value; + } + + private static Dictionary> Import(string sourceFile) + { + var items = new Dictionary>(StringComparer.Ordinal); + using var stream = new FileStream(sourceFile, FileMode.Open, FileAccess.Read); + using var xmlReader = XmlReader.Create(stream); + while (xmlReader.Read()) + { + if (xmlReader.NodeType != XmlNodeType.Element || xmlReader.LocalName != "LexicalEntry") + { + continue; + } + + using var entryReader = xmlReader.ReadSubtree(); + ImportEntry(entryReader, items); + } + + return items; + } + + private static void ImportEntry(XmlReader entryReader, Dictionary> items) + { + var entryEl = XElement.Load(entryReader); + + // Skip if multiword + var partOfSpeech = GetFeature(entryEl, "besedna_vrsta"); + if (!string.IsNullOrEmpty(partOfSpeech) && partOfSpeech == "večbesedna_enota") + { + return; + } + + // Get lemma + var lemmaEl = entryEl.Element("Lemma"); + var lemma = GetFeature(lemmaEl, "zapis_oblike"); + + // Add lemma to items + if (!items.ContainsKey(lemma)) + { + items.Add(lemma, new HashSet(StringComparer.Ordinal)); + } + + // Get forms + foreach (var wordFormEl in entryEl.Elements("WordForm")) + { + foreach (var representationEl in wordFormEl.Elements("FormRepresentation")) + { + var form = GetFeature(representationEl, "zapis_oblike"); + if (string.IsNullOrEmpty(form)) + { + continue; + } + + if (!items[lemma].Contains(form)) + { + items[lemma].Add(form); + } + } + } + } + + private async Task SaveData(Dictionary> items, CancellationToken cancellationToken) + { + var pairs = from lemma in items.Keys + from form in items[lemma] + select new LemmaFormPair() + { + Lemma = lemma, + Form = form, + }.ApplyCreateValues(); + + foreach (var batch in pairs.Chunk(50000)) + { + await bulkLoader.InsertEntities(batch.ToList(), cancellationToken); + } + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/BaseSearchTermListHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/BaseSearchTermListHandler.cs new file mode 100644 index 0000000..c80ec5f --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/BaseSearchTermListHandler.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.ServiceModel.Requests.TermLists; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.RequestHandlers.TermLists; + +public abstract class BaseSearchTermListHandler +{ + private readonly CorpusDbContext dbContext; + + protected BaseSearchTermListHandler(CorpusDbContext dbContext) + { + this.dbContext = dbContext; + } + + protected async Task> GetItems(List entityIds) + { + var ids = entityIds.Select(Guid.Parse).ToList(); + var terms = await dbContext.Term.Where(t => ids.Contains(t.Id)).ToListAsync(); + + return (from entityId in entityIds + let termId = Guid.Parse(entityId) + join term in terms on termId equals term.Id + select new SearchTermListResponseItem() + { + Form = term.Form, + Frequency = term.Frequency, + Lemma = term.Lemma, + Weight = term.Weight, + }).ToList(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/CreateTermListHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/CreateTermListHandler.cs new file mode 100644 index 0000000..cdd953e --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/CreateTermListHandler.cs @@ -0,0 +1,47 @@ +using System.Threading; +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.Core.Extensions; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.TermLists; +using Rsdo.Concordancer.ServiceModel.Shared; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.RequestHandlers.TermLists; + +public class CreateTermListHandler : IRequestHandler +{ + private readonly CorpusDbContext dbContext; + private readonly IServiceBus serviceBus; + + public CreateTermListHandler(CorpusDbContext dbContext, IServiceBus serviceBus) + { + this.dbContext = dbContext; + this.serviceBus = serviceBus; + } + + public async Task Handle(CreateTermList request, CancellationToken cancellationToken) + { + // Create new term list + var termList = new TermList() + { + SourceFile = request.SourceFile, + Status = ImportStatus.Waiting, + }.ApplyCreateValues(); + + await dbContext.TermList.AddAsync(termList, cancellationToken); + await dbContext.SaveChangesAsync(cancellationToken); + + // Send job to import term list + await serviceBus.Send( + new ImportTermList() + { + CorpusId = request.CorpusId, + TermListId = termList.Id, + }); + + // Return result + return new ExecutionResult().WithEntityInfo(EntityType.TermList, termList.Id); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/CreateTermListValidator.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/CreateTermListValidator.cs new file mode 100644 index 0000000..7346d6d --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/CreateTermListValidator.cs @@ -0,0 +1,12 @@ +using FluentValidation; +using Rsdo.Concordancer.ServiceModel.Requests.TermLists; + +namespace Rsdo.Concordancer.Services.RequestHandlers.TermLists; + +public class CreateTermListValidator : AbstractValidator +{ + public CreateTermListValidator() + { + RuleFor(x => x.SourceFile).NotEmpty(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/DeleteTermListFromIndexHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/DeleteTermListFromIndexHandler.cs new file mode 100644 index 0000000..d4177c0 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/DeleteTermListFromIndexHandler.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.Core.Exceptions; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.Core.Search; +using Rsdo.Concordancer.ServiceModel.Requests.TermLists; +using Rsdo.Concordancer.ServiceModel.Shared; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.RequestHandlers.TermLists; + +public class DeleteTermListFromIndexHandler : IRequestHandler +{ + private readonly CorpusDbContext dbContext; + private readonly ISearchEngine searchEngine; + private readonly IServiceBus serviceBus; + + public DeleteTermListFromIndexHandler(CorpusDbContext dbContext, ISearchEngine searchEngine, IServiceBus serviceBus) + { + this.dbContext = dbContext; + this.searchEngine = searchEngine; + this.serviceBus = serviceBus; + } + + public async Task Handle(DeleteTermListFromIndex request, CancellationToken cancellationToken) + { + // Get term list + var termList = await dbContext.TermList.SingleOrDefaultAsync(t => t.Id == request.TermListId, cancellationToken); + if (termList == null) + { + throw new XNotFoundException(Errors.NotFound.EntityNotFound(EntityType.TermList, request.TermListId)); + } + + // Loop through terms in batches and delete terms from index + int skip = 0; + List entityIds; + while ((entityIds = await dbContext.Term.Where(t => t.TermListAutoId == termList.AutoId) + .OrderBy(t => t.AutoId) + .Skip(skip) + .Take(1000) + .Select(t => t.Id) + .ToListAsync(cancellationToken)).Any()) + { + await searchEngine.Delete(entityIds); + skip += entityIds.Count; + } + + // Commit changes in index + await searchEngine.Commit(); + + // Send job to delete term list from store + await serviceBus.Send( + new DeleteTermListFromStore() + { + CorpusId = request.CorpusId, + TermListId = termList.Id, + }); + + return new ExecutionResult(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/DeleteTermListFromStoreHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/DeleteTermListFromStoreHandler.cs new file mode 100644 index 0000000..1940948 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/DeleteTermListFromStoreHandler.cs @@ -0,0 +1,39 @@ +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.Core.Exceptions; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.TermLists; +using Rsdo.Concordancer.ServiceModel.Shared; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.RequestHandlers.TermLists; + +public class DeleteTermListFromStoreHandler : IRequestHandler +{ + private readonly CorpusDbContext dbContext; + + public DeleteTermListFromStoreHandler(CorpusDbContext dbContext) + { + this.dbContext = dbContext; + } + + public async Task Handle(DeleteTermListFromStore request, CancellationToken cancellationToken) + { + // Get term list + var termList = await dbContext.TermList.SingleOrDefaultAsync(t => t.Id == request.TermListId, cancellationToken); + if (termList == null) + { + throw new XNotFoundException(Errors.NotFound.EntityNotFound(EntityType.TermList, request.TermListId)); + } + + // Delete term list and all depending objects + dbContext.TermList.Remove(termList); + + // Save changes to database + await dbContext.SaveChangesAsync(cancellationToken); + + return new ExecutionResult(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/DeleteTermListHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/DeleteTermListHandler.cs new file mode 100644 index 0000000..baf380c --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/DeleteTermListHandler.cs @@ -0,0 +1,47 @@ +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.Core.Exceptions; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.TermLists; +using Rsdo.Concordancer.ServiceModel.Shared; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.RequestHandlers.TermLists; + +public class DeleteTermListHandler : IRequestHandler +{ + private readonly CorpusDbContext dbContext; + private readonly IServiceBus serviceBus; + + public DeleteTermListHandler(CorpusDbContext dbContext, IServiceBus serviceBus) + { + this.dbContext = dbContext; + this.serviceBus = serviceBus; + } + + public async Task Handle(DeleteTermList request, CancellationToken cancellationToken) + { + // Get term list + var termList = await dbContext.TermList.SingleOrDefaultAsync(t => t.Id == request.TermListId, cancellationToken); + if (termList == null) + { + throw new XNotFoundException(Errors.NotFound.EntityNotFound(EntityType.TermList, request.TermListId)); + } + + // Mark term list as deleted + termList.Status = ImportStatus.Deleted; + await dbContext.SaveChangesAsync(cancellationToken); + + // Send job to delete term list from index + await serviceBus.Send( + new DeleteTermListFromIndex() + { + CorpusId = request.CorpusId, + TermListId = termList.Id, + }); + + return new ExecutionResult(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/ExportTermListHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/ExportTermListHandler.cs new file mode 100644 index 0000000..614674d --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/ExportTermListHandler.cs @@ -0,0 +1,81 @@ +using System.IO; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Constants; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.Core.Search; +using Rsdo.Concordancer.Core.Search.Queries.TermLists; +using Rsdo.Concordancer.ServiceModel.Requests.TermLists; +using Rsdo.Concordancer.Services.Framework.DbContext; +using Rsdo.Concordancer.Services.Search.QueryFactories; + +namespace Rsdo.Concordancer.Services.RequestHandlers.TermLists; + +public class ExportTermListHandler : BaseSearchTermListHandler, IRequestHandler +{ + private readonly IQueryFactory queryFactory; + private readonly ISearchEngine searchEngine; + + public ExportTermListHandler(CorpusDbContext dbContext, IQueryFactory queryFactory, ISearchEngine searchEngine) + : base(dbContext) + { + this.queryFactory = queryFactory; + this.searchEngine = searchEngine; + } + + public async Task Handle(ExportTermList request, CancellationToken cancellationToken) + { + // Convert request to search query + var query = await queryFactory.GetQuery(request); + + // Execute search + var result = await searchEngine.Search(query); + + // Get search items + var items = await GetItems(result.EntityIds); + + // Export + var stream = new MemoryStream(); + await using (var writer = new StreamWriter(stream, Encoding.UTF8, 1024, true)) + { + // Writer header + await WriteHeader(writer); + + // Write items + foreach (var item in items) + { + await WriteItem(writer, item); + } + } + + stream.Position = 0; + return new ExportTermListResponse() + { + ContentType = Constants.Export.DefaultContentType, + FileName = "export.txt", + Stream = stream, + }; + } + + private static async Task WriteHeader(StreamWriter writer) + { + await writer.WriteAsync("Termin"); + await writer.WriteAsync("\t"); + await writer.WriteAsync("Osnovna oblika"); + await writer.WriteAsync("\t"); + await writer.WriteAsync("Število pojavitev"); + await writer.WriteLineAsync(); + } + + private static async Task WriteItem(StreamWriter writer, SearchTermListResponseItem item) + { + await writer.WriteAsync(item.Form); + await writer.WriteAsync("\t"); + await writer.WriteAsync(item.Lemma); + await writer.WriteAsync("\t"); + await writer.WriteAsync(item.Frequency.ToString()); + await writer.WriteLineAsync(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/GetTermListHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/GetTermListHandler.cs new file mode 100644 index 0000000..84c9217 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/GetTermListHandler.cs @@ -0,0 +1,37 @@ +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.Core.Exceptions; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.TermLists; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.RequestHandlers.TermLists; + +public class GetTermListHandler : IRequestHandler +{ + private readonly CorpusDbContext dbContext; + + public GetTermListHandler(CorpusDbContext dbContext) + { + this.dbContext = dbContext; + } + + public async Task Handle(GetTermList request, CancellationToken cancellationToken) + { + // Get term list + var termList = await dbContext.TermList.SingleOrDefaultAsync(t => t.Id == request.TermListId, cancellationToken); + if (termList == null) + { + throw new XNotFoundException(Errors.NotFound.EntityNotFound(EntityType.TermList, request.TermListId)); + } + + return new GetTermListResponse() + { + Id = termList.Id, + SourceFile = termList.SourceFile, + Status = termList.Status, + }; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/ImportTermListHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/ImportTermListHandler.cs new file mode 100644 index 0000000..3de6cac --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/ImportTermListHandler.cs @@ -0,0 +1,139 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.Core.Exceptions; +using Rsdo.Concordancer.Core.Extensions; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.TermLists; +using Rsdo.Concordancer.ServiceModel.Shared; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Framework.BulkLoaders; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.RequestHandlers.TermLists; + +public class ImportTermListHandler : IRequestHandler +{ + private readonly IBulkLoader bulkLoader; + private readonly CorpusDbContext dbContext; + private readonly IServiceBus serviceBus; + + public ImportTermListHandler(IBulkLoader bulkLoader, CorpusDbContext dbContext, IServiceBus serviceBus) + { + this.bulkLoader = bulkLoader; + this.dbContext = dbContext; + this.serviceBus = serviceBus; + } + + public async Task Handle(ImportTermList request, CancellationToken cancellationToken) + { + // Get term list + // Dont track term list since the data is imported with bulk loading and that would cause duplicate entities to be inserted + var termList = await dbContext.TermList.AsNoTracking().SingleOrDefaultAsync(t => t.Id == request.TermListId, cancellationToken); + if (termList == null) + { + throw new XNotFoundException(Errors.NotFound.EntityNotFound(EntityType.TermList, request.TermListId)); + } + + // Check if file exists + if (!File.Exists(termList.SourceFile)) + { + throw new FileNotFoundException(Errors.NotFound.FileNotFound(termList.SourceFile), termList.SourceFile); + } + + try + { + // Change status to importing + await ChangeStatus(termList, ImportStatus.Importing, cancellationToken); + + // Import term list + await ImportTermList(termList, cancellationToken); + + // Bulk load data into database + await SaveTermListWithBulkLoading(termList, cancellationToken); + + // Send job to index term list + await serviceBus.Send( + new IndexTermList() + { + CorpusId = request.CorpusId, + TermListId = termList.Id, + }); + + // Change status to importing completed + await ChangeStatus(termList, ImportStatus.ImportingCompleted, cancellationToken); + + return new ExecutionResult(); + } + catch (Exception) + { + await ChangeStatus(termList, ImportStatus.ImportingFaulted, cancellationToken); + throw; + } + } + + private static async Task ImportTermList(TermList termList, CancellationToken cancellationToken) + { + var lastPropertyName = string.Empty; + var inTerms = false; + + await using var stream = new FileStream(termList.SourceFile, FileMode.Open, FileAccess.Read); + using var streamReader = new StreamReader(stream); + using var jsonReader = new JsonTextReader(streamReader); + while (await jsonReader.ReadAsync(cancellationToken)) + { + switch (jsonReader.TokenType) + { + case JsonToken.PropertyName: + lastPropertyName = jsonReader.Value.ToString(); + break; + case JsonToken.StartArray when lastPropertyName == "terminoloski_kandidati": + inTerms = true; + break; + case JsonToken.EndArray when inTerms: + inTerms = false; + break; + case JsonToken.StartObject when inTerms: + { + var termObj = await JObject.LoadAsync(jsonReader, cancellationToken); + var term = new Term() + { + Form = termObj["kanonicnaoblika"].Value(), + Lemma = termObj["kandidat"].Value(), + Msd = termObj["POSoznake"].Value(), + Weight = termObj["ranking"].Value(), + Frequency = termObj["pogostostpojavljanja"].Value(), + TermListAutoId = termList.AutoId, + }.ApplyCreateValues(); + + termList.Terms ??= new List(); + termList.Terms.Add(term); + break; + } + } + } + } + + private async Task SaveTermListWithBulkLoading(TermList termList, CancellationToken cancellationToken) + { + if (termList.Terms.IsNullOrEmpty()) + { + return; + } + + await bulkLoader.InsertEntities(termList.Terms, false, cancellationToken); + } + + private async Task ChangeStatus(TermList termList, ImportStatus newStatus, CancellationToken cancellationToken) + { + termList.Status = newStatus; + await dbContext.SaveChangesAsync(cancellationToken); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/IndexTermListHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/IndexTermListHandler.cs new file mode 100644 index 0000000..26c279f --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/IndexTermListHandler.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.Core.Exceptions; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.Core.Search; +using Rsdo.Concordancer.ServiceModel.Requests.TermLists; +using Rsdo.Concordancer.ServiceModel.Shared; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.RequestHandlers.TermLists; + +public class IndexTermListHandler : IRequestHandler +{ + private readonly CorpusDbContext dbContext; + private readonly ISearchEngine searchEngine; + + public IndexTermListHandler(CorpusDbContext dbContext, ISearchEngine searchEngine) + { + this.dbContext = dbContext; + this.searchEngine = searchEngine; + } + + public async Task Handle(IndexTermList request, CancellationToken cancellationToken) + { + // Get term list + var termList = await dbContext.TermList.SingleOrDefaultAsync(t => t.Id == request.TermListId, cancellationToken); + if (termList == null) + { + throw new XNotFoundException(Errors.NotFound.EntityNotFound(EntityType.TermList, request.TermListId)); + } + + try + { + // Change status to indexing + await ChangeStatus(termList, ImportStatus.Indexing, cancellationToken); + + // Index term list + await IndexTermList(termList, cancellationToken); + + // Change status to indexing completed and active + await ChangeStatus(termList, ImportStatus.IndexingCompleted, cancellationToken); + await ChangeStatus(termList, ImportStatus.Active, cancellationToken); + + return new ExecutionResult(); + } + catch (Exception) + { + await ChangeStatus(termList, ImportStatus.IndexingFaulted, cancellationToken); + throw; + } + } + + private async Task IndexTermList(TermList termList, CancellationToken cancellationToken) + { + // Loop through terms + List terms; + var lastAutoId = 0L; + while ((terms = await GetNextTerms(termList, lastAutoId, cancellationToken)).Any()) + { + // Index terms + await searchEngine.Add(terms); + + lastAutoId = terms.Max(t => t.AutoId); + } + + // Commit indexed terms + await searchEngine.Commit(); + } + + private async Task> GetNextTerms(TermList termList, long lastAutoId, CancellationToken cancellationToken) + { + return await dbContext.Term.Where(t => t.TermListAutoId == termList.AutoId && t.AutoId > lastAutoId) + .OrderBy(t => t.AutoId) + .Take(500) + .ToListAsync(cancellationToken); + } + + private async Task ChangeStatus(TermList termList, ImportStatus newStatus, CancellationToken cancellationToken) + { + termList.Status = newStatus; + await dbContext.SaveChangesAsync(cancellationToken); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/SearchTermListHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/SearchTermListHandler.cs new file mode 100644 index 0000000..b16bfe2 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/TermLists/SearchTermListHandler.cs @@ -0,0 +1,40 @@ +using System.Threading; +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.Core.Search; +using Rsdo.Concordancer.Core.Search.Queries.TermLists; +using Rsdo.Concordancer.ServiceModel.Requests.TermLists; +using Rsdo.Concordancer.Services.Framework.DbContext; +using Rsdo.Concordancer.Services.Search.QueryFactories; + +namespace Rsdo.Concordancer.Services.RequestHandlers.TermLists; + +public class SearchTermListHandler : BaseSearchTermListHandler, IRequestHandler +{ + private readonly IQueryFactory queryFactory; + private readonly ISearchEngine searchEngine; + + public SearchTermListHandler(CorpusDbContext dbContext, IQueryFactory queryFactory, ISearchEngine searchEngine) + : base(dbContext) + { + this.queryFactory = queryFactory; + this.searchEngine = searchEngine; + } + + public async Task Handle(SearchTermList request, CancellationToken cancellationToken) + { + // Convert request to search query + var query = await queryFactory.GetQuery(request); + + // Execute search + var result = await searchEngine.Search(query); + + return new SearchTermListResponse() + { + Items = await GetItems(result.EntityIds), + Offset = request.From, + Total = result.Total, + }; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/CreateTextHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/CreateTextHandler.cs new file mode 100644 index 0000000..ed2c0e4 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/CreateTextHandler.cs @@ -0,0 +1,50 @@ +using System.Threading; +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.Core.Extensions; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.Texts; +using Rsdo.Concordancer.ServiceModel.Shared; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.RequestHandlers.Texts; + +public class CreateTextHandler : IRequestHandler +{ + private readonly CorpusDbContext dbContext; + private readonly IServiceBus serviceBus; + + public CreateTextHandler(CorpusDbContext dbContext, IServiceBus serviceBus) + { + this.dbContext = dbContext; + this.serviceBus = serviceBus; + } + + public async Task Handle(CreateText request, CancellationToken cancellationToken) + { + // Create new text + var text = new Text() + { + Author = request.Author, + SourceFile = request.SourceFile, + Status = ImportStatus.Waiting, + Title = request.Title, + Year = request.Year, + }.ApplyCreateValues(); + + await dbContext.Text.AddAsync(text, cancellationToken); + await dbContext.SaveChangesAsync(cancellationToken); + + // Send job to import text + await serviceBus.Send( + new ImportText() + { + CorpusId = request.CorpusId, + TextId = text.Id, + }); + + // Return result + return new ExecutionResult().WithEntityInfo(EntityType.Text, text.Id); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/CreateTextValidator.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/CreateTextValidator.cs new file mode 100644 index 0000000..4e4487a --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/CreateTextValidator.cs @@ -0,0 +1,12 @@ +using FluentValidation; +using Rsdo.Concordancer.ServiceModel.Requests.Texts; + +namespace Rsdo.Concordancer.Services.RequestHandlers.Texts; + +public class CreateTextValidator : AbstractValidator +{ + public CreateTextValidator() + { + RuleFor(x => x.SourceFile).NotEmpty(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/DeleteTextFromIndexHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/DeleteTextFromIndexHandler.cs new file mode 100644 index 0000000..76af29a --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/DeleteTextFromIndexHandler.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.Core.Exceptions; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.Core.Model; +using Rsdo.Concordancer.Core.Search; +using Rsdo.Concordancer.ServiceModel.Requests.Texts; +using Rsdo.Concordancer.ServiceModel.Shared; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.RequestHandlers.Texts; + +public class DeleteTextFromIndexHandler : IRequestHandler +{ + private readonly CorpusDbContext dbContext; + private readonly ISearchEngine searchEngine; + private readonly IServiceBus serviceBus; + + public DeleteTextFromIndexHandler(CorpusDbContext dbContext, ISearchEngine searchEngine, IServiceBus serviceBus) + { + this.dbContext = dbContext; + this.searchEngine = searchEngine; + this.serviceBus = serviceBus; + } + + public async Task Handle(DeleteTextFromIndex request, CancellationToken cancellationToken) + { + // Get text + var text = await dbContext.Text.SingleOrDefaultAsync(t => t.Id == request.TextId, cancellationToken); + if (text == null) + { + throw new XNotFoundException(Errors.NotFound.EntityNotFound(EntityType.Text, request.TextId)); + } + + // Loop through tokens in batches and delete concordances from index + int skip = 0; + List entityIds; + while ((entityIds = await dbContext.Token.Include(t => t.Sentence) + .ThenInclude(t => t.Paragraph) + .Where(t => t.Sentence.Paragraph.TextAutoId == text.AutoId && t.Type != TokenType.Character) + .OrderBy(t => t.AutoId) + .Skip(skip) + .Take(1000) + .Select(t => t.Id) + .ToListAsync(cancellationToken)).Any()) + { + await searchEngine.Delete(entityIds); + skip += entityIds.Count; + } + + // Commit changes in index + await searchEngine.Commit(); + + // Send job to delete text from store + await serviceBus.Send( + new DeleteTextFromStore() + { + CorpusId = request.CorpusId, + TextId = text.Id, + }); + + return new ExecutionResult(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/DeleteTextFromStoreHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/DeleteTextFromStoreHandler.cs new file mode 100644 index 0000000..f3ea277 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/DeleteTextFromStoreHandler.cs @@ -0,0 +1,39 @@ +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.Core.Exceptions; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.Texts; +using Rsdo.Concordancer.ServiceModel.Shared; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.RequestHandlers.Texts; + +public class DeleteTextFromStoreHandler : IRequestHandler +{ + private readonly CorpusDbContext dbContext; + + public DeleteTextFromStoreHandler(CorpusDbContext dbContext) + { + this.dbContext = dbContext; + } + + public async Task Handle(DeleteTextFromStore request, CancellationToken cancellationToken) + { + // Get text + var text = await dbContext.Text.SingleOrDefaultAsync(t => t.Id == request.TextId, cancellationToken); + if (text == null) + { + throw new XNotFoundException(Errors.NotFound.EntityNotFound(EntityType.Text, request.TextId)); + } + + // Delete text and all depending objects + dbContext.Text.Remove(text); + + // Save changes to database + await dbContext.SaveChangesAsync(cancellationToken); + + return new ExecutionResult(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/DeleteTextHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/DeleteTextHandler.cs new file mode 100644 index 0000000..f0195b3 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/DeleteTextHandler.cs @@ -0,0 +1,47 @@ +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.Core.Exceptions; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.Texts; +using Rsdo.Concordancer.ServiceModel.Shared; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.RequestHandlers.Texts; + +public class DeleteTextHandler : IRequestHandler +{ + private readonly CorpusDbContext dbContext; + private readonly IServiceBus serviceBus; + + public DeleteTextHandler(CorpusDbContext dbContext, IServiceBus serviceBus) + { + this.dbContext = dbContext; + this.serviceBus = serviceBus; + } + + public async Task Handle(DeleteText request, CancellationToken cancellationToken) + { + // Get text + var text = await dbContext.Text.SingleOrDefaultAsync(t => t.Id == request.TextId, cancellationToken); + if (text == null) + { + throw new XNotFoundException(Errors.NotFound.EntityNotFound(EntityType.Text, request.TextId)); + } + + // Mark text as deleted + text.Status = ImportStatus.Deleted; + await dbContext.SaveChangesAsync(cancellationToken); + + // Send job to delete text from index + await serviceBus.Send( + new DeleteTextFromIndex() + { + CorpusId = request.CorpusId, + TextId = text.Id, + }); + + return new ExecutionResult(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/GetTextHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/GetTextHandler.cs new file mode 100644 index 0000000..0ac7440 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/GetTextHandler.cs @@ -0,0 +1,40 @@ +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.Core.Exceptions; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.Texts; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.RequestHandlers.Texts; + +public class GetTextHandler : IRequestHandler +{ + private readonly CorpusDbContext dbContext; + + public GetTextHandler(CorpusDbContext dbContext) + { + this.dbContext = dbContext; + } + + public async Task Handle(GetText request, CancellationToken cancellationToken) + { + // Get text + var text = await dbContext.Text.SingleOrDefaultAsync(t => t.Id == request.TextId, cancellationToken); + if (text == null) + { + throw new XNotFoundException(Errors.NotFound.EntityNotFound(EntityType.Text, request.TextId)); + } + + return new GetTextResponse() + { + Author = text.Author, + Id = text.Id, + SourceFile = text.SourceFile, + Status = text.Status, + Title = text.Title, + Year = text.Year, + }; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/ImportTextHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/ImportTextHandler.cs new file mode 100644 index 0000000..e0965ed --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/ImportTextHandler.cs @@ -0,0 +1,175 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.Core.Exceptions; +using Rsdo.Concordancer.Core.Extensions; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.ServiceModel.Requests.Texts; +using Rsdo.Concordancer.ServiceModel.Shared; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Framework.BulkLoaders; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.RequestHandlers.Texts; + +public class ImportTextHandler : IRequestHandler +{ + private readonly CorpusDbContext dbContext; + private readonly IBulkLoader bulkLoader; + private readonly IServiceBus serviceBus; + + public ImportTextHandler(CorpusDbContext dbContext, IBulkLoader bulkLoader, IServiceBus serviceBus) + { + this.dbContext = dbContext; + this.bulkLoader = bulkLoader; + this.serviceBus = serviceBus; + } + + public async Task Handle(ImportText request, CancellationToken cancellationToken) + { + // Get text + // Dont track text since the data is imported with bulk loading and that would cause duplicate entities to be inserted + var text = await dbContext.Text.AsNoTracking().SingleOrDefaultAsync(t => t.Id == request.TextId, cancellationToken); + if (text == null) + { + throw new XNotFoundException(Errors.NotFound.EntityNotFound(EntityType.Text, request.TextId)); + } + + // Check if file exists + if (!File.Exists(text.SourceFile)) + { + throw new FileNotFoundException(Errors.NotFound.FileNotFound(text.SourceFile), text.SourceFile); + } + + try + { + // Change status to importing + await ChangeStatus(text, ImportStatus.Importing, cancellationToken); + + // Import text + await ImportText(text); + + // Bulk load data into database + await SaveTextWithBulkLoading(text, cancellationToken); + + // Send job to index text + await serviceBus.Send( + new IndexText() + { + CorpusId = request.CorpusId, + TextId = text.Id, + }); + + // Change status to importing completed + await ChangeStatus(text, ImportStatus.ImportingCompleted, cancellationToken); + + return new ExecutionResult(); + } + catch (Exception) + { + await ChangeStatus(text, ImportStatus.ImportingFaulted, cancellationToken); + throw; + } + } + + private static async Task ImportText(Text text) + { + await using var stream = new FileStream(text.SourceFile, FileMode.Open, FileAccess.Read); + using (var streamReader = new StreamReader(stream)) + { + string line; + var paragraphOrder = 0; + var sentenceOrder = 0; + var tokenOrder = 0; + var paragraphTokenOrder = 0; + Paragraph paragraph = null; + Sentence sentence = null; + + while ((line = await streamReader.ReadLineAsync()) != null) + { + if (line.StartsWith("# newpar", StringComparison.OrdinalIgnoreCase)) + { + // New paragraph + paragraph = new Paragraph() + { + RecordOrder = ++paragraphOrder, + TextAutoId = text.AutoId, + }.ApplyCreateValues(); + text.Paragraphs ??= new List(); + text.Paragraphs.Add(paragraph); + + // Reset sentence order and order of tokens in paragraph + sentenceOrder = 0; + paragraphTokenOrder = 0; + } + else if (line.StartsWith("# sent", StringComparison.OrdinalIgnoreCase)) + { + // New sentence + sentence = new Sentence() + { + RecordOrder = ++sentenceOrder, + }.ApplyCreateValues(); + paragraph.Sentences ??= new List(); + paragraph.Sentences.Add(sentence); + + // Reset token order + tokenOrder = 0; + } + else if (!line.StartsWith("#") && !string.IsNullOrWhiteSpace(line)) + { + // New token + var data = line.Split('\t'); + var token = new Token() + { + RecordOrder = ++tokenOrder, + TokenOrder = ++paragraphTokenOrder, + Form = data[1], + Lemma = data[2], + Type = data[3].Equals("PUNCT", StringComparison.OrdinalIgnoreCase) ? TokenType.PunctuationCharacter : TokenType.Word, + Msd = data[4], + }.ApplyCreateValues(); + sentence.Tokens ??= new List(); + sentence.Tokens.Add(token); + + // Check if there should be a space after token + if (!data[9].Contains("SpaceAfter=No", StringComparison.OrdinalIgnoreCase)) + { + token = new Token() + { + RecordOrder = ++tokenOrder, + TokenOrder = ++paragraphTokenOrder, + Form = " ", + Type = TokenType.Character, + }.ApplyCreateValues(); + sentence.Tokens.Add(token); + } + } + } + } + } + + private async Task SaveTextWithBulkLoading(Text text, CancellationToken cancellationToken) + { + var paragraphs = text.Paragraphs; + await bulkLoader.InsertEntities(paragraphs, cancellationToken); + paragraphs.ForEach(p => p.Sentences.ForEach(s => s.ParagraphAutoId = p.AutoId)); + + var sentences = paragraphs.SelectMany(p => p.Sentences).ToList(); + await bulkLoader.InsertEntities(sentences, cancellationToken); + sentences.ForEach(s => s.Tokens.ForEach(t => t.SentenceAutoId = s.AutoId)); + + var tokens = sentences.SelectMany(s => s.Tokens).ToList(); + await bulkLoader.InsertEntities(tokens, false, cancellationToken); + } + + private async Task ChangeStatus(Text text, ImportStatus newStatus, CancellationToken cancellationToken) + { + text.Status = newStatus; + await dbContext.SaveChangesAsync(cancellationToken); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/IndexTextHandler.cs b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/IndexTextHandler.cs new file mode 100644 index 0000000..008ff82 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/RequestHandlers/Texts/IndexTextHandler.cs @@ -0,0 +1,136 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.Core.Exceptions; +using Rsdo.Concordancer.Core.Extensions; +using Rsdo.Concordancer.Core.Interfaces; +using Rsdo.Concordancer.Core.Model; +using Rsdo.Concordancer.Core.Search; +using Rsdo.Concordancer.ServiceModel.Requests.Texts; +using Rsdo.Concordancer.ServiceModel.Shared; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.RequestHandlers.Texts; + +public class IndexTextHandler : IRequestHandler +{ + private readonly CorpusDbContext dbContext; + private readonly ISearchEngine searchEngine; + + public IndexTextHandler(CorpusDbContext dbContext, ISearchEngine searchEngine) + { + this.dbContext = dbContext; + this.searchEngine = searchEngine; + } + + public async Task Handle(IndexText request, CancellationToken cancellationToken) + { + // Get text + var text = await dbContext.Text.SingleOrDefaultAsync(t => t.Id == request.TextId, cancellationToken); + if (text == null) + { + throw new XNotFoundException(Errors.NotFound.EntityNotFound(EntityType.Text, request.TextId)); + } + + try + { + // Change status to indexing + await ChangeStatus(text, ImportStatus.Indexing, cancellationToken); + + // Index text + await IndexText(text, cancellationToken); + + // Change status to indexing completed and active + await ChangeStatus(text, ImportStatus.IndexingCompleted, cancellationToken); + await ChangeStatus(text, ImportStatus.Active, cancellationToken); + + return new ExecutionResult(); + } + catch (Exception) + { + await ChangeStatus(text, ImportStatus.IndexingFaulted, cancellationToken); + throw; + } + } + + public async Task IndexText(Text text, CancellationToken cancellationToken) + { + // Get paragraphs + var paragraphs = await dbContext.Paragraph.Where(p => p.TextAutoId == text.AutoId).OrderBy(p => p.RecordOrder).ToListAsync(cancellationToken); + + // Index each paragraph individually + foreach (var paragraph in paragraphs) + { + await IndexParagraph(text, paragraph, cancellationToken); + } + + // Commit indexed concordances + await searchEngine.Commit(); + } + + public async Task IndexParagraph(Text text, Paragraph paragraph, CancellationToken cancellationToken) + { + // Get tokens (skip spaces) + var tokens = await dbContext.Token.Include(t => t.Sentence) + .Where(t => t.Sentence.ParagraphAutoId == paragraph.AutoId && t.Type != TokenType.Character) + .OrderBy(t => t.TokenOrder) + .ToListAsync(cancellationToken); + + // Get concordances + var concordances = GetConcordances(text, paragraph, tokens); + + // Add concordances to search engine + await searchEngine.Add(concordances); + } + + private static List GetConcordances(Text text, Paragraph paragraph, List tokens) + { + // Get window size (max 10) + var windowSize = Math.Min(tokens.Count - 1, 10); + + // Create list of tokens with positions + var tokensIdx = tokens.Select((t, i) => new KeyValuePair(i, t)).ToList(); + + // Get tokens which will appear in current concordance + List> concordanceTokens; + + var concordances = new List(); + while ((concordanceTokens = tokensIdx.Where(x => x.Key >= -windowSize && x.Key <= windowSize).ToList().OrderBy(x => x.Key).ToList()).Any()) + { + if (concordanceTokens.Last().Key < 0) + { + break; + } + + var concordance = new Concordance() + { + ParagraphId = paragraph.Id, + TextId = text.Id, + }; + + // Loop through tokens and set it in the position + foreach (var concordanceToken in concordanceTokens) + { + concordance.SetToken(concordanceToken.Value, concordanceToken.Key); + } + + concordances.Add(concordance); + + // Decrease indexes of tokens (shift tokens to left, relative to window size) + tokensIdx = tokensIdx.Select(x => new KeyValuePair(x.Key - 1, x.Value)).ToList(); + } + + return concordances; + } + + private async Task ChangeStatus(Text text, ImportStatus newStatus, CancellationToken cancellationToken) + { + text.Status = newStatus; + await dbContext.SaveChangesAsync(cancellationToken); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Rsdo.Concordancer.Services.csproj b/src/core/Rsdo.Concordancer.Services/Rsdo.Concordancer.Services.csproj new file mode 100644 index 0000000..21e8a8b --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Rsdo.Concordancer.Services.csproj @@ -0,0 +1,29 @@ + + + + net6.0 + true + false + 1.0.0 + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/core/Rsdo.Concordancer.Services/Search/Aggregations/AggregationProviderFactory.cs b/src/core/Rsdo.Concordancer.Services/Search/Aggregations/AggregationProviderFactory.cs new file mode 100644 index 0000000..0f343e5 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Search/Aggregations/AggregationProviderFactory.cs @@ -0,0 +1,19 @@ +using Autofac; +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.Services.Search.Aggregations; + +public class AggregationProviderFactory : IAggregationProviderFactory +{ + private readonly ILifetimeScope lifetimeScope; + + public AggregationProviderFactory(ILifetimeScope lifetimeScope) + { + this.lifetimeScope = lifetimeScope; + } + + public IAggregationProvider GetProvider(AggregationType aggregationType) + { + return lifetimeScope.ResolveKeyed(aggregationType); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Search/Aggregations/BaseAggregationProvider.cs b/src/core/Rsdo.Concordancer.Services/Search/Aggregations/BaseAggregationProvider.cs new file mode 100644 index 0000000..db41688 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Search/Aggregations/BaseAggregationProvider.cs @@ -0,0 +1,35 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Search.Aggregations; +using Rsdo.Concordancer.Core.Search.Queries; +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.Services.Search.Aggregations; + +public abstract class BaseAggregationProvider : IAggregationProvider +{ + private readonly IAggregatorFactory aggregatorFactory; + + protected BaseAggregationProvider(IAggregatorFactory aggregatorFactory) + { + this.aggregatorFactory = aggregatorFactory; + } + + public abstract AggregationType Type { get; } + + public async Task Get(TQuery query) + where TQuery : Query + { + // Run aggregator + var aggregator = aggregatorFactory.GetAggregator(Type); + var items = await aggregator.Get(query); + + return new Aggregation() + { + Items = await GetItems(items), + Type = Type, + }; + } + + protected abstract Task> GetItems(IDictionary items); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Search/Aggregations/IAggregationProvider.cs b/src/core/Rsdo.Concordancer.Services/Search/Aggregations/IAggregationProvider.cs new file mode 100644 index 0000000..351cbdf --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Search/Aggregations/IAggregationProvider.cs @@ -0,0 +1,11 @@ +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Search.Queries; +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.Services.Search.Aggregations; + +public interface IAggregationProvider +{ + Task Get(TQuery query) + where TQuery : Query; +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Search/Aggregations/IAggregationProviderFactory.cs b/src/core/Rsdo.Concordancer.Services/Search/Aggregations/IAggregationProviderFactory.cs new file mode 100644 index 0000000..9c44fc4 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Search/Aggregations/IAggregationProviderFactory.cs @@ -0,0 +1,8 @@ +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.Services.Search.Aggregations; + +public interface IAggregationProviderFactory +{ + IAggregationProvider GetProvider(AggregationType aggregationType); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Search/Aggregations/TextAggregationProvider.cs b/src/core/Rsdo.Concordancer.Services/Search/Aggregations/TextAggregationProvider.cs new file mode 100644 index 0000000..76a86b6 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Search/Aggregations/TextAggregationProvider.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.Core.Search.Aggregations; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.Search.Aggregations; + +public class TextAggregationProvider : BaseAggregationProvider +{ + private readonly CorpusDbContext dbContext; + + public TextAggregationProvider(IAggregatorFactory aggregatorFactory, CorpusDbContext dbContext) + : base(aggregatorFactory) + { + this.dbContext = dbContext; + } + + public override AggregationType Type => AggregationType.Text; + + protected override async Task> GetItems(IDictionary items) + { + var ids = items.Select(i => Guid.Parse(i.Key)).ToList(); + var texts = await dbContext.Text.Where(t => ids.Contains(t.Id)).ToListAsync(); + + return (from item in items + let id = Guid.Parse(item.Key) + join text in texts on id equals text.Id + orderby item.Value descending, text.SourceFile + select new AggregationItem + { + Count = item.Value, + Key = text.Id, + Title = text.DisplayFileName, + }).ToList(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Search/AlternateSearches/IAlternateSearchProvider.cs b/src/core/Rsdo.Concordancer.Services/Search/AlternateSearches/IAlternateSearchProvider.cs new file mode 100644 index 0000000..21a1436 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Search/AlternateSearches/IAlternateSearchProvider.cs @@ -0,0 +1,11 @@ +using System.Threading.Tasks; +using Rsdo.Concordancer.ServiceModel.Requests.Shared; +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.Services.Search.AlternateSearches; + +public interface IAlternateSearchProvider + where TRequest : Search +{ + Task> Get(TRequest request); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Search/AlternateSearches/LemmasAlternateSearchProvider.cs b/src/core/Rsdo.Concordancer.Services/Search/AlternateSearches/LemmasAlternateSearchProvider.cs new file mode 100644 index 0000000..d7c401f --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Search/AlternateSearches/LemmasAlternateSearchProvider.cs @@ -0,0 +1,154 @@ +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Extensions; +using Rsdo.Concordancer.Core.Model; +using Rsdo.Concordancer.Core.Search; +using Rsdo.Concordancer.Core.Search.Queries.Concordances; +using Rsdo.Concordancer.ServiceModel.Requests.Concordances; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Search.QueryFactories; +using Rsdo.Concordancer.Services.Services.LemmatizationService; + +namespace Rsdo.Concordancer.Services.Search.AlternateSearches; + +public class LemmasAlternateSearchProvider : IAlternateSearchProvider +{ + private readonly ILemmatizationService lemmatizationService; + private readonly IQueryFactory queryFactory; + private readonly ISearchEngine searchEngine; + + public LemmasAlternateSearchProvider( + ILemmatizationService lemmatizationService, + IQueryFactory queryFactory, + ISearchEngine searchEngine) + { + this.lemmatizationService = lemmatizationService; + this.queryFactory = queryFactory; + this.searchEngine = searchEngine; + } + + public async Task> Get(SearchConcordances request) + { + // Main word + var lemmas = new List> + { + await GetLemmasForWord(request.MainWord), + }; + + // Words in context + if (!request.WordsInContext.IsNullOrEmpty()) + { + foreach (var wordInContext in request.WordsInContext) + { + if (SkipWord(wordInContext)) + { + continue; + } + + lemmas.Add(await GetLemmasForWord(wordInContext)); + } + } + + var products = lemmas.CartesianProduct(); + var alternateSearch = new AlternateSearch() + { + Items = new List>(), + OriginalSearch = GetOriginalSearch(request), + Type = AlternateSearchType.Lemmas, + }; + + foreach (var product in products) + { + var productLemmas = product.ToList(); + var clone = request.Copy(); + + // Main word + clone.MainWord.Lemma = productLemmas[0]; + + // Words in context + if (!clone.WordsInContext.IsNullOrEmpty()) + { + for (var i = 0; i < clone.WordsInContext.Count; i++) + { + var wordInContext = clone.WordsInContext[i]; + if (SkipWord(wordInContext)) + { + continue; + } + + wordInContext.Lemma = productLemmas[i + 1]; + } + } + + // Count results + var count = await GetCount(clone); + if (count > 0) + { + alternateSearch.Items.Add( + new AlternateSearchItem() + { + Count = count, + Search = clone, + Title = GetTitle(clone), + }); + } + } + + return alternateSearch; + } + + private static SearchConcordances GetOriginalSearch(SearchConcordances search) + { + var original = search.Copy(); + original.MainWord.Lemma = null; + if (!original.WordsInContext.IsNullOrEmpty()) + { + foreach (var wordInContext in original.WordsInContext) + { + wordInContext.Lemma = null; + } + } + + return original; + } + + private static string GetTitle(SearchConcordances search) + { + var sb = new StringBuilder(); + sb.Append(search.MainWord.Lemma); + if (!search.WordsInContext.IsNullOrEmpty()) + { + foreach (var wordInContext in search.WordsInContext) + { + sb.Append(' '); + sb.Append(wordInContext.Lemma); + } + } + + return sb.ToString(); + } + + private static bool SkipWord(SearchedWordInContext wordInContext) + { + return wordInContext.ConditionType == ConditionType.IsNot || (string.IsNullOrEmpty(wordInContext.Form) && string.IsNullOrEmpty(wordInContext.Lemma)); + } + + private async Task GetCount(SearchConcordances search) + { + var query = await queryFactory.GetQuery(search); + var results = await searchEngine.Search(query); + return results.Total; + } + + private async Task> GetLemmasForWord(SearchedWord word) + { + if (!string.IsNullOrEmpty(word.Form)) + { + return await lemmatizationService.GetLemmas(word.Form); + } + + return new List(); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/Concordances/BaseConcordancesQueryFactory.cs b/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/Concordances/BaseConcordancesQueryFactory.cs new file mode 100644 index 0000000..02adcfe --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/Concordances/BaseConcordancesQueryFactory.cs @@ -0,0 +1,122 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Extensions; +using Rsdo.Concordancer.Core.Search.Queries.Concordances; +using Rsdo.Concordancer.ServiceModel.Requests.Concordances; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Services.LemmatizationService; + +namespace Rsdo.Concordancer.Services.Search.QueryFactories.Concordances; + +public abstract class BaseConcordancesQueryFactory +{ + private readonly ILemmatizationService lemmatizationService; + + protected BaseConcordancesQueryFactory(ILemmatizationService lemmatizationService) + { + this.lemmatizationService = lemmatizationService; + } + + protected async Task GetQuery(TRequest request) + where TRequest : BaseSearchConcordances + { + // Return query + return new ConcordancesQuery + { + MainWord = await GetMainWordQuery(request.MainWord), + TextIds = request.TextIds, + WordsInContext = await GetWordInContextQueries(request.WordsInContext), + }; + } + + private static List GetPositions(SearchedWordInContext wordInContext) + { + var positions = new List(); + AddPositions(wordInContext.LeftPosition, wordInContext.DistanceType, true); + AddPositions(wordInContext.RightPosition, wordInContext.DistanceType, false); + return positions; + + void AddPositions(int position, DistanceType distanceType, bool negative) + { + if (position == 0) + { + return; + } + + if (distanceType == DistanceType.Position) + { + positions.Add(negative ? -position : position); + } + else + { + for (var i = 1; i <= position; i++) + { + positions.Add(negative ? -i : i); + } + } + } + } + + private async Task GetMainWordQuery(SearchedWord mainWord) + { + return await GetWordQuery(mainWord); + } + + private async Task> GetWordInContextQueries(List wordsInContext) + { + if (wordsInContext.IsNullOrEmpty()) + { + return null; + } + + var wordInContextQueries = new List(); + foreach (var wordInContext in wordsInContext) + { + var wordInContextQuery = await GetWordInContextQuery(wordInContext); + wordInContextQueries.Add(wordInContextQuery); + } + + return wordInContextQueries; + } + + private async Task GetWordInContextQuery(SearchedWordInContext wordInContext) + { + var query = await GetWordQuery(wordInContext); + query.ConditionType = wordInContext.ConditionType; + query.Positions = GetPositions(wordInContext); + return query; + } + + private async Task GetWordQuery(SearchedWord word) + where T : SearchedWordQuery, new() + { + var query = new T(); + + var lemmas = (List)null; + if (!string.IsNullOrEmpty(word.Lemma)) + { + lemmas = new List + { + word.Lemma, + }; + } + + if (!string.IsNullOrEmpty(word.Form)) + { + if (word.FormSearchType == FormSearchType.ExactForm) + { + query.Form = word.Form; + } + else + { + if (lemmas.IsNullOrEmpty()) + { + lemmas = await lemmatizationService.GetLemmas(word.Form); + } + } + } + + query.Lemmas = lemmas; + return query; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/Concordances/ConcordanceDetailsQueryFactory.cs b/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/Concordances/ConcordanceDetailsQueryFactory.cs new file mode 100644 index 0000000..e8c92ea --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/Concordances/ConcordanceDetailsQueryFactory.cs @@ -0,0 +1,22 @@ +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Search.Queries.Concordances; +using Rsdo.Concordancer.ServiceModel.Requests.Concordances; +using Rsdo.Concordancer.Services.Services.LemmatizationService; + +namespace Rsdo.Concordancer.Services.Search.QueryFactories.Concordances; + +public class ConcordanceDetailsQueryFactory : BaseConcordancesQueryFactory, IQueryFactory +{ + public ConcordanceDetailsQueryFactory(ILemmatizationService lemmatizationService) + : base(lemmatizationService) + { + } + + public async Task GetQuery(ConcordanceDetails request) + { + var query = await GetQuery(request); + query.From = 0; + query.Size = 0; + return query; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/Concordances/ExportConcordancesQueryFactory.cs b/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/Concordances/ExportConcordancesQueryFactory.cs new file mode 100644 index 0000000..bca83f4 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/Concordances/ExportConcordancesQueryFactory.cs @@ -0,0 +1,24 @@ +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Search.Queries.Concordances; +using Rsdo.Concordancer.ServiceModel.Requests.Concordances; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Services.LemmatizationService; + +namespace Rsdo.Concordancer.Services.Search.QueryFactories.Concordances; + +public class ExportConcordancesQueryFactory : BaseConcordancesQueryFactory, IQueryFactory +{ + public ExportConcordancesQueryFactory(ILemmatizationService lemmatizationService) + : base(lemmatizationService) + { + } + + public async Task GetQuery(ExportConcordances request) + { + var query = await GetQuery(request); + query.From = 0; + query.ReturnRandomRows = request.Type == ConcordanceExportType.RandomRows; + query.Size = request.Rows; + return query; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/Concordances/SearchConcordancesQueryFactory.cs b/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/Concordances/SearchConcordancesQueryFactory.cs new file mode 100644 index 0000000..2097ffa --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/Concordances/SearchConcordancesQueryFactory.cs @@ -0,0 +1,22 @@ +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Extensions; +using Rsdo.Concordancer.Core.Search.Queries.Concordances; +using Rsdo.Concordancer.ServiceModel.Requests.Concordances; +using Rsdo.Concordancer.Services.Services.LemmatizationService; + +namespace Rsdo.Concordancer.Services.Search.QueryFactories.Concordances; + +public class SearchConcordancesQueryFactory : BaseConcordancesQueryFactory, IQueryFactory +{ + public SearchConcordancesQueryFactory(ILemmatizationService lemmatizationService) + : base(lemmatizationService) + { + } + + public async Task GetQuery(SearchConcordances request) + { + var query = await GetQuery(request); + query.WithPageInfo(request); + return query; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/IQueryFactory.cs b/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/IQueryFactory.cs new file mode 100644 index 0000000..2c7e3a9 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/IQueryFactory.cs @@ -0,0 +1,10 @@ +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Search.Queries; + +namespace Rsdo.Concordancer.Services.Search.QueryFactories; + +public interface IQueryFactory + where TQuery : Query +{ + Task GetQuery(TRequest request); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/TermLists/BaseTermListQueryFactory.cs b/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/TermLists/BaseTermListQueryFactory.cs new file mode 100644 index 0000000..994bdd0 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/TermLists/BaseTermListQueryFactory.cs @@ -0,0 +1,50 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Search.Queries.TermLists; +using Rsdo.Concordancer.ServiceModel.Requests.TermLists; +using Rsdo.Concordancer.Services.Services.InputQueryParser; +using Rsdo.Concordancer.Services.Services.LemmatizationService; + +namespace Rsdo.Concordancer.Services.Search.QueryFactories.TermLists; + +public class BaseTermListQueryFactory +{ + private readonly IInputQueryParser inputQueryParser; + private readonly ILemmatizationService lemmatizationService; + + public BaseTermListQueryFactory(IInputQueryParser inputQueryParser, ILemmatizationService lemmatizationService) + { + this.inputQueryParser = inputQueryParser; + this.lemmatizationService = lemmatizationService; + } + + protected async Task GetQuery(TRequest request) + where TRequest : BaseSearchTermList + { + // Parse query + var words = await inputQueryParser.ParseDefault(request.Query); + + var wordQueries = new List(); + foreach (var word in words) + { + var wordQuery = new SearchedTermQuery(); + if (word.inPhrase) + { + wordQuery.Form = word.word; + } + else + { + wordQuery.Lemmas = await lemmatizationService.GetLemmas(word.word); + } + + wordQueries.Add(wordQuery); + } + + // Return query + return new TermListQuery + { + Words = wordQueries, + }; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/TermLists/ExportTermListQueryFactory.cs b/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/TermLists/ExportTermListQueryFactory.cs new file mode 100644 index 0000000..42d6b43 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/TermLists/ExportTermListQueryFactory.cs @@ -0,0 +1,23 @@ +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Search.Queries.TermLists; +using Rsdo.Concordancer.ServiceModel.Requests.TermLists; +using Rsdo.Concordancer.Services.Services.InputQueryParser; +using Rsdo.Concordancer.Services.Services.LemmatizationService; + +namespace Rsdo.Concordancer.Services.Search.QueryFactories.TermLists; + +public class ExportTermListQueryFactory : BaseTermListQueryFactory, IQueryFactory +{ + public ExportTermListQueryFactory(IInputQueryParser inputQueryParser, ILemmatizationService lemmatizationService) + : base(inputQueryParser, lemmatizationService) + { + } + + public async Task GetQuery(ExportTermList request) + { + var query = await GetQuery(request); + query.From = 0; + query.Size = request.Rows; + return query; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/TermLists/SearchTermListQueryFactory.cs b/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/TermLists/SearchTermListQueryFactory.cs new file mode 100644 index 0000000..effe77a --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Search/QueryFactories/TermLists/SearchTermListQueryFactory.cs @@ -0,0 +1,23 @@ +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Extensions; +using Rsdo.Concordancer.Core.Search.Queries.TermLists; +using Rsdo.Concordancer.ServiceModel.Requests.TermLists; +using Rsdo.Concordancer.Services.Services.InputQueryParser; +using Rsdo.Concordancer.Services.Services.LemmatizationService; + +namespace Rsdo.Concordancer.Services.Search.QueryFactories.TermLists; + +public class SearchTermListQueryFactory : BaseTermListQueryFactory, IQueryFactory +{ + public SearchTermListQueryFactory(IInputQueryParser inputQueryParser, ILemmatizationService lemmatizationService) + : base(inputQueryParser, lemmatizationService) + { + } + + public async Task GetQuery(SearchTermList request) + { + var query = await GetQuery(request); + query.WithPageInfo(request); + return query; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Services/InputQueryParser/IInputQueryParser.cs b/src/core/Rsdo.Concordancer.Services/Services/InputQueryParser/IInputQueryParser.cs new file mode 100644 index 0000000..3e626f5 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Services/InputQueryParser/IInputQueryParser.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Rsdo.Concordancer.ServiceModel.Requests.Concordances; + +namespace Rsdo.Concordancer.Services.Services.InputQueryParser; + +public interface IInputQueryParser +{ + Task<(SearchedMainWord mainWord, List wordsInContext)> Parse(string query); + + Task> ParseDefault(string query); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Services/InputQueryParser/InputQueryParser.cs b/src/core/Rsdo.Concordancer.Services/Services/InputQueryParser/InputQueryParser.cs new file mode 100644 index 0000000..213ea9a --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Services/InputQueryParser/InputQueryParser.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Autofac.Features.Indexed; +using Rsdo.Concordancer.ServiceModel.Requests.Concordances; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Services.TokenizerService; + +namespace Rsdo.Concordancer.Services.Services.InputQueryParser; + +public class InputQueryParser : IInputQueryParser +{ + private readonly IIndex tokenizers; + + public InputQueryParser(IIndex tokenizers) + { + this.tokenizers = tokenizers; + } + + public async Task> Tokenize(string query) + { + try + { + return await tokenizers[TokenizerType.Classla].Tokenize(query); + } + catch (Exception) + { + return await tokenizers[TokenizerType.Default].Tokenize(query); + } + } + + public async Task<(SearchedMainWord mainWord, List wordsInContext)> Parse(string query) + { + if (string.IsNullOrEmpty(query)) + { + throw new ArgumentNullException(query); + } + + var parsed = await ParseDefault(query); + + var mainWord = new SearchedMainWord() + { + Form = parsed[0].word, + FormSearchType = GetFormSearchType(parsed[0].inPhrase), + }; + + var wordsInContext = parsed.Skip(1) + .Select( + (w, i) => new SearchedWordInContext() + { + ConditionType = ConditionType.Is, + Form = w.word, + FormSearchType = GetFormSearchType(w.inPhrase), + DistanceType = DistanceType.Position, + LeftPosition = 0, + RightPosition = i + 1, + }) + .ToList(); + + return (mainWord, wordsInContext); + } + + public async Task> ParseDefault(string query) + { + if (string.IsNullOrEmpty(query)) + { + throw new ArgumentNullException(query); + } + + var result = new List<(string word, bool inPhrase)>(); + + var buffer = new StringBuilder(); + var inPhrase = false; + + for (int i = 0; i < query.Length; i++) + { + var c = query[i]; + + if (c != '"') + { + buffer.Append(c); + } + + if (c == '"' || i == query.Length - 1) + { + var tokens = await Tokenize(buffer.ToString()); + foreach (var token in tokens) + { + result.Add((token.form, inPhrase)); + } + + buffer.Clear(); + inPhrase = !inPhrase; + } + } + + return result; + } + + private static FormSearchType GetFormSearchType(bool inPhrase) + { + return inPhrase ? FormSearchType.ExactForm : FormSearchType.AllForms; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Services/LemmatizationService/ILemmatizationService.cs b/src/core/Rsdo.Concordancer.Services/Services/LemmatizationService/ILemmatizationService.cs new file mode 100644 index 0000000..b869b1d --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Services/LemmatizationService/ILemmatizationService.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Rsdo.Concordancer.Services.Services.LemmatizationService; + +public interface ILemmatizationService +{ + Task> GetLemmas(string form); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Services/LemmatizationService/LemmatizationService.cs b/src/core/Rsdo.Concordancer.Services/Services/LemmatizationService/LemmatizationService.cs new file mode 100644 index 0000000..db25879 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Services/LemmatizationService/LemmatizationService.cs @@ -0,0 +1,29 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.Core.Extensions; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.Services.LemmatizationService; + +public class LemmatizationService : ILemmatizationService +{ + private readonly MasterDbContext dbContext; + + public LemmatizationService(MasterDbContext dbContext) + { + this.dbContext = dbContext; + } + + public async Task> GetLemmas(string form) + { + var lemmas = await dbContext.LemmaFormPair.Where(f => f.Form.ToLower() == form.ToLower()).Select(f => f.Lemma).Distinct().ToListAsync(); + if (lemmas.IsNullOrEmpty()) + { + lemmas.Add(form); + } + + return lemmas; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Services/ParagraphService/IParagraphService.cs b/src/core/Rsdo.Concordancer.Services/Services/ParagraphService/IParagraphService.cs new file mode 100644 index 0000000..7499bca --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Services/ParagraphService/IParagraphService.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq.Expressions; +using System.Threading.Tasks; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.ServiceModel.Shared; + +namespace Rsdo.Concordancer.Services.Services.ParagraphService; + +public interface IParagraphService +{ + Task GetToken(Guid tokenId); + + Task> GetTokens(Expression> predicate); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Services/ParagraphService/ParagraphService.cs b/src/core/Rsdo.Concordancer.Services/Services/ParagraphService/ParagraphService.cs new file mode 100644 index 0000000..fe084fc --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Services/ParagraphService/ParagraphService.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.ServiceModel.Shared; +using Rsdo.Concordancer.Services.Framework.DbContext; +using Rsdo.Concordancer.Services.Services.PartOfSpeechService; + +namespace Rsdo.Concordancer.Services.Services.ParagraphService; + +public class ParagraphService : IParagraphService +{ + private readonly CorpusDbContext dbContext; + private readonly IPartOfSpeechService partOfSpeechService; + + public ParagraphService(CorpusDbContext dbContext, IPartOfSpeechService partOfSpeechService) + { + this.dbContext = dbContext; + this.partOfSpeechService = partOfSpeechService; + } + + public async Task GetToken(Guid tokenId) + { + return await dbContext.Token.Include(t => t.Sentence).ThenInclude(s => s.Paragraph).SingleAsync(t => t.Id == tokenId); + } + + public async Task> GetTokens(Expression> predicate) + { + var tokens = await dbContext.Token.Include(t => t.Sentence) + .ThenInclude(s => s.Paragraph) + .Where(predicate) + .OrderBy(t => t.Sentence.RecordOrder) + .ThenBy(t => t.RecordOrder) + .ToListAsync(); + + var concordanceTokens = new List(); + + foreach (var token in tokens) + { + concordanceTokens.Add( + new ConcordanceToken() + { + Form = token.Form, + Lemma = token.Lemma, + Msd = token.Msd, + MsdDescription = await partOfSpeechService.GetMsdDescriptionByCode(token.Msd), + TokenOrder = token.TokenOrder, + Type = token.Type, + }); + } + + return concordanceTokens; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Services/PartOfSpeechService/IPartOfSpeechService.cs b/src/core/Rsdo.Concordancer.Services/Services/PartOfSpeechService/IPartOfSpeechService.cs new file mode 100644 index 0000000..04dd238 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Services/PartOfSpeechService/IPartOfSpeechService.cs @@ -0,0 +1,8 @@ +using System.Threading.Tasks; + +namespace Rsdo.Concordancer.Services.Services.PartOfSpeechService; + +public interface IPartOfSpeechService +{ + Task GetMsdDescriptionByCode(string code); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Services/PartOfSpeechService/PartOfSpeechService.cs b/src/core/Rsdo.Concordancer.Services/Services/PartOfSpeechService/PartOfSpeechService.cs new file mode 100644 index 0000000..f0e48e5 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Services/PartOfSpeechService/PartOfSpeechService.cs @@ -0,0 +1,46 @@ +using System; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Caching.Memory; +using Rsdo.Concordancer.Core.Constants; +using Rsdo.Concordancer.Core.Entities; +using Rsdo.Concordancer.Core.Exceptions; +using Rsdo.Concordancer.ServiceModel.Types; +using Rsdo.Concordancer.Services.Framework.DbContext; + +namespace Rsdo.Concordancer.Services.Services.PartOfSpeechService; + +public class PartOfSpeechService : IPartOfSpeechService +{ + private readonly MasterDbContext dbContext; + private readonly IMemoryCache memoryCache; + + public PartOfSpeechService(MasterDbContext dbContext, IMemoryCache memoryCache) + { + this.dbContext = dbContext; + this.memoryCache = memoryCache; + } + + public async Task GetMsdDescriptionByCode(string code) + { + if (string.IsNullOrEmpty(code)) + { + return null; + } + + var cacheKey = Cache.CacheKeys.Msd.ByCode(code); + var msd = memoryCache.Get(cacheKey); + if (msd == null) + { + msd = await dbContext.Msd.SingleOrDefaultAsync(m => m.Code == code); + if (msd == null) + { + throw new XNotFoundException(Errors.NotFound.EntityNotFound(EntityType.Msd, nameof(Msd.Code), code)); + } + + memoryCache.Set(cacheKey, msd, Cache.Duration.Long); + } + + return msd.Description; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Services/TokenizerService/BaseTokenizerService.cs b/src/core/Rsdo.Concordancer.Services/Services/TokenizerService/BaseTokenizerService.cs new file mode 100644 index 0000000..87ab713 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Services/TokenizerService/BaseTokenizerService.cs @@ -0,0 +1,48 @@ +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using System.Xml; +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.Services.Services.TokenizerService; + +public abstract class BaseTokenizerService : ITokenizerService +{ + public async Task> Tokenize(string query) + { + var xml = await GetXml(query); + return ReadTokens(xml); + } + + protected abstract Task GetXml(string query); + + private static IEnumerable<(TokenType type, string form)> ReadTokens(string xml) + { + var tokens = new List<(TokenType type, string form)>(); + using TextReader textReader = new StringReader(xml); + var readerSettings = new XmlReaderSettings + { + ConformanceLevel = ConformanceLevel.Fragment, + }; + using var xmlReader = XmlReader.Create(textReader, readerSettings); + while (xmlReader.Read()) + { + if (xmlReader.NodeType == XmlNodeType.Element) + { + switch (xmlReader.LocalName) + { + case "c": + xmlReader.Read(); // To move to text node + tokens.Add((TokenType.Character, xmlReader.Value)); + break; + case "w": + xmlReader.Read(); // To move to text node + tokens.Add((TokenType.Word, xmlReader.Value)); + break; + } + } + } + + return tokens; + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Services/TokenizerService/ClasslaTokenizerService.cs b/src/core/Rsdo.Concordancer.Services/Services/TokenizerService/ClasslaTokenizerService.cs new file mode 100644 index 0000000..0b3cde7 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Services/TokenizerService/ClasslaTokenizerService.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Net.Http; +using System.Threading.Tasks; +using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using Rsdo.Concordancer.Core.Constants; + +namespace Rsdo.Concordancer.Services.Services.TokenizerService; + +public class ClasslaTokenizerService : BaseTokenizerService +{ + private readonly IConfiguration configuration; + private readonly IHttpClientFactory httpClientFactory; + private readonly ILogger logger; + private readonly IMemoryCache memoryCache; + + public ClasslaTokenizerService( + IConfiguration configuration, + IHttpClientFactory httpClientFactory, + ILogger logger, + IMemoryCache memoryCache) + { + this.configuration = configuration; + this.httpClientFactory = httpClientFactory; + this.logger = logger; + this.memoryCache = memoryCache; + } + + protected override async Task GetXml(string query) + { + var cacheKey = Cache.CacheKeys.Tokenizer.ByQuery(query); + var tokenized = memoryCache.Get(cacheKey); + if (tokenized == null) + { + tokenized = await GetXmlFromWebService(query); + memoryCache.Set(cacheKey, tokenized, Cache.Duration.Short); + } + + return tokenized; + } + + private async Task GetXmlFromWebService(string query) + { + var data = new[] + { + new KeyValuePair("text", query), + new KeyValuePair("tags", string.Empty), + new KeyValuePair("model", "standard"), + new KeyValuePair("text-type", "raw"), + new KeyValuePair("tag-language", "slo"), + new KeyValuePair("synt-dep", "ud+jos"), + new KeyValuePair("morph-scheme", "ud+jos"), + }; + + var url = configuration[ConfigurationKey.Tokenizer.ClasslaTokenizerUrl]; + var client = httpClientFactory.CreateClient(); + client.Timeout = TimeSpan.FromMilliseconds(2000); + try + { + var response = await client.PostAsync(url, new FormUrlEncodedContent(data)); + if (response.IsSuccessStatusCode) + { + using (var streamReader = new StreamReader(await response.Content.ReadAsStreamAsync())) + { + using (var jsonReader = new JsonTextReader(streamReader)) + { + var json = await JObject.LoadAsync(jsonReader); + return json["tei"].Value(); + } + } + } + + throw new Exception($"Invalid status code: {(int)response.StatusCode}."); + } + catch (Exception e) + { + logger.LogError(e, "Error when tokenizing query '{query}'.", query); + throw; + } + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Services/TokenizerService/DefaultTokenizerService.cs b/src/core/Rsdo.Concordancer.Services/Services/TokenizerService/DefaultTokenizerService.cs new file mode 100644 index 0000000..26a1614 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Services/TokenizerService/DefaultTokenizerService.cs @@ -0,0 +1,14 @@ +using System.Linq; +using System.Threading.Tasks; + +namespace Rsdo.Concordancer.Services.Services.TokenizerService; + +public class DefaultTokenizerService : BaseTokenizerService +{ + protected override Task GetXml(string query) + { + var words = query.Split(' ').Where(s => !string.IsNullOrEmpty(s)).ToList(); + var xml = "

    " + string.Join(string.Empty, words.Select(w => $"{w}").ToArray()) + "

    "; + return Task.FromResult(xml); + } +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Services/TokenizerService/ITokenizerService.cs b/src/core/Rsdo.Concordancer.Services/Services/TokenizerService/ITokenizerService.cs new file mode 100644 index 0000000..5b8bdd1 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Services/TokenizerService/ITokenizerService.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Rsdo.Concordancer.ServiceModel.Types; + +namespace Rsdo.Concordancer.Services.Services.TokenizerService; + +public interface ITokenizerService +{ + Task> Tokenize(string query); +} \ No newline at end of file diff --git a/src/core/Rsdo.Concordancer.Services/Services/TokenizerService/TokenizerType.cs b/src/core/Rsdo.Concordancer.Services/Services/TokenizerService/TokenizerType.cs new file mode 100644 index 0000000..c2fabf6 --- /dev/null +++ b/src/core/Rsdo.Concordancer.Services/Services/TokenizerService/TokenizerType.cs @@ -0,0 +1,7 @@ +namespace Rsdo.Concordancer.Services.Services.TokenizerService; + +public enum TokenizerType +{ + Classla, + Default, +} \ No newline at end of file diff --git a/src/tests/Rsdo.Concordancer.Tests.Integration/Rsdo.Concordancer.Tests.Integration.csproj b/src/tests/Rsdo.Concordancer.Tests.Integration/Rsdo.Concordancer.Tests.Integration.csproj new file mode 100644 index 0000000..fc95c63 --- /dev/null +++ b/src/tests/Rsdo.Concordancer.Tests.Integration/Rsdo.Concordancer.Tests.Integration.csproj @@ -0,0 +1,24 @@ + + + + net6.0 + false + true + false + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + diff --git a/src/tests/Rsdo.Concordancer.Tests.Unit/Rsdo.Concordancer.Tests.Unit.csproj b/src/tests/Rsdo.Concordancer.Tests.Unit/Rsdo.Concordancer.Tests.Unit.csproj new file mode 100644 index 0000000..fc95c63 --- /dev/null +++ b/src/tests/Rsdo.Concordancer.Tests.Unit/Rsdo.Concordancer.Tests.Unit.csproj @@ -0,0 +1,24 @@ + + + + net6.0 + false + true + false + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + +