diff --git a/README.md b/README.md index c93b88d..966e2ff 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,45 @@ # contacts-pane -Contact management: AddressBooks, Groups, Individuals and Organizations. +SolidOS pane that displays a personal contact and address books. + +![CI](https://github.com/solid/contacts-pane/workflows/CI/badge.svg) + +## Contribute + +### Tech stack + +- JavaScript +- Jest +- Eslint +- SolidOS + +### Tests + +To run all tests: +```shell script +npm test +``` + +If you are a first time developer/user on Windows 10, the repository may give package issues regarding webpack or jest. +If this is the case, simply run "npm audit fix" and upgrade the repository. It should work fine. + +#### Unit tests + +Unit tests use `jest` and are placed in the `test` folder. + +### Dev Server + +Start a webpack dev server: + +```shell script +npm start +``` + +Visit `http://localhost:8080/` to render the pane. Adjust `const webIdToShow` in `./dev/index.ts` to show a different profile. + +### Build + +``` +npm run build +``` + diff --git a/babel.config.mjs b/babel.config.mjs index 7de803b..f15d0aa 100644 --- a/babel.config.mjs +++ b/babel.config.mjs @@ -14,8 +14,7 @@ export default { [ 'babel-plugin-inline-import', { extensions: [ - '.ttl', - '.sparql' + '.ttl' ] } ] diff --git a/declarations.d.ts b/declarations.d.ts index 5cc7479..b205565 100644 --- a/declarations.d.ts +++ b/declarations.d.ts @@ -3,7 +3,7 @@ declare module '*.ttl' { export default content; } -declare module '*.sparql' { +declare module '*.css' { const content: string; export default content; } diff --git a/dev/context.ts b/dev/context.ts new file mode 100644 index 0000000..7faa6c9 --- /dev/null +++ b/dev/context.ts @@ -0,0 +1,27 @@ +import { default as pane } from '../src/contactsPane' +import { DataBrowserContext, PaneRegistry } from 'pane-registry' +import { solidLogicSingleton, store } from 'solid-logic' +import { LiveStore } from 'rdflib' + +// Configure fetcher for development +if (store.fetcher) { + // Configure for cross-origin requests + (store.fetcher as any).crossSite = true; + (store.fetcher as any).withCredentials = false; +} + +export const context: DataBrowserContext = { + session: { + store: store as LiveStore, + paneRegistry: { + byName: (name: string) => { + return pane + } + } as PaneRegistry, + logic: solidLogicSingleton + }, + dom: document, + getOutliner: () => null, +} + +export const fetcher = store.fetcher diff --git a/dev/dev-global.css b/dev/dev-global.css new file mode 100644 index 0000000..288e14b --- /dev/null +++ b/dev/dev-global.css @@ -0,0 +1,387 @@ +/* ---ONLY FOR LOCAL DEV--- */ +/* ---final version is in mashlib--- */ + +/* Global CSS: base styles, variables, and resets */ +/* Accessible color palette */ + +:root { + /* Primary/Accent colors (profile-pane specific) */ + --color-primary: #7C4DFF; /* Vivid Purple */ + --color-secondary: #0077B6; /* Accessible Blue */ + --color-accent: #FFD600; /* Bright Yellow */ + --color-error: #B00020; /* Accessible Red */ + --color-success: #00C853; /* Accessible Green */ + + /* Card/Section backgrounds */ + --color-background: #FFFFFF; /* White */ + --color-card-bg: #FFFFFF; /* White for inner cards */ + --color-section-bg: #F5F5F5; /* Light grey for outer sections */ + + --color-text: #1A1A1A; /* Near-black */ + --color-text-secondary: #666; /* Added for repeated usage */ + --color-text-muted: #444; /* Added for repeated usage */ + --color-border-pale: #eee; /* Added for repeated borders */ + --border-radius-full: 1em; /* Matches module usage */ + --border-radius-base: 0.5em; + --box-shadow: 0 2px 8px rgba(124,77,255,0.08); /* Matches module usage */ + --box-shadow-sm: 0 1px 4px rgba(124,77,255,0.12); + --spacing-xs: 0.5em; + --spacing-sm: 0.75em; + --spacing-md: 1em; + --spacing-lg: 1.5em; + --spacing-xl: 2em; + --font-family-base: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; + --font-size-base: 1em; /* 16px default */ + --font-size-sm: 0.875em; /* 14px */ + --font-size-lg: 1.125em; /* 18px */ + --font-size-xl: 1.25em; /* 20px */ + --line-height-base: 1.5; /* WCAG recommended */ + --line-height-tight: 1.4; + --line-height-loose: 1.6; + --letter-spacing-wide: 0.025em; + + /* Minimum font sizes for accessibility */ + --min-font-size: 14px; + --min-line-height: 1.4; + + /* Accessibility improvements */ + --min-touch-target: 44px; /* WCAG minimum touch target */ + --focus-ring-width: 2px; + --animation-duration: 0.2s; /* Reduced motion friendly */ + + /* Additional accessibility variables */ + --focus-indicator-width: 3px; + --animation-duration-slow: 0.3s; + --high-contrast-ratio: 7:1; /* WCAG AAA standard */ +} + + +/* Improve text rendering */ +html, body { + margin: 0; + padding: 0; + font-family: var(--font-family-base); + font-size: var(--font-size-base); + line-height: var(--line-height-base); + background: var(--color-background); + color: var(--color-text); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; +} + +/* Improved heading hierarchy */ +h1, h2, h3, h4, h5, h6 { + color: var(--color-primary); + font-weight: 600; + line-height: var(--line-height-tight); + margin-top: 0; + margin-bottom: var(--spacing-sm); +} + +h1 { font-size: 2em; } /* 32px */ +h2 { font-size: 1.5em; } /* 24px */ +h3 { font-size: 1.25em; } /* 20px */ +h4 { font-size: 1.125em; }/* 18px */ +h5, h6 { font-size: 1em; }/* 16px */ + +/* Better paragraph spacing */ +p { + margin-bottom: var(--spacing-md); + line-height: var(--line-height-base); + max-width: 65ch; /* Optimal reading width */ +} + +/* Improved link accessibility */ +a { + color: var(--color-primary); + text-decoration: underline; + text-underline-offset: 0.125em; + text-decoration-thickness: 0.0625em; +} + +a:hover, a:focus { + text-decoration-thickness: 0.125em; +} + +/* Ensure minimum font sizes are respected */ +@media screen and (max-width: 768px) { + html { + font-size: max(16px, 1rem); /* Never smaller than 16px on mobile */ + } +} + +/* Support for larger text preferences */ +@media (prefers-reduced-motion: no-preference) { + html { + scroll-behavior: smooth; + } +} + +/* Accessibility: focus styles */ +:focus { + outline: 2px solid var(--color-primary); + outline-offset: 1px; + box-shadow: 0 0 0 1px var(--color-background); +} + +/* Accessibility: Respect user motion preferences */ +@media (prefers-reduced-motion: reduce) { + *, *::before, *::after { + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; + scroll-behavior: auto !important; + } +} + +/* Accessibility: High contrast mode support */ +@media (prefers-contrast: high) { + :root { + --color-border-pale: #000; + --box-shadow: 0 2px 4px rgba(0,0,0,0.5); + --box-shadow-sm: 0 1px 2px rgba(0,0,0,0.3); + } +} + +/* Accessibility: Improved focus management */ +:focus-visible { + outline: var(--focus-ring-width) solid var(--color-primary); + outline-offset: 2px; + box-shadow: 0 0 0 1px var(--color-background); +} + +:focus:not(:focus-visible) { + outline: none; +} + +/* Skip link for screen readers */ +.skip-link { + position: absolute; + top: -40px; + left: 6px; + background: var(--color-primary); + color: white; + padding: var(--spacing-sm) var(--spacing-md); + text-decoration: none; + border-radius: var(--border-radius-base); + z-index: 1000; + font-weight: 600; + font-size: var(--font-size-base); + line-height: 1; +} + +.skip-link:focus { + top: 6px; + outline: 2px solid white; + outline-offset: 2px; +} + +/* Semantic HTML5 improvements */ +article, aside, section { + display: block; +} + +header { + margin-bottom: var(--spacing-md); +} + +nav { + display: block; +} + +nav ul { + list-style: none; + padding: 0; + margin: 0; +} + +/* Enhanced keyboard navigation */ +*:focus-visible { + outline: var(--focus-indicator-width) solid var(--color-primary); + outline-offset: 2px; + box-shadow: 0 0 0 1px var(--color-background), 0 0 0 4px rgba(124, 77, 255, 0.2); + border-radius: 2px; + transition: none; /* Remove transitions on focus for immediate feedback */ +} + +/* Improve focus management for interactive elements */ +[role="button"]:focus, +[role="link"]:focus, +button:focus, +a:focus { + outline: 2px solid var(--color-primary); + outline-offset: 2px; + box-shadow: 0 0 0 1px var(--color-background); +} + +/* Enhanced error message accessibility */ +[role="alert"] { + padding: var(--spacing-md); + border: 2px solid var(--color-error); + border-radius: var(--border-radius-base); + background-color: rgba(176, 0, 32, 0.1); + margin: var(--spacing-md) 0; +} + +/* Success message styling */ +[role="status"] { + padding: var(--spacing-md); + border: 2px solid var(--color-success); + border-radius: var(--border-radius-base); + background-color: rgba(0, 200, 83, 0.1); + margin: var(--spacing-md) 0; +} + +/* Enhanced table accessibility */ +table { + border-collapse: collapse; + width: 100%; +} + +th { + background-color: var(--color-section-bg); + font-weight: 600; + text-align: left; + padding: var(--spacing-sm); +} + +td { + padding: var(--spacing-sm); +} + +/* Focus trap for modals */ +.focus-trap { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 9999; + background: rgba(0, 0, 0, 0.5); + display: flex; + justify-content: center; + align-items: center; +} + +/* Enhanced button accessibility */ +button, [role="button"] { + cursor: pointer; + border: none; + border-radius: var(--border-radius-base); + padding: var(--spacing-sm) var(--spacing-md); + min-height: var(--min-touch-target); + min-width: var(--min-touch-target); + font-size: var(--font-size-base); + font-weight: 600; + transition: all var(--animation-duration) ease; + position: relative; +} + +button:disabled, [role="button"][aria-disabled="true"] { + opacity: 0.6; + cursor: not-allowed; + pointer-events: none; +} + +/* Loading indicator accessibility */ +.loading-spinner { + width: 40px; + height: 40px; + border: 3px solid var(--color-border-pale); + border-top: 3px solid var(--color-primary); + border-radius: 50%; + animation: spin 1s linear infinite; +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +@media (prefers-reduced-motion: reduce) { + .loading-spinner { + animation: none; + border-top-color: var(--color-primary); + } +} + +/* Utility classes */ +.u-flex { + display: flex; +} +.u-grid { + display: grid; +} +.u-center { + justify-content: center; + align-items: center; +} +.u-gap { + gap: 1em; +} + +/* Common card component - used across all modules */ +.module-card { + background: var(--color-card-bg); + border-radius: var(--border-radius-full); + box-shadow: var(--box-shadow); + padding: var(--spacing-lg); + margin-bottom: var(--spacing-lg); + width: 100%; + max-width: 100%; + box-sizing: border-box; +} + +/* Common header styles */ +.module-header { + text-align: center; + margin-bottom: var(--spacing-md); +} + +/* Common flex patterns */ +.flex-center { + display: flex; + justify-content: center; + align-items: center; +} + +.flex-column { + display: flex; + flex-direction: column; +} + +.flex-column-center { + display: flex; + flex-direction: column; + align-items: center; +} + +/* Text utilities */ +.text-center { + text-align: center; +} + +.text-secondary { + color: var(--color-text-secondary); +} + +.text-muted { + color: var(--color-text-muted); +} + +/* Override solid-ui error message close button styling */ +.errorMessageBlock .close, +.errorMessageBlock button[type="button"], +.errorMessageBlock .button { + background: var(--color-border-pale) !important; + color: var(--color-text) !important; + border: 1px solid var(--color-border-pale) !important; +} + +.errorMessageBlock .close:hover, +.errorMessageBlock button[type="button"]:hover, +.errorMessageBlock .button:hover { + background: var(--color-text-secondary) !important; + color: var(--color-background) !important; +} \ No newline at end of file diff --git a/dev/index.html b/dev/index.html new file mode 100644 index 0000000..3b5ca7d --- /dev/null +++ b/dev/index.html @@ -0,0 +1,57 @@ + + + + + contacts-pane dev server + + + + + + + + +

pane under development

+
+
+
+
+ +
Rendering...
+ + diff --git a/dev/index.ts b/dev/index.ts new file mode 100644 index 0000000..f3fa53c --- /dev/null +++ b/dev/index.ts @@ -0,0 +1,31 @@ +import { sym } from 'rdflib' +import { default as pane } from '../src/contactsPane' +import './dev-global.css' // Import after src to override component styles +import { context, fetcher } from './context' +import { authn, authSession } from 'solid-logic' +import * as UI from 'solid-ui' + +const loginBanner = document.getElementById('loginBanner') +const webId = document.getElementById('webId') + +loginBanner.appendChild(UI.login.loginStatusBox(document, null, {})) + +const webIdToShow = 'https://testingsolidos.solidcommunity.net/profile/card#me' + +async function finishLogin() { + await authSession.handleIncomingRedirect() + const session = authSession + if (session.info.isLoggedIn) { + // Update the page with the status. + webId.textContent = 'Logged in as: ' + authn.currentUser().uri + } else { + webId.textContent = '' + } + fetcher.load(webIdToShow).then(() => { + const app = pane.render(sym(webIdToShow), context) + document.getElementById('app').replaceWith(app) +}) +} + +finishLogin() + diff --git a/exampleOfOpenData/mit-wikidata-details.ttl b/exampleOfOpenData/mit-wikidata-details.ttl deleted file mode 100644 index 82b4893..0000000 --- a/exampleOfOpenData/mit-wikidata-details.ttl +++ /dev/null @@ -1,104 +0,0 @@ -@prefix rdf: . -@prefix rdfs: . -@prefix sesame: . -@prefix owl: . -@prefix xsd: . -@prefix fn: . -@prefix foaf: . -@prefix dc: . -@prefix hint: . -@prefix bd: . -@prefix bds: . -@prefix psn: . -@prefix pqn: . -@prefix prn: . -@prefix mwapi: . -@prefix gas: . -@prefix wdt: . -@prefix wdtn: . -@prefix psv: . -@prefix ps: . -@prefix pqv: . -@prefix pq: . -@prefix prv: . -@prefix pr: . -@prefix wdno: . -@prefix p: . -@prefix wikibase: . -@prefix wd: . -@prefix wdata: . -@prefix wds: . -@prefix wdv: . -@prefix wdref: . -@prefix schema: . -@prefix prov: . -@prefix skos: . -@prefix geo: . -@prefix geof: . -@prefix mediawiki: . -@prefix ontolex: . -@prefix dct: . - -wd:Q49108 schema:logo , ; - schema:subOrganization wd:Q142740 . - -wd:Q142740 schema:name "Sloan School of Management"@fr . - -wd:Q49108 schema:location wd:Q49111 . - -wd:Q49111 wdt:P625 "Point(-71.106111111 42.375)"^^geo:wktLiteral ; - schema:country wd:Q30 . - -wd:Q30 schema:name "États-Unis"@fr . - -wd:Q49108 schema:subOrganization wd:Q7185824 . - -wd:Q7185824 schema:name "Phillip T. and Susan M. Ragon Institute"@en . - -wd:Q49108 schema:subOrganization wd:Q3138607 . - -wd:Q3138607 schema:name "Lincoln Laboratory"@fr . - -wd:Q49108 schema:subOrganization wd:Q6716306 . - -wd:Q6716306 schema:name "Musée du MIT"@fr . - -wd:Q49108 schema:subOrganization wd:Q72855414 . - -wd:Q72855414 schema:name "Bates Research and Engineering Center"@en . - -wd:Q49108 schema:subOrganization wd:Q6801414 . - -wd:Q6801414 schema:name "McGovern Institute for Brain Research"@en . - -wd:Q49108 schema:subOrganization wd:Q7191073 . - -wd:Q7191073 schema:name "Picower Institute for Learning and Memory"@fr . - -wd:Q49108 schema:subOrganization wd:Q5025669 . - -wd:Q5025669 schema:name "Cambridge–MIT Institute"@en . - -wd:Q49108 schema:subOrganization wd:Q16977777 . - -wd:Q16977777 schema:name "MIT School of Humanities, Arts, and Social Sciences"@en . - -wd:Q49108 schema:subOrganization wd:Q45136595 . - -wd:Q45136595 schema:name "Deshpande Center for Technological Innovation, Massachusetts Institute of Technology"@en . - -wd:Q49108 schema:subOrganization wd:Q96391217 . - -wd:Q96391217 schema:name "MIT Schwarzman College of Computing"@en . - -wd:Q49108 schema:subOrganization wd:Q36874935 . - -wd:Q36874935 schema:name "Novartis-MIT Center for Continuous Manufacturing"@en . - -wd:Q49108 schema:subOrganization wd:Q6784300 . - -wd:Q6784300 schema:name "Massachusetts Institute of Technology School of Science"@en . - -wd:Q49108 schema:subOrganization wd:Q6716318 . - -wd:Q6716318 schema:name "MIT School of Architecture and Planning"@en . diff --git a/exampleOfOpenData/mit-wikidata-query.sparql b/exampleOfOpenData/mit-wikidata-query.sparql deleted file mode 100644 index b8031ad..0000000 --- a/exampleOfOpenData/mit-wikidata-query.sparql +++ /dev/null @@ -1,37 +0,0 @@ -CONSTRUCT -{ wd:Q49108 schema:name ?itemLabel; - schema:logo ?logo; - schema:logo ?sealImage; - schema:bogus ?bogus; - schema:subOrganization ?subsidiary . - ?subsidiary schema:name ?subsidiaryLabel . - ?supersidiary schema:subOrganization wd:Q49108 . - ?supersidiary schema:name ?supersidiaryLabel . - wd:Q49108 schema:location ?location . - ?location schema:elevation ?elevation . - ?location wdt:P131 ?region . ?region schema:name ?regionLabel . - ?location wdt:P625 ?coordinates . - ?location schema:country ?country . ?country schema:name ?countryLabel . -} -WHERE -{ - wd:Q49108 # rdfs:label ?itemLabel ; - wdt:P154 ?logo; - wdt:P158 ?sealImage . - OPTIONAL { wd:Q49108 wdt:P999 ?bogus; } - optional { wd:Q49108 wdt:P18 ?image } - - optional { wd:Q49108 wdt:P355 ?subsidiary . } - optional { ?supersidiary wdt:P355 wd:Q49108. } - - optional { wd:Q49108 wdt:P276 ?location . - - optional { ?location schema:eleveation ?elevation } - optional { ?location wdt:P131 ?adminstartiveRegion } - optional { ?location wdt:P625 ?coordinates } -optional { ?location wdt:P17 ?country } - } - - SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en,de,it". } -} -#ends diff --git a/exampleOfOpenData/wikidata-get.json b/exampleOfOpenData/wikidata-get.json deleted file mode 100644 index 7e6e697..0000000 --- a/exampleOfOpenData/wikidata-get.json +++ /dev/null @@ -1 +0,0 @@ -{"entities":{"Q1264942":{"pageid":1205676,"ns":0,"title":"Q1264942","lastrevid":1324719677,"modified":"2020-12-18T11:40:39Z","type":"item","id":"Q1264942","labels":{"ru":{"language":"ru","value":"\u0414\u0443\u043c\u0431\u0430\u0440\u0442\u043e\u043d-\u041e\u043a\u0441"},"fr":{"language":"fr","value":"Dumbarton Oaks"},"en":{"language":"en","value":"Dumbarton Oaks"},"zh":{"language":"zh","value":"\u6566\u5df4\u9813\u6a61\u6a39\u5712"},"pt":{"language":"pt","value":"Dumbarton Oaks"},"ca":{"language":"ca","value":"Dumbarton Oaks"},"de":{"language":"de","value":"Dumbarton Oaks"},"tr":{"language":"tr","value":"Dumbarton Oaks"},"it":{"language":"it","value":"Dumbarton Oaks"},"es":{"language":"es","value":"Dumbarton Oaks"},"pl":{"language":"pl","value":"Dumbarton Oaks"},"he":{"language":"he","value":"\u05d3\u05de\u05d1\u05e8\u05d8\u05d5\u05df \u05d0\u05d5\u05e7\u05e1"},"da":{"language":"da","value":"Dumbarton Oaks"},"nl":{"language":"nl","value":"Dumbarton Oaks"},"ja":{"language":"ja","value":"\u30c0\u30f3\u30d0\u30fc\u30c8\u30f3\u30fb\u30aa\u30fc\u30af\u30b9\u90b8"},"id":{"language":"id","value":"Dumbarton Oaks"},"ast":{"language":"ast","value":"Dumbarton Oaks"},"be":{"language":"be","value":"\u0414\u0443\u043c\u0431\u0430\u0440\u0442\u0430\u043d-\u041e\u043a\u0441"},"sr":{"language":"sr","value":"\u0414\u0430\u043c\u0431\u0435\u0440\u0442\u043e\u043d \u041e\u0443\u043a\u0441"},"fa":{"language":"fa","value":"\u062f\u0627\u0645\u0628\u0631\u062a\u0648\u0646 \u0627\u06a9\u0633"},"sv":{"language":"sv","value":"Dumbarton Oaks"},"ka":{"language":"ka","value":"\u10d3\u10e3\u10db\u10d1\u10d0\u10e0\u10e2\u10dd\u10dc-\u10dd\u10e5\u10e1\u10d8"},"ro":{"language":"ro","value":"Dumbarton Oaks"},"ar":{"language":"ar","value":"\u062f\u0648\u0645\u0628\u0627\u0631\u062a\u0648\u0646 \u0623\u0648\u0643\u0633"}},"descriptions":{"da":{"language":"da","value":"bygning i Georgetown i Washington D.C. Forskningsinsitution vedr\u00f8rende byzantinsk og pr\u00e6-columbiansk historie"},"en":{"language":"en","value":"research institution concerning Byzantine and Pre-Columbian studies"},"fr":{"language":"fr","value":"h\u00f4tel particulier avec jardin botanique, \u00e0 Washington"},"nl":{"language":"nl","value":"hortus botanicus in Washington D.C., Verenigde Staten van Amerika"},"ru":{"language":"ru","value":"\u0441\u0442\u0430\u0440\u0438\u043d\u043d\u044b\u0439 \u043e\u0441\u043e\u0431\u043d\u044f\u043a \u0432 \u0414\u0436\u043e\u0440\u0434\u0436\u0442\u0430\u0443\u043d\u0435"},"ar":{"language":"ar","value":"\u0645\u0624\u0633\u0633\u0629 \u0628\u062d\u062b\u064a\u0629 \u0645\u062e\u062a\u0635\u0629 \u0628\u0627\u0644\u062f\u0631\u0627\u0633\u0627\u062a \u0627\u0644\u0628\u064a\u0632\u0646\u0637\u064a\u0629 \u0648\u0645\u0627\u0642\u0628\u0644 \u0627\u0644\u0643\u0648\u0644\u0645\u0628\u064a\u0629"},"de":{"language":"de","value":"Landhaus des 19. Jahrhunderts in Washington, D.C."},"it":{"language":"it","value":"villa storica di Washington, D.C., ospita un istituto di studi bizantini, pre-colombiani e di architettura del paesaggio"}},"aliases":{"ru":[{"language":"ru","value":"\u0414\u0430\u043c\u0431\u0435\u0440\u0442\u043e\u043d-\u041e\u043a\u0441"},{"language":"ru","value":"\u0414\u0430\u043c\u0431\u0430\u0440\u0442\u043e\u043d-\u041e\u043a\u0441"},{"language":"ru","value":"\u0414\u0430\u043c\u0431\u0430\u0440\u0442\u043e\u043d \u041e\u0430\u043a\u0441"},{"language":"ru","value":"\u0414\u0430\u043c\u0431\u0430\u0440\u0442\u043e\u043d \u041e\u0443\u043a\u0441"},{"language":"ru","value":"\u0414\u0430\u043c\u0431\u0430\u0440\u0442\u043e\u043d-\u041e\u0443\u043a\u0441"},{"language":"ru","value":"\u0414\u0430\u043c\u0431\u0435\u0440\u0442\u043e\u043d \u041e\u0430\u043a\u0441"}],"de":[{"language":"de","value":"Dumbarton Oaks Research Library and Collection"}],"tr":[{"language":"tr","value":"Dumbarton oaks"}],"es":[{"language":"es","value":"Instituto de Dumbarton Oaks"}],"en":[{"language":"en","value":"Dumbarton Oaks Research Library and Collection"}]},"claims":{"P1612":[{"mainsnak":{"snaktype":"value","property":"P1612","datavalue":{"value":"Dumbarton Oaks, Washington","type":"string"},"datatype":"string"},"type":"statement","id":"Q1264942$34c83e8d-4c4f-d18e-af09-fc1d053193e9","rank":"normal"}],"P373":[{"mainsnak":{"snaktype":"value","property":"P373","datavalue":{"value":"Dumbarton Oaks","type":"string"},"datatype":"string"},"type":"statement","id":"q1264942$E8B32884-59AB-437C-AD03-82F103AEFBE9","rank":"normal","references":[{"hash":"c456dc5cd2117249948c288206ff3f8b1bf574f0","snaks":{"P143":[{"snaktype":"value","property":"P143","datavalue":{"value":{"entity-type":"item","numeric-id":8449,"id":"Q8449"},"type":"wikibase-entityid"},"datatype":"wikibase-item"}]},"snaks-order":["P143"]}]}],"P625":[{"mainsnak":{"snaktype":"value","property":"P625","datavalue":{"value":{"latitude":38.91416666666667,"longitude":-77.06333333333333,"altitude":null,"precision":0.0002777777777777778,"globe":"http://www.wikidata.org/entity/Q2"},"type":"globecoordinate"},"datatype":"globe-coordinate"},"type":"statement","id":"q1264942$73CF12FA-19F7-4CA6-8688-D700FD682483","rank":"normal","references":[{"hash":"fa278ebfc458360e5aed63d5058cca83c46134f1","snaks":{"P143":[{"snaktype":"value","property":"P143","datavalue":{"value":{"entity-type":"item","numeric-id":328,"id":"Q328"},"type":"wikibase-entityid"},"datatype":"wikibase-item"}]},"snaks-order":["P143"]}]}],"P17":[{"mainsnak":{"snaktype":"value","property":"P17","datavalue":{"value":{"entity-type":"item","numeric-id":30,"id":"Q30"},"type":"wikibase-entityid"},"datatype":"wikibase-item"},"type":"statement","id":"q1264942$6FF216BD-5CCB-4536-9416-C52EB01E7CB0","rank":"normal","references":[{"hash":"fa278ebfc458360e5aed63d5058cca83c46134f1","snaks":{"P143":[{"snaktype":"value","property":"P143","datavalue":{"value":{"entity-type":"item","numeric-id":328,"id":"Q328"},"type":"wikibase-entityid"},"datatype":"wikibase-item"}]},"snaks-order":["P143"]},{"hash":"66e668129940a484226929f8951581f03c2eae5d","snaks":{"P5383":[{"snaktype":"value","property":"P5383","datavalue":{"value":"7789","type":"string"},"datatype":"external-id"}],"P248":[{"snaktype":"value","property":"P248","datavalue":{"value":{"entity-type":"item","numeric-id":265049,"id":"Q265049"},"type":"wikibase-entityid"},"datatype":"wikibase-item"}],"P813":[{"snaktype":"value","property":"P813","datavalue":{"value":{"time":"+2018-07-31T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http://www.wikidata.org/entity/Q1985727"},"type":"time"},"datatype":"time"}]},"snaks-order":["P5383","P248","P813"]}]}],"P131":[{"mainsnak":{"snaktype":"value","property":"P131","datavalue":{"value":{"entity-type":"item","numeric-id":61,"id":"Q61"},"type":"wikibase-entityid"},"datatype":"wikibase-item"},"type":"statement","id":"q1264942$8D04F936-04A1-4769-B2E1-0F40B41661EB","rank":"normal","references":[{"hash":"fa278ebfc458360e5aed63d5058cca83c46134f1","snaks":{"P143":[{"snaktype":"value","property":"P143","datavalue":{"value":{"entity-type":"item","numeric-id":328,"id":"Q328"},"type":"wikibase-entityid"},"datatype":"wikibase-item"}]},"snaks-order":["P143"]},{"hash":"66e668129940a484226929f8951581f03c2eae5d","snaks":{"P5383":[{"snaktype":"value","property":"P5383","datavalue":{"value":"7789","type":"string"},"datatype":"external-id"}],"P248":[{"snaktype":"value","property":"P248","datavalue":{"value":{"entity-type":"item","numeric-id":265049,"id":"Q265049"},"type":"wikibase-entityid"},"datatype":"wikibase-item"}],"P813":[{"snaktype":"value","property":"P813","datavalue":{"value":{"time":"+2018-07-31T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http://www.wikidata.org/entity/Q1985727"},"type":"time"},"datatype":"time"}]},"snaks-order":["P5383","P248","P813"]}]}],"P31":[{"mainsnak":{"snaktype":"value","property":"P31","datavalue":{"value":{"entity-type":"item","numeric-id":167346,"id":"Q167346"},"type":"wikibase-entityid"},"datatype":"wikibase-item"},"type":"statement","id":"Q1264942$4049CD73-9ABB-4493-B085-6BD831124D69","rank":"normal","references":[{"hash":"fa278ebfc458360e5aed63d5058cca83c46134f1","snaks":{"P143":[{"snaktype":"value","property":"P143","datavalue":{"value":{"entity-type":"item","numeric-id":328,"id":"Q328"},"type":"wikibase-entityid"},"datatype":"wikibase-item"}]},"snaks-order":["P143"]}]},{"mainsnak":{"snaktype":"value","property":"P31","datavalue":{"value":{"entity-type":"item","numeric-id":1802963,"id":"Q1802963"},"type":"wikibase-entityid"},"datatype":"wikibase-item"},"type":"statement","id":"Q1264942$a79bc8a1-4dde-7b87-9cb8-8fdcd61cd002","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P31","datavalue":{"value":{"entity-type":"item","numeric-id":1438040,"id":"Q1438040"},"type":"wikibase-entityid"},"datatype":"wikibase-item"},"type":"statement","id":"Q1264942$b3179fc5-4b39-77bc-4e18-84f63fd6faf5","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P31","datavalue":{"value":{"entity-type":"item","numeric-id":31855,"id":"Q31855"},"type":"wikibase-entityid"},"datatype":"wikibase-item"},"type":"statement","id":"Q1264942$5ef496fa-41e9-03ee-ab7f-40492cb2a08f","rank":"normal"}],"P646":[{"mainsnak":{"snaktype":"value","property":"P646","datavalue":{"value":"/m/03q_0d","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$36DF9487-9217-4956-B28D-F6FFC9DB806B","rank":"normal","references":[{"hash":"2b00cb481cddcac7623114367489b5c194901c4a","snaks":{"P248":[{"snaktype":"value","property":"P248","datavalue":{"value":{"entity-type":"item","numeric-id":15241312,"id":"Q15241312"},"type":"wikibase-entityid"},"datatype":"wikibase-item"}],"P577":[{"snaktype":"value","property":"P577","datavalue":{"value":{"time":"+2013-10-28T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http://www.wikidata.org/entity/Q1985727"},"type":"time"},"datatype":"time"}]},"snaks-order":["P248","P577"]}]}],"P214":[{"mainsnak":{"snaktype":"value","property":"P214","datavalue":{"value":"126370132","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$914EE61C-AA96-4D7C-9753-3C1EDFDC2043","rank":"normal","references":[{"hash":"07bf3e9a3426ab5ce3b2354ef5f1a265064a8dad","snaks":{"P248":[{"snaktype":"value","property":"P248","datavalue":{"value":{"entity-type":"item","numeric-id":54919,"id":"Q54919"},"type":"wikibase-entityid"},"datatype":"wikibase-item"}],"P813":[{"snaktype":"value","property":"P813","datavalue":{"value":{"time":"+2015-08-09T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http://www.wikidata.org/entity/Q1985727"},"type":"time"},"datatype":"time"}]},"snaks-order":["P248","P813"]}]}],"P276":[{"mainsnak":{"snaktype":"value","property":"P276","datavalue":{"value":{"entity-type":"item","numeric-id":1468648,"id":"Q1468648"},"type":"wikibase-entityid"},"datatype":"wikibase-item"},"type":"statement","id":"Q1264942$0a9b080c-4afa-fc37-b943-14eeff580fa8","rank":"normal"}],"P18":[{"mainsnak":{"snaktype":"value","property":"P18","datavalue":{"value":"Dumbarton Oaks - house photo with snow.jpg","type":"string"},"datatype":"commonsMedia"},"type":"statement","id":"Q1264942$3EA08B94-A420-47DB-BBB0-C03FE53AB7FB","rank":"normal","references":[{"hash":"14d2400e3b1d36332748dc330276f099eeaa8800","snaks":{"P143":[{"snaktype":"value","property":"P143","datavalue":{"value":{"entity-type":"item","numeric-id":1551807,"id":"Q1551807"},"type":"wikibase-entityid"},"datatype":"wikibase-item"}]},"snaks-order":["P143"]}]}],"P213":[{"mainsnak":{"snaktype":"value","property":"P213","datavalue":{"value":"0000 0001 2108 6569","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$12ffbd75-42ef-a04d-ce18-837cfdbb8f8d","rank":"normal"}],"P244":[{"mainsnak":{"snaktype":"value","property":"P244","datavalue":{"value":"n80061150","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$48d0f5a6-4b51-0025-6284-5143a7be8cf4","rank":"normal"}],"P1670":[{"mainsnak":{"snaktype":"value","property":"P1670","datavalue":{"value":"0058K5557","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$7f2c9427-4df4-490d-ad02-918c88552abc","rank":"normal"}],"P1017":[{"mainsnak":{"snaktype":"value","property":"P1017","datavalue":{"value":"ADV10090087","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$f98c7030-477c-196d-02bf-a4b86ba69d7c","rank":"normal"}],"P571":[{"mainsnak":{"snaktype":"value","property":"P571","datavalue":{"value":{"time":"+1940-00-00T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http://www.wikidata.org/entity/Q1985727"},"type":"time"},"datatype":"time"},"type":"statement","id":"Q1264942$29c190f0-4a58-c7d1-6cf9-bc51f0383d04","rank":"normal"}],"P3222":[{"mainsnak":{"snaktype":"value","property":"P3222","datavalue":{"value":"dumbarton-oaks-research-library-and-collection","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$C1374BD3-A7D8-45D6-9C86-6E47731BDA4C","rank":"normal"}],"P2581":[{"mainsnak":{"snaktype":"value","property":"P2581","datavalue":{"value":"03824328n","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$3350284F-5750-488C-83D0-41E46E8CC56B","rank":"normal","references":[{"hash":"248ac337a217a5f5eed7139a82a4e60931611af0","snaks":{"P248":[{"snaktype":"value","property":"P248","datavalue":{"value":{"entity-type":"item","numeric-id":4837690,"id":"Q4837690"},"type":"wikibase-entityid"},"datatype":"wikibase-item"}]},"snaks-order":["P248"]}]}],"P3153":[{"mainsnak":{"snaktype":"value","property":"P3153","datavalue":{"value":"100005724","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$D3E36840-8E3A-428D-A7C5-4095EC98188B","rank":"normal","references":[{"hash":"c14b8135fd12fb3164536c79d76c114c1cff1909","snaks":{"P248":[{"snaktype":"value","property":"P248","datavalue":{"value":{"entity-type":"item","numeric-id":19822542,"id":"Q19822542"},"type":"wikibase-entityid"},"datatype":"wikibase-item"}],"P813":[{"snaktype":"value","property":"P813","datavalue":{"value":{"time":"+2017-12-07T00:00:00Z","timezone":0,"before":1,"after":1,"precision":11,"calendarmodel":"http://www.wikidata.org/entity/Q1985727"},"type":"time"},"datatype":"time"}]},"snaks-order":["P248","P813"]}]}],"P1417":[{"mainsnak":{"snaktype":"value","property":"P1417","datavalue":{"value":"place/Dumbarton-Oaks","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$AFC3A786-0A78-4144-80FD-0E1C47962C61","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P1417","datavalue":{"value":"topic/Dumbarton-Oaks-Research-Library-and-Collection","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$B4D9CDEB-6E60-456E-9955-80BE4859FFFE","rank":"normal"}],"P2163":[{"mainsnak":{"snaktype":"value","property":"P2163","datavalue":{"value":"544573","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$e2597e27-4303-2c4e-6205-1d9de134513b","rank":"normal"}],"P3430":[{"mainsnak":{"snaktype":"value","property":"P3430","datavalue":{"value":"w6sf71t8","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$4c0f9bb8-48dc-c694-e87a-b965bffa979a","rank":"normal"}],"P5361":[{"mainsnak":{"snaktype":"value","property":"P5361","datavalue":{"value":"DumbartonOaks","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$DBF7064C-7454-4908-BEA3-3D6308A71706","rank":"normal"}],"P5383":[{"mainsnak":{"snaktype":"value","property":"P5383","datavalue":{"value":"7789","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$C19489F5-0ECD-44C2-9305-4936EADBF7A8","rank":"normal","references":[{"hash":"fc5c0700e4ea82f652ee81db5553c3a44446a105","snaks":{"P854":[{"snaktype":"value","property":"P854","datavalue":{"value":"https://www.archinform.net/service/wd_aipro.php","type":"string"},"datatype":"url"}],"P813":[{"snaktype":"value","property":"P813","datavalue":{"value":{"time":"+2018-07-02T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http://www.wikidata.org/entity/Q1985727"},"type":"time"},"datatype":"time"}]},"snaks-order":["P854","P813"]}]}],"P268":[{"mainsnak":{"snaktype":"value","property":"P268","datavalue":{"value":"12126836p","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$123FF3BC-682F-4010-85A5-425696D16A64","rank":"normal","references":[{"hash":"5a858a70d6ac562123c1debf25a5aed93a5c4939","snaks":{"P248":[{"snaktype":"value","property":"P248","datavalue":{"value":{"entity-type":"item","numeric-id":19938912,"id":"Q19938912"},"type":"wikibase-entityid"},"datatype":"wikibase-item"}],"P813":[{"snaktype":"value","property":"P813","datavalue":{"value":{"time":"+2015-08-26T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http://www.wikidata.org/entity/Q1985727"},"type":"time"},"datatype":"time"}]},"snaks-order":["P248","P813"]}]}],"P269":[{"mainsnak":{"snaktype":"value","property":"P269","datavalue":{"value":"13632259X","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$C4106BFC-FA27-4518-B8CB-C0E93B1D5181","rank":"normal","references":[{"hash":"5a858a70d6ac562123c1debf25a5aed93a5c4939","snaks":{"P248":[{"snaktype":"value","property":"P248","datavalue":{"value":{"entity-type":"item","numeric-id":19938912,"id":"Q19938912"},"type":"wikibase-entityid"},"datatype":"wikibase-item"}],"P813":[{"snaktype":"value","property":"P813","datavalue":{"value":{"time":"+2015-08-26T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http://www.wikidata.org/entity/Q1985727"},"type":"time"},"datatype":"time"}]},"snaks-order":["P248","P813"]}]}],"P749":[{"mainsnak":{"snaktype":"value","property":"P749","datavalue":{"value":{"entity-type":"item","numeric-id":13371,"id":"Q13371"},"type":"wikibase-entityid"},"datatype":"wikibase-item"},"type":"statement","id":"Q1264942$155bf2f2-4980-f469-2829-61e0a42d568c","rank":"normal"}],"P101":[{"mainsnak":{"snaktype":"value","property":"P101","datavalue":{"value":{"entity-type":"item","numeric-id":648154,"id":"Q648154"},"type":"wikibase-entityid"},"datatype":"wikibase-item"},"type":"statement","id":"Q1264942$b876b9d8-4e74-b5d9-1927-bbb32aa835e6","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P101","datavalue":{"value":{"entity-type":"item","numeric-id":1964546,"id":"Q1964546"},"type":"wikibase-entityid"},"datatype":"wikibase-item"},"type":"statement","id":"Q1264942$469b910a-469a-6df3-d8d2-7060e9890ded","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P101","datavalue":{"value":{"entity-type":"item","numeric-id":47844,"id":"Q47844"},"type":"wikibase-entityid"},"datatype":"wikibase-item"},"type":"statement","id":"Q1264942$944ea844-41a2-d325-41e6-7a72213fe068","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P101","datavalue":{"value":{"entity-type":"item","numeric-id":202390,"id":"Q202390"},"type":"wikibase-entityid"},"datatype":"wikibase-item"},"type":"statement","id":"Q1264942$d2e5da95-4178-f729-312f-0cbb3a95c13e","rank":"normal"}],"P3348":[{"mainsnak":{"snaktype":"value","property":"P3348","datavalue":{"value":"43992","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$dd26a0d0-47da-ec9b-3b10-f558dfd84ed0","rank":"normal"}],"P691":[{"mainsnak":{"snaktype":"value","property":"P691","datavalue":{"value":"kn20090113017","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$2DDD84BA-6506-42FB-B0AB-74FF194CC65F","rank":"normal","references":[{"hash":"2ea34d91e316dc345b07eda8fdc15de9dd505cfd","snaks":{"P214":[{"snaktype":"value","property":"P214","datavalue":{"value":"126370132","type":"string"},"datatype":"external-id"}],"P248":[{"snaktype":"value","property":"P248","datavalue":{"value":{"entity-type":"item","numeric-id":54919,"id":"Q54919"},"type":"wikibase-entityid"},"datatype":"wikibase-item"}],"P813":[{"snaktype":"value","property":"P813","datavalue":{"value":{"time":"+2018-12-17T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http://www.wikidata.org/entity/Q1985727"},"type":"time"},"datatype":"time"}]},"snaks-order":["P214","P248","P813"]}]}],"P127":[{"mainsnak":{"snaktype":"value","property":"P127","datavalue":{"value":{"entity-type":"item","numeric-id":13371,"id":"Q13371"},"type":"wikibase-entityid"},"datatype":"wikibase-item"},"type":"statement","qualifiers":{"P580":[{"snaktype":"value","property":"P580","hash":"db280088b0cb6e154ee3aa6abd073619d5c712a0","datavalue":{"value":{"time":"+1940-00-00T00:00:00Z","timezone":0,"before":0,"after":0,"precision":9,"calendarmodel":"http://www.wikidata.org/entity/Q1985727"},"type":"time"},"datatype":"time"}]},"qualifiers-order":["P580"],"id":"Q1264942$7457d01d-4605-8190-915b-56990704032b","rank":"normal"}],"P5818":[{"mainsnak":{"snaktype":"value","property":"P5818","datavalue":{"value":"4599","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$aa3dfbbb-4cfc-9944-cab8-173cb0dadde9","rank":"normal"}],"P4146":[{"mainsnak":{"snaktype":"value","property":"P4146","datavalue":{"value":"339","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$CFF9357F-676E-4357-9594-9A8883740ECA","rank":"normal"}],"P3500":[{"mainsnak":{"snaktype":"value","property":"P3500","datavalue":{"value":"8355","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$3E65F28F-F3C6-4C10-A15B-BBCB2B2384B1","rank":"normal","references":[{"hash":"6a3a3de3208a18f7470e4d83d4208b5ac2f57e20","snaks":{"P248":[{"snaktype":"value","property":"P248","datavalue":{"value":{"entity-type":"item","numeric-id":64159407,"id":"Q64159407"},"type":"wikibase-entityid"},"datatype":"wikibase-item"}],"P356":[{"snaktype":"value","property":"P356","datavalue":{"value":"10.5281/ZENODO.758080","type":"string"},"datatype":"external-id"}],"P813":[{"snaktype":"value","property":"P813","datavalue":{"value":{"time":"+2019-05-29T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http://www.wikidata.org/entity/Q1985727"},"type":"time"},"datatype":"time"}]},"snaks-order":["P248","P356","P813"]}]}],"P7514":[{"mainsnak":{"snaktype":"value","property":"P7514","datavalue":{"value":{"entity-type":"item","numeric-id":437714,"id":"Q437714"},"type":"wikibase-entityid"},"datatype":"wikibase-item"},"type":"statement","id":"Q1264942$e293895c-4089-92cb-d04d-f8a6bbdce239","rank":"normal"}],"P7859":[{"mainsnak":{"snaktype":"value","property":"P7859","datavalue":{"value":"lccn-n80061150","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$EEADBF38-DF92-45FF-9EF7-D90CC9DCC24E","rank":"normal","references":[{"hash":"fa9b3c964b02bdb40d4b735e5e8cea999edb7293","snaks":{"P214":[{"snaktype":"value","property":"P214","datavalue":{"value":"126370132","type":"string"},"datatype":"external-id"}]},"snaks-order":["P214"]}]}],"P3977":[{"mainsnak":{"snaktype":"value","property":"P3977","datavalue":{"value":"47839","type":"string"},"datatype":"external-id"},"type":"statement","qualifiers":{"P1810":[{"snaktype":"value","property":"P1810","hash":"207e62c8462fcebfe5d28fe799ff271a279cad57","datavalue":{"value":"Dumbarton Oaks","type":"string"},"datatype":"string"}]},"qualifiers-order":["P1810"],"id":"Q1264942$8e6806dd-431f-e6c3-7665-fa27a99408bc","rank":"normal"},{"mainsnak":{"snaktype":"value","property":"P3977","datavalue":{"value":"4081919","type":"string"},"datatype":"external-id"},"type":"statement","qualifiers":{"P1810":[{"snaktype":"value","property":"P1810","hash":"5b0af63eef2b4e3e8bc6acaa0de958e4c854ec16","datavalue":{"value":"Dumbarton Oaks Research Library & Collection","type":"string"},"datatype":"string"}]},"qualifiers-order":["P1810"],"id":"Q1264942$137def4b-4304-f68b-d26f-fc52647171fc","rank":"normal"}],"P8034":[{"mainsnak":{"snaktype":"value","property":"P8034","datavalue":{"value":"494/3605","type":"string"},"datatype":"external-id"},"type":"statement","id":"Q1264942$8391F7EE-77CA-4EA7-88A6-8BDBD3985C4B","rank":"normal","references":[{"hash":"0e1dd32dd8684bd8397ff072ede359c6195d9375","snaks":{"P214":[{"snaktype":"value","property":"P214","datavalue":{"value":"126370132","type":"string"},"datatype":"external-id"}],"P248":[{"snaktype":"value","property":"P248","datavalue":{"value":{"entity-type":"item","numeric-id":54919,"id":"Q54919"},"type":"wikibase-entityid"},"datatype":"wikibase-item"}],"P813":[{"snaktype":"value","property":"P813","datavalue":{"value":{"time":"+2020-07-16T00:00:00Z","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":"http://www.wikidata.org/entity/Q1985727"},"type":"time"},"datatype":"time"}]},"snaks-order":["P214","P248","P813"]}]}]},"sitelinks":{"arwiki":{"site":"arwiki","title":"\u062f\u0648\u0645\u0628\u0627\u0631\u062a\u0648\u0646 \u0623\u0648\u0643\u0633","badges":[],"url":"https://ar.wikipedia.org/wiki/%D8%AF%D9%88%D9%85%D8%A8%D8%A7%D8%B1%D8%AA%D9%88%D9%86_%D8%A3%D9%88%D9%83%D8%B3"},"astwiki":{"site":"astwiki","title":"Dumbarton Oaks","badges":[],"url":"https://ast.wikipedia.org/wiki/Dumbarton_Oaks"},"bewiki":{"site":"bewiki","title":"\u0414\u0443\u043c\u0431\u0430\u0440\u0442\u0430\u043d-\u041e\u043a\u0441","badges":[],"url":"https://be.wikipedia.org/wiki/%D0%94%D1%83%D0%BC%D0%B1%D0%B0%D1%80%D1%82%D0%B0%D0%BD-%D0%9E%D0%BA%D1%81"},"cawiki":{"site":"cawiki","title":"Dumbarton Oaks","badges":[],"url":"https://ca.wikipedia.org/wiki/Dumbarton_Oaks"},"commonswiki":{"site":"commonswiki","title":"Category:Dumbarton Oaks","badges":[],"url":"https://commons.wikimedia.org/wiki/Category:Dumbarton_Oaks"},"dewiki":{"site":"dewiki","title":"Dumbarton Oaks","badges":[],"url":"https://de.wikipedia.org/wiki/Dumbarton_Oaks"},"enwiki":{"site":"enwiki","title":"Dumbarton Oaks","badges":[],"url":"https://en.wikipedia.org/wiki/Dumbarton_Oaks"},"eswiki":{"site":"eswiki","title":"Dumbarton Oaks","badges":[],"url":"https://es.wikipedia.org/wiki/Dumbarton_Oaks"},"fawiki":{"site":"fawiki","title":"\u062f\u0627\u0645\u0628\u0631\u062a\u0648\u0646 \u0627\u06a9\u0633","badges":[],"url":"https://fa.wikipedia.org/wiki/%D8%AF%D8%A7%D9%85%D8%A8%D8%B1%D8%AA%D9%88%D9%86_%D8%A7%DA%A9%D8%B3"},"frwiki":{"site":"frwiki","title":"Dumbarton Oaks","badges":[],"url":"https://fr.wikipedia.org/wiki/Dumbarton_Oaks"},"hewiki":{"site":"hewiki","title":"\u05d3\u05de\u05d1\u05e8\u05d8\u05d5\u05df \u05d0\u05d5\u05e7\u05e1","badges":[],"url":"https://he.wikipedia.org/wiki/%D7%93%D7%9E%D7%91%D7%A8%D7%98%D7%95%D7%9F_%D7%90%D7%95%D7%A7%D7%A1"},"idwiki":{"site":"idwiki","title":"Dumbarton Oaks","badges":[],"url":"https://id.wikipedia.org/wiki/Dumbarton_Oaks"},"itwiki":{"site":"itwiki","title":"Dumbarton Oaks","badges":[],"url":"https://it.wikipedia.org/wiki/Dumbarton_Oaks"},"jawiki":{"site":"jawiki","title":"\u30c0\u30f3\u30d0\u30fc\u30c8\u30f3\u30fb\u30aa\u30fc\u30af\u30b9","badges":[],"url":"https://ja.wikipedia.org/wiki/%E3%83%80%E3%83%B3%E3%83%90%E3%83%BC%E3%83%88%E3%83%B3%E3%83%BB%E3%82%AA%E3%83%BC%E3%82%AF%E3%82%B9"},"plwiki":{"site":"plwiki","title":"Dumbarton Oaks","badges":[],"url":"https://pl.wikipedia.org/wiki/Dumbarton_Oaks"},"ptwiki":{"site":"ptwiki","title":"Dumbarton Oaks","badges":[],"url":"https://pt.wikipedia.org/wiki/Dumbarton_Oaks"},"rowiki":{"site":"rowiki","title":"Dumbarton Oaks","badges":[],"url":"https://ro.wikipedia.org/wiki/Dumbarton_Oaks"},"ruwiki":{"site":"ruwiki","title":"\u0414\u0443\u043c\u0431\u0430\u0440\u0442\u043e\u043d-\u041e\u043a\u0441","badges":[],"url":"https://ru.wikipedia.org/wiki/%D0%94%D1%83%D0%BC%D0%B1%D0%B0%D1%80%D1%82%D0%BE%D0%BD-%D0%9E%D0%BA%D1%81"},"srwiki":{"site":"srwiki","title":"\u0414\u0430\u043c\u0431\u0435\u0440\u0442\u043e\u043d \u041e\u0443\u043a\u0441","badges":[],"url":"https://sr.wikipedia.org/wiki/%D0%94%D0%B0%D0%BC%D0%B1%D0%B5%D1%80%D1%82%D0%BE%D0%BD_%D0%9E%D1%83%D0%BA%D1%81"},"trwiki":{"site":"trwiki","title":"Dumbarton Oaks","badges":[],"url":"https://tr.wikipedia.org/wiki/Dumbarton_Oaks"},"zhwiki":{"site":"zhwiki","title":"\u6566\u5df4\u9813\u6a61\u6a39\u5712","badges":[],"url":"https://zh.wikipedia.org/wiki/%E6%95%A6%E5%B7%B4%E9%A0%93%E6%A9%A1%E6%A8%B9%E5%9C%92"}}}}} \ No newline at end of file diff --git a/jest.config.mjs b/jest.config.mjs index 2dc92fe..e088894 100644 --- a/jest.config.mjs +++ b/jest.config.mjs @@ -18,6 +18,7 @@ export default { roots: ['/src', '/test'], moduleNameMapper: { '^SolidLogic$': 'solid-logic', - '^\\$rdf$': 'rdflib' + '^\\$rdf$': 'rdflib', + '\\.css$': '/test/__mocks__/styleMock.js' }, } diff --git a/package-lock.json b/package-lock.json index 22ae04b..d5d6e1d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,13 @@ { "name": "contacts-pane", - "version": "3.0.1", + "version": "3.1.0-newStyle", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "contacts-pane", - "version": "3.0.1", + "version": "3.1.0-newStyle", "license": "MIT", - "dependencies": { - "mime-types": "^3.0.2" - }, "devDependencies": { "@babel/cli": "^7.28.6", "@babel/core": "^7.28.6", @@ -22,20 +19,30 @@ "babel-jest": "^30.2.0", "babel-loader": "^10.0.0", "babel-plugin-inline-import": "^3.0.0", + "baseline-browser-mapping": "^2.9.19", "buffer": "^6.0.3", + "copy-webpack-plugin": "^13.0.1", + "css-loader": "^7.1.3", "eslint": "^9.39.2", "eslint-plugin-import": "^2.32.0", "globals": "^17.1.0", + "html-webpack-plugin": "^5.6.6", "jest": "^30.2.0", "jest-environment-jsdom": "^30.2.0", "jest-fetch-mock": "^3.0.3", "neostandard": "^0.12.2", + "node-polyfill-webpack-plugin": "^4.1.0", "pane-registry": "^3.0.1", "rdflib": "^2.3.5", "solid-logic": "^4.0.2", "solid-ui": "^3.0.3", + "style-loader": "^4.0.0", + "terser-webpack-plugin": "^5.3.16", "typescript": "^5.9.3", - "typescript-transpile-only": "^0.0.4" + "typescript-transpile-only": "^0.0.4", + "webpack": "^5.0.0", + "webpack-cli": "^6.0.1", + "webpack-dev-server": "^5.2.3" }, "peerDependencies": { "rdflib": "^2.3.5", @@ -2024,6 +2031,16 @@ "node": ">=18.0" } }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", + "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.17.0" + } + }, "node_modules/@emnapi/core": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", @@ -3114,7 +3131,6 @@ "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -3138,6 +3154,13 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true, + "license": "MIT" + }, "node_modules/@napi-rs/wasm-runtime": { "version": "0.2.12", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", @@ -3198,6 +3221,242 @@ "node": ">=12.4.0" } }, + "node_modules/@peculiar/asn1-cms": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.6.1.tgz", + "integrity": "sha512-vdG4fBF6Lkirkcl53q6eOdn3XYKt+kJTG59edgRZORlg/3atWWEReRCx5rYE1ZzTTX6vLK5zDMjHh7vbrcXGtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "@peculiar/asn1-x509-attr": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-cms/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@peculiar/asn1-csr": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.6.1.tgz", + "integrity": "sha512-WRWnKfIocHyzFYQTka8O/tXCiBquAPSrRjXbOkHbO4qdmS6loffCEGs+rby6WxxGdJCuunnhS2duHURhjyio6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-csr/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@peculiar/asn1-ecc": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.6.1.tgz", + "integrity": "sha512-+Vqw8WFxrtDIN5ehUdvlN2m73exS2JVG0UAyfVB31gIfor3zWEAQPD+K9ydCxaj3MLen9k0JhKpu9LqviuCE1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-ecc/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@peculiar/asn1-pfx": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.6.1.tgz", + "integrity": "sha512-nB5jVQy3MAAWvq0KY0R2JUZG8bO/bTLpnwyOzXyEh/e54ynGTatAR+csOnXkkVD9AFZ2uL8Z7EV918+qB1qDvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.6.1", + "@peculiar/asn1-pkcs8": "^2.6.1", + "@peculiar/asn1-rsa": "^2.6.1", + "@peculiar/asn1-schema": "^2.6.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pfx/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@peculiar/asn1-pkcs8": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.1.tgz", + "integrity": "sha512-JB5iQ9Izn5yGMw3ZG4Nw3Xn/hb/G38GYF3lf7WmJb8JZUydhVGEjK/ZlFSWhnlB7K/4oqEs8HnfFIKklhR58Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs8/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@peculiar/asn1-pkcs9": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.1.tgz", + "integrity": "sha512-5EV8nZoMSxeWmcxWmmcolg22ojZRgJg+Y9MX2fnE2bGRo5KQLqV5IL9kdSQDZxlHz95tHvIq9F//bvL1OeNILw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.6.1", + "@peculiar/asn1-pfx": "^2.6.1", + "@peculiar/asn1-pkcs8": "^2.6.1", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "@peculiar/asn1-x509-attr": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs9/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@peculiar/asn1-rsa": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.6.1.tgz", + "integrity": "sha512-1nVMEh46SElUt5CB3RUTV4EG/z7iYc7EoaDY5ECwganibQPkZ/Y2eMsTKB/LeyrUJ+W/tKoD9WUqIy8vB+CEdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-rsa/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.6.0.tgz", + "integrity": "sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-schema/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@peculiar/asn1-x509": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.6.1.tgz", + "integrity": "sha512-O9jT5F1A2+t3r7C4VT7LYGXqkGLK7Kj1xFpz7U0isPrubwU5PbDoyYtx6MiGst29yq7pXN5vZbQFKRCP+lLZlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509-attr": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.1.tgz", + "integrity": "sha512-tlW6cxoHwgcQghnJwv3YS+9OO1737zgPogZ+CgWRUK4roEwIPzRH4JEiG770xe5HX2ATfCpmX60gurfWIF9dcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509-attr/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@peculiar/asn1-x509/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@peculiar/x509": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.3.tgz", + "integrity": "sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.6.0", + "@peculiar/asn1-csr": "^2.6.0", + "@peculiar/asn1-ecc": "^2.6.0", + "@peculiar/asn1-pkcs9": "^2.6.0", + "@peculiar/asn1-rsa": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "pvtsutils": "^1.3.6", + "reflect-metadata": "^0.2.2", + "tslib": "^2.8.1", + "tsyringe": "^4.10.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@peculiar/x509/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -3383,13 +3642,54 @@ "@babel/types": "^7.28.2" } }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, "node_modules/@types/eslint": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -3401,7 +3701,6 @@ "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -3414,6 +3713,56 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/express": { + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "^1" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.8", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz", + "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.17", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", + "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", @@ -3478,6 +3827,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/node": { "version": "24.10.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", @@ -3488,6 +3844,80 @@ "undici-types": "~7.16.0" } }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", @@ -3502,6 +3932,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/yargs": { "version": "17.0.35", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", @@ -4175,7 +4615,6 @@ "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" @@ -4186,24 +4625,21 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", @@ -4211,7 +4647,6 @@ "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.13.2", "@webassemblyjs/helper-api-error": "1.13.2", @@ -4223,8 +4658,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.14.1", @@ -4232,7 +4666,6 @@ "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -4246,7 +4679,6 @@ "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -4257,7 +4689,6 @@ "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -4267,8 +4698,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.14.1", @@ -4276,7 +4706,6 @@ "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -4294,7 +4723,6 @@ "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", @@ -4309,7 +4737,6 @@ "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -4323,7 +4750,6 @@ "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-api-error": "1.13.2", @@ -4339,37 +4765,81 @@ "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, - "node_modules/@xmldom/xmldom": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", - "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", + "node_modules/@webpack-cli/configtest": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", + "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", "dev": true, "license": "MIT", "engines": { - "node": ">=10.0.0" + "node": ">=18.12.0" + }, + "peerDependencies": { + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" } }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", + "node_modules/@webpack-cli/info": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", + "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", + "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", + "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true, - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true, - "license": "Apache-2.0", - "peer": true + "license": "Apache-2.0" }, "node_modules/abort-controller": { "version": "3.0.0", @@ -4384,6 +4854,53 @@ "node": ">=6.5" } }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", @@ -4403,7 +4920,6 @@ "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10.13.0" }, @@ -4454,7 +4970,6 @@ "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ajv": "^8.0.0" }, @@ -4473,7 +4988,6 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -4490,8 +5004,7 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/ansi-escapes": { "version": "4.3.2", @@ -4509,6 +5022,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.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", @@ -4586,6 +5112,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true, + "license": "MIT" + }, "node_modules/array-includes": { "version": "3.1.9", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", @@ -4729,6 +5262,61 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/asn1js": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.7.tgz", + "integrity": "sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/asn1js/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/assert": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", + "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" + } + }, "node_modules/async-function": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", @@ -4971,13 +5559,19 @@ "baseline-browser-mapping": "dist/cli.js" } }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true, + "license": "MIT" + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "license": "MIT", - "optional": true, "engines": { "node": ">=8" }, @@ -4985,6 +5579,86 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/bn.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "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/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, "node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", @@ -5008,6 +5682,156 @@ "node": ">=8" } }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/browser-resolve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "^1.17.0" + } + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", + "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^5.2.1", + "randombytes": "^2.1.0", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.5.tgz", + "integrity": "sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw==", + "dev": true, + "license": "ISC", + "dependencies": { + "bn.js": "^5.2.2", + "browserify-rsa": "^4.1.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.6.1", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.9", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/browserify-sign/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "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/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/browserify-sign/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pako": "~1.0.5" + } + }, "node_modules/browserslist": { "version": "4.28.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", @@ -5084,32 +5908,82 @@ "dev": true, "license": "MIT" }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" + "run-applescript": "^7.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, "license": "MIT", - "dependencies": { + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/bytestreamjs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-2.0.1.tgz", + "integrity": "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" }, @@ -5144,6 +6018,24 @@ "node": ">=6" } }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camel-case/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -5155,15 +6047,9 @@ } }, "node_modules/caniuse-lite": { -<<<<<<< dependabot/npm_and_yarn/npm_and_yarn-c081eec248 "version": "1.0.30001769", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz", "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==", -======= - "version": "1.0.30001767", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001767.tgz", - "integrity": "sha512-34+zUAMhSH+r+9eKmYG+k2Rpt8XttfE4yXAjoZvkAPs15xcYQhyBYdalJ65BzivAvGRMViEjy6oKr/S91loekQ==", ->>>>>>> main "dev": true, "funding": [ { @@ -5224,7 +6110,6 @@ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -5250,7 +6135,6 @@ "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6.0" } @@ -5271,6 +6155,21 @@ "node": ">=8" } }, + "node_modules/cipher-base": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", + "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.2" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/cjs-module-lexer": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.1.tgz", @@ -5278,6 +6177,19 @@ "dev": true, "license": "MIT" }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -5293,6 +6205,21 @@ "node": ">=12" } }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -5331,6 +6258,13 @@ "dev": true, "license": "MIT" }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, "node_modules/commander": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", @@ -5351,6 +6285,55 @@ "node": ">= 12.0.0" } }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -5358,6 +6341,52 @@ "dev": true, "license": "MIT" }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -5365,6 +6394,70 @@ "dev": true, "license": "MIT" }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-webpack-plugin": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-13.0.1.tgz", + "integrity": "sha512-J+YV3WfhY6W/Xf9h+J1znYuqTye2xkBUIGyTPWuBAT27qajBa5mR4f8WBmfDY3YjRftT2kqZZiLi1qf0H+UOFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-parent": "^6.0.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.2.0", + "serialize-javascript": "^6.0.2", + "tinyglobby": "^0.2.12" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/core-js": { "version": "3.47.0", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.47.0.tgz", @@ -5391,6 +6484,67 @@ "url": "https://opencollective.com/core-js" } }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, "node_modules/cross-fetch": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", @@ -5416,6 +6570,33 @@ "node": ">= 8" } }, + "node_modules/crypto-browserify": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", + "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserify-cipher": "^1.0.1", + "browserify-sign": "^4.2.3", + "create-ecdh": "^4.0.4", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "diffie-hellman": "^5.0.3", + "hash-base": "~3.0.4", + "inherits": "^2.0.4", + "pbkdf2": "^3.1.2", + "public-encrypt": "^4.0.3", + "randombytes": "^2.1.0", + "randomfill": "^1.0.4" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/crypto-js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", @@ -5423,44 +6604,136 @@ "dev": true, "license": "MIT" }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/cssstyle": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", - "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", + "node_modules/css-loader": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.3.tgz", + "integrity": "sha512-frbERmjT0UC5lMheWpJmMilnt9GEhbZJN/heUb7/zaJYeIzj5St9HvDcfshzzOqbsS+rYpMk++2SD3vGETDSyA==", "dev": true, "license": "MIT", "dependencies": { - "@asamuzakjp/css-color": "^3.2.0", - "rrweb-cssom": "^0.8.0" + "icss-utils": "^5.1.0", + "postcss": "^8.4.40", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.6.3" }, "engines": { - "node": ">=18" + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.27.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, - "node_modules/data-urls": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", - "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "node_modules/css-loader/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=18" + "node": ">=10" } }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "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==", + "dev": true, + "license": "BSD-2-Clause", + "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-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "license": "BSD-2-Clause", + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssstyle": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", @@ -5569,6 +6842,36 @@ "node": ">=0.10.0" } }, + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -5587,6 +6890,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", @@ -5605,6 +6921,38 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "license": "MIT", + "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", @@ -5615,6 +6963,45 @@ "node": ">=8" } }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -5635,6 +7022,116 @@ "dev": true, "license": "MIT" }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domain-browser": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.22.0.tgz", + "integrity": "sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "license": "BSD-2-Clause", + "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==", + "dev": true, + "license": "BSD-2-Clause", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dot-case/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -5657,19 +7154,43 @@ "dev": true, "license": "MIT" }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, "node_modules/electron-to-chromium": { -<<<<<<< dependabot/npm_and_yarn/npm_and_yarn-c081eec248 "version": "1.5.286", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", -======= - "version": "1.5.283", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.283.tgz", - "integrity": "sha512-3vifjt1HgrGW/h76UEeny+adYApveS9dH2h3p57JYzBSXJIKUJAvtmIytDKjcSCt9xHfrNCFJ7gts6vkhuq++w==", ->>>>>>> main "dev": true, "license": "ISC" }, + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" + }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", @@ -5690,6 +7211,16 @@ "dev": true, "license": "MIT" }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/enhanced-resolve": { "version": "5.19.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", @@ -5717,6 +7248,19 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/envinfo": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.21.0.tgz", + "integrity": "sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/error-ex": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", @@ -5849,8 +7393,7 @@ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/es-object-atoms": { "version": "1.1.1", @@ -6573,6 +8116,16 @@ "node": ">=0.10.0" } }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", @@ -6583,6 +8136,13 @@ "node": ">=6" } }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true, + "license": "MIT" + }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -6593,6 +8153,17 @@ "node": ">=0.8.x" } }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -6645,15 +8216,79 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", + "node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, @@ -6681,8 +8316,30 @@ "url": "https://opencollective.com/fastify" } ], - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } }, "node_modules/fb-watchman": { "version": "2.0.2", @@ -6720,6 +8377,42 @@ "node": ">=8" } }, + "node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -6737,6 +8430,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, "node_modules/flat-cache": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", @@ -6758,6 +8461,27 @@ "dev": true, "license": "ISC" }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/for-each": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", @@ -6804,6 +8528,26 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/fs-readdir-recursive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", @@ -7025,7 +8769,6 @@ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", - "optional": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -7038,8 +8781,7 @@ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true, - "license": "BSD-2-Clause", - "peer": true + "license": "BSD-2-Clause" }, "node_modules/glob/node_modules/brace-expansion": { "version": "1.1.12", @@ -7129,6 +8871,13 @@ "dev": true, "license": "MIT" }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true, + "license": "MIT" + }, "node_modules/has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", @@ -7210,6 +8959,31 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hash-base": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", + "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -7223,6 +8997,81 @@ "node": ">= 0.4" } }, + "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==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/html-encoding-sniffer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", @@ -7243,6 +9092,151 @@ "dev": true, "license": "MIT" }, + "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==", + "dev": true, + "license": "MIT", + "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-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.6.6", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.6.tgz", + "integrity": "sha512-bLjW01UTrvoWTJQL5LsMRo1SypHW80FTm12OJRSnr3v6YHNhfe+1r0MYUZJMACxnCHURVnBWRwAsWs2yPU9Ezw==", + "dev": true, + "license": "MIT", + "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": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "license": "MIT", + "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": "7.0.2", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", @@ -7257,6 +9251,38 @@ "node": ">= 14" } }, + "node_modules/http-proxy-middleware": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "dev": true, + "license": "MIT", + "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-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true, + "license": "MIT" + }, "node_modules/https-proxy-agent": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", @@ -7281,6 +9307,16 @@ "node": ">=10.17.0" } }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -7294,6 +9330,19 @@ "node": ">=0.10.0" } }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -7426,7 +9475,44 @@ "node": ">= 0.4" } }, - "node_modules/is-array-buffer": { + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ipaddr.js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", + "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", @@ -7493,7 +9579,6 @@ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -7605,6 +9690,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "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", @@ -7684,6 +9785,25 @@ "node": ">=0.10.0" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", @@ -7697,6 +9817,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negative-zero": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", @@ -7710,6 +9847,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-network-error": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.0.tgz", + "integrity": "sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -7737,6 +9887,32 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -7902,6 +10078,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", @@ -7916,6 +10108,26 @@ "dev": true, "license": "ISC" }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isomorphic-timers-promises": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz", + "integrity": "sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", @@ -8984,6 +11196,16 @@ "json-buffer": "3.0.1" } }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ky": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.1.tgz", @@ -8997,6 +11219,17 @@ "url": "https://github.com/sindresorhus/ky?sponsor=1" } }, + "node_modules/launch-editor": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz", + "integrity": "sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" + } + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -9034,7 +11267,6 @@ "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6.11.5" }, @@ -9059,6 +11291,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -9086,6 +11325,23 @@ "loose-envify": "cli.js" } }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lower-case/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -9140,6 +11396,556 @@ "node": ">= 0.4" } }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.56.10.tgz", + "integrity": "sha512-eLvzyrwqLHnLYalJP7YZ3wBe79MXktMdfQbvMrVD80K+NhrIukCVBvgP30zTJYEEDh9hZ/ep9z0KOdD7FSHo7w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.56.10", + "@jsonjoy.com/fs-fsa": "4.56.10", + "@jsonjoy.com/fs-node": "4.56.10", + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-to-fsa": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "@jsonjoy.com/fs-print": "4.56.10", + "@jsonjoy.com/fs-snapshot": "4.56.10", + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.0.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", + "tslib": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/buffers": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz", + "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-core": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.56.10.tgz", + "integrity": "sha512-PyAEA/3cnHhsGcdY+AmIU+ZPqTuZkDhCXQ2wkXypdLitSpd6d5Ivxhnq4wa2ETRWFVJGabYynBWxIijOswSmOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-fsa": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.56.10.tgz", + "integrity": "sha512-/FVK63ysNzTPOnCCcPoPHt77TOmachdMS422txM4KhxddLdbW1fIbFMYH0AM0ow/YchCyS5gqEjKLNyv71j/5Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.56.10", + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-node": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.56.10.tgz", + "integrity": "sha512-7R4Gv3tkUdW3dXfXiOkqxkElxKNVdd8BDOWC0/dbERd0pXpPY+s2s1Mino+aTvkGrFPiY+mmVxA7zhskm4Ue4Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.56.10", + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "@jsonjoy.com/fs-print": "4.56.10", + "@jsonjoy.com/fs-snapshot": "4.56.10", + "glob-to-regex.js": "^1.0.0", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-node-builtins": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.56.10.tgz", + "integrity": "sha512-uUnKz8R0YJyKq5jXpZtkGV9U0pJDt8hmYcLRrPjROheIfjMXsz82kXMgAA/qNg0wrZ1Kv+hrg7azqEZx6XZCVw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-node-to-fsa": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.56.10.tgz", + "integrity": "sha512-oH+O6Y4lhn9NyG6aEoFwIBNKZeYy66toP5LJcDOMBgL99BKQMUf/zWJspdRhMdn/3hbzQsZ8EHHsuekbFLGUWw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-fsa": "4.56.10", + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-node-utils": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.56.10.tgz", + "integrity": "sha512-8EuPBgVI2aDPwFdaNQeNpHsyqPi3rr+85tMNG/lHvQLiVjzoZsvxA//Xd8aB567LUhy4QS03ptT+unkD/DIsNg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.56.10" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-print": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.56.10.tgz", + "integrity": "sha512-JW4fp5mAYepzFsSGrQ48ep8FXxpg4niFWHdF78wDrFGof7F3tKDJln72QFDEn/27M1yHd4v7sKHHVPh78aWcEw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-utils": "4.56.10", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-snapshot": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.56.10.tgz", + "integrity": "sha512-DkR6l5fj7+qj0+fVKm/OOXMGfDFCGXLfyHkORH3DF8hxkpDgIHbhf/DwncBMs2igu/ST7OEkexn1gIqoU6Y+9g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^17.65.0", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "@jsonjoy.com/json-pack": "^17.65.0", + "@jsonjoy.com/util": "^17.65.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz", + "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz", + "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz", + "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "17.67.0", + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0", + "@jsonjoy.com/json-pointer": "17.67.0", + "@jsonjoy.com/util": "17.67.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz", + "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/util": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz", + "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/json-pack": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/json-pack/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/util/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/glob-to-regex.js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", + "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/thingies": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", + "integrity": "sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "^2" + } + }, + "node_modules/memfs/node_modules/tree-dump": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", + "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -9147,6 +11953,16 @@ "dev": true, "license": "MIT" }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -9161,10 +11977,45 @@ "node": ">=8.6" } }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/mime-db": { "version": "1.54.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -9174,6 +12025,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dev": true, "license": "MIT", "dependencies": { "mime-db": "^1.54.0" @@ -9206,6 +12058,20 @@ "node": ">=4" } }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true, + "license": "MIT" + }, "node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -9249,6 +12115,20 @@ "dev": true, "license": "MIT" }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, "node_modules/n3": { "version": "1.26.0", "resolved": "https://registry.npmjs.org/n3/-/n3-1.26.0.tgz", @@ -9263,6 +12143,25 @@ "node": ">=12.0" } }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/napi-postinstall": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", @@ -9286,13 +12185,22 @@ "dev": true, "license": "MIT" }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/neostandard": { "version": "0.12.2", @@ -9336,6 +12244,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/no-case/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -9389,6 +12315,36 @@ "dev": true, "license": "MIT" }, + "node_modules/node-polyfill-webpack-plugin": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/node-polyfill-webpack-plugin/-/node-polyfill-webpack-plugin-4.1.0.tgz", + "integrity": "sha512-b4ei444EKkOagG/yFqojrD3QTYM5IOU1f8tn9o6uwrG4qL+brI7oVhjPVd0ZL2xy+Z6CP5bu9w8XTvlWgiXHcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "node-stdlib-browser": "^1.3.0", + "type-fest": "^4.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "webpack": ">=5" + } + }, + "node_modules/node-polyfill-webpack-plugin/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/node-releases": { "version": "2.0.27", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", @@ -9396,6 +12352,105 @@ "dev": true, "license": "MIT" }, + "node_modules/node-stdlib-browser": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-stdlib-browser/-/node-stdlib-browser-1.3.1.tgz", + "integrity": "sha512-X75ZN8DCLftGM5iKwoYLA3rjnrAEs97MkzvSd4q2746Tgpg8b8XWiBGiBG4ZpgcAqBgtgPHTiAc8ZMCvZuikDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert": "^2.0.0", + "browser-resolve": "^2.0.0", + "browserify-zlib": "^0.2.0", + "buffer": "^5.7.1", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "create-require": "^1.1.1", + "crypto-browserify": "^3.12.1", + "domain-browser": "4.22.0", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "isomorphic-timers-promises": "^1.0.1", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.1", + "pkg-dir": "^5.0.0", + "process": "^0.11.10", + "punycode": "^1.4.1", + "querystring-es3": "^0.2.1", + "readable-stream": "^3.6.0", + "stream-browserify": "^3.0.0", + "stream-http": "^3.2.0", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.1", + "url": "^0.11.4", + "util": "^0.12.4", + "vm-browserify": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-stdlib-browser/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/node-stdlib-browser/node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-stdlib-browser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-stdlib-browser/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -9419,6 +12474,19 @@ "node": ">=8" } }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/nwsapi": { "version": "2.2.22", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.22.tgz", @@ -9449,6 +12517,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "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", @@ -9549,6 +12634,36 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -9575,6 +12690,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -9593,6 +12727,13 @@ "node": ">= 0.8.0" } }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true, + "license": "MIT" + }, "node_modules/own-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", @@ -9643,6 +12784,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-retry": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -9660,6 +12819,13 @@ "dev": true, "license": "BlueOak-1.0.0" }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true, + "license": "(MIT AND Zlib)" + }, "node_modules/pane-registry": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/pane-registry/-/pane-registry-3.0.1.tgz", @@ -9671,6 +12837,24 @@ "solid-logic": "^4.0.2" } }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/param-case/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -9684,6 +12868,23 @@ "node": ">=6" } }, + "node_modules/parse-asn1": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.9.tgz", + "integrity": "sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "pbkdf2": "^3.1.5", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -9716,6 +12917,41 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/pascal-case/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -9784,6 +13020,31 @@ "dev": true, "license": "ISC" }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pbkdf2": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz", + "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "ripemd160": "^2.0.3", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.12", + "to-buffer": "^1.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/peowly": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/peowly/-/peowly-1.3.2.tgz", @@ -9903,6 +13164,44 @@ "node": ">=8" } }, + "node_modules/pkijs": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.3.3.tgz", + "integrity": "sha512-+KD8hJtqQMYoTuL1bbGOqxb4z+nZkTAwVdNtWwe8Tc2xNbEmdJYIYoc6Qt0uF55e6YW6KuTHw1DjQ18gMhzepw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@noble/hashes": "1.4.0", + "asn1js": "^3.0.6", + "bytestreamjs": "^2.0.1", + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/pkijs/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/pkijs/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, "node_modules/possible-typed-array-names": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", @@ -9913,6 +13212,119 @@ "node": ">= 0.4" } }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "dev": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -9923,6 +13335,17 @@ "node": ">= 0.8.0" } }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, "node_modules/pretty-format": { "version": "30.2.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", @@ -9961,6 +13384,13 @@ "node": ">= 0.6.0" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, "node_modules/promise-polyfill": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz", @@ -9987,6 +13417,52 @@ "dev": true, "license": "MIT" }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -10014,6 +13490,58 @@ ], "license": "MIT" }, + "node_modules/pvtsutils": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/pvtsutils/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/pvutils": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.5.tgz", + "integrity": "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/qs": { + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -10024,6 +13552,56 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/rdf-canonize": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-5.0.0.tgz", @@ -10094,7 +13672,6 @@ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -10102,6 +13679,19 @@ "node": ">=8.10.0" } }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -10116,6 +13706,13 @@ "node": ">=8" } }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -10218,6 +13815,30 @@ "regjsparser": "bin/parser" } }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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", @@ -10234,7 +13855,6 @@ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -10249,6 +13869,13 @@ "x-path": "^0.0.2" } }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, "node_modules/resolve": { "version": "1.22.11", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", @@ -10277,32 +13904,119 @@ "dev": true, "license": "MIT", "dependencies": { - "resolve-from": "^5.0.0" + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ripemd160": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz", + "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.1.2", + "inherits": "^2.0.4" }, "engines": { - "node": ">=8" + "node": ">= 0.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==", + "node_modules/ripemd160/node_modules/hash-base": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", + "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", "dev": true, "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.1" + }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/resolve-pkg-maps": { + "node_modules/ripemd160/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/ripemd160/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + "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/ripemd160/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/ripemd160/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" } }, + "node_modules/ripemd160/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, "node_modules/rrweb-cssom": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", @@ -10310,6 +14024,19 @@ "dev": true, "license": "MIT" }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/safe-array-concat": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", @@ -10412,7 +14139,6 @@ "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -10433,7 +14159,6 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -10451,7 +14176,6 @@ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -10464,8 +14188,28 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, + "license": "MIT" + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true, + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-5.5.0.tgz", + "integrity": "sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==", + "dev": true, "license": "MIT", - "peer": true + "dependencies": { + "@peculiar/x509": "^1.14.2", + "pkijs": "^3.3.3" + }, + "engines": { + "node": ">=18" + } }, "node_modules/semver": { "version": "6.3.1", @@ -10477,6 +14221,48 @@ "semver": "bin/semver.js" } }, + "node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, "node_modules/serialize-javascript": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", @@ -10487,6 +14273,122 @@ "randombytes": "^2.1.0" } }, + "node_modules/serve-index": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz", + "integrity": "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.8.0", + "mime-types": "~2.1.35", + "parseurl": "~1.3.3" + }, + "engines": { + "node": ">= 0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -10543,6 +14445,47 @@ "dev": true, "license": "MIT" }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", + "dev": true, + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + }, + "bin": { + "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -10566,6 +14509,19 @@ "node": ">=8" } }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -10659,6 +14615,28 @@ "node": ">=6" } }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/solid-logic": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/solid-logic/-/solid-logic-4.0.2.tgz", @@ -10730,6 +14708,16 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-support": { "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", @@ -10741,6 +14729,53 @@ "source-map": "^0.6.0" } }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "license": "MIT", + "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/spdy-transport/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -10784,22 +14819,86 @@ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "node_modules/stream-browserify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stream-http": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" } }, - "node_modules/stop-iteration-iterator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "node_modules/stream-http/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "internal-slot": "^1.1.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">= 6" } }, "node_modules/string_decoder": { @@ -11028,6 +15127,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/style-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz", + "integrity": "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.27.0" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -11097,7 +15213,6 @@ "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", "dev": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", @@ -11117,7 +15232,6 @@ "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", @@ -11153,7 +15267,6 @@ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -11169,7 +15282,6 @@ "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "randombytes": "^2.1.0" } @@ -11180,7 +15292,6 @@ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -11196,8 +15307,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/terser/node_modules/source-map-support": { "version": "0.5.21", @@ -11205,7 +15315,6 @@ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -11250,6 +15359,26 @@ "node": "*" } }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true, + "license": "MIT" + }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", @@ -11325,6 +15454,21 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/to-buffer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", + "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.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", @@ -11338,6 +15482,16 @@ "node": ">=8.0" } }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, "node_modules/tough-cookie": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", @@ -11456,6 +15610,26 @@ "dev": true, "license": "0BSD" }, + "node_modules/tsyringe": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.10.0.tgz", + "integrity": "sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.9.3" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true, + "license": "MIT" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -11492,6 +15666,43 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/typed-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", @@ -11729,6 +15940,16 @@ "node": ">=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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/unrs-resolver": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", @@ -11805,6 +16026,65 @@ "punycode": "^2.1.0" } }, + "node_modules/url": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", + "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.12.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/uuid": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", @@ -11834,6 +16114,23 @@ "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true, + "license": "MIT" + }, "node_modules/w3c-xmlserializer": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", @@ -11863,7 +16160,6 @@ "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -11872,6 +16168,16 @@ "node": ">=10.13.0" } }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -11888,7 +16194,6 @@ "integrity": "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -11932,13 +16237,168 @@ } } }, + "node_modules/webpack-cli": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", + "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "^0.6.1", + "@webpack-cli/configtest": "^3.0.1", + "@webpack-cli/info": "^3.0.1", + "@webpack-cli/serve": "^3.0.1", + "colorette": "^2.0.14", + "commander": "^12.1.0", + "cross-spawn": "^7.0.3", + "envinfo": "^7.14.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^6.0.1" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.82.0" + }, + "peerDependenciesMeta": { + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz", + "integrity": "sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^4.43.1", + "mime-types": "^3.0.1", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.3.tgz", + "integrity": "sha512-9Gyu2F7+bg4Vv+pjbovuYDhHX+mqdqITykfzdM9UyKqKHlsE5aAjRhR+oOEfXW5vBeu8tarzlJFIZva4ZjAdrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.25", + "@types/express-serve-static-core": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", + "colorette": "^2.0.10", + "compression": "^1.8.1", + "connect-history-api-fallback": "^2.0.0", + "express": "^4.22.1", + "graceful-fs": "^4.2.6", + "http-proxy-middleware": "^2.0.9", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^5.5.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/webpack-sources": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10.13.0" } @@ -11949,7 +16409,6 @@ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -11964,7 +16423,6 @@ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, "license": "BSD-2-Clause", - "peer": true, "engines": { "node": ">=4.0" } @@ -11975,7 +16433,6 @@ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.6" } @@ -11986,7 +16443,6 @@ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "mime-db": "1.52.0" }, @@ -11994,6 +16450,31 @@ "node": ">= 0.6" } }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/whatwg-encoding": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", @@ -12136,6 +16617,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true, + "license": "MIT" + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -12239,6 +16727,22 @@ } } }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/x-path": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/x-path/-/x-path-0.0.2.tgz", @@ -12266,6 +16770,16 @@ "dev": true, "license": "MIT" }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index 4485eec..b59742d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "contacts-pane", - "version": "3.0.1", + "version": "3.1.0-newStyle", "description": "Contacts Pane: Contacts manager for Address Book, Groups, and Individuals.", "main": "dist/contactsPane.js", "files": [ @@ -10,19 +10,17 @@ ], "scripts": { "clean": "rm -rf dist", - "build": "npm run clean && npm run typecheck && npm run build-dist", - "build-dist": "npm run build-js && npm run build-types", - "build-js": "babel src --out-dir dist --extensions '.ts,.js' --source-maps", - "build-types": "tsc --emitDeclarationOnly", + "build": "npm run clean && npm run build-dist", + "build-dist": "webpack --progress", "lint": "eslint", "lint-fix": "eslint --fix", - "typecheck": "tsc --noEmit", "typecheck-test": "tsc --noEmit -p tsconfig.test.json", "test": "jest --no-coverage", "test-coverage": "jest --coverage", "prepublishOnly": "npm run build && npm run lint && npm run test", "preversion": "npm run lint && npm run typecheck && npm run test", - "postpublish": "git push origin main --follow-tags" + "postpublish": "git push origin main --follow-tags", + "start": "webpack serve --config webpack.dev.config.mjs --open" }, "repository": { "type": "git", @@ -47,9 +45,6 @@ "url": "https://github.com/SolidOS/contacts-pane/issues" }, "homepage": "https://github.com/SolidOS/contacts-pane", - "dependencies": { - "mime-types": "^3.0.2" - }, "peerDependencies": { "rdflib": "^2.3.5", "solid-logic": "^4.0.2", @@ -66,19 +61,29 @@ "babel-jest": "^30.2.0", "babel-loader": "^10.0.0", "babel-plugin-inline-import": "^3.0.0", + "baseline-browser-mapping": "^2.9.19", "buffer": "^6.0.3", + "copy-webpack-plugin": "^13.0.1", + "css-loader": "^7.1.3", "eslint": "^9.39.2", "eslint-plugin-import": "^2.32.0", "globals": "^17.1.0", + "html-webpack-plugin": "^5.6.6", "jest": "^30.2.0", "jest-environment-jsdom": "^30.2.0", "jest-fetch-mock": "^3.0.3", "neostandard": "^0.12.2", + "node-polyfill-webpack-plugin": "^4.1.0", "pane-registry": "^3.0.1", "rdflib": "^2.3.5", "solid-logic": "^4.0.2", "solid-ui": "^3.0.3", + "style-loader": "^4.0.0", + "terser-webpack-plugin": "^5.3.16", "typescript": "^5.9.3", - "typescript-transpile-only": "^0.0.4" + "typescript-transpile-only": "^0.0.4", + "webpack": "^5.0.0", + "webpack-cli": "^6.0.1", + "webpack-dev-server": "^5.2.3" } } diff --git a/src/autocompleteBar.ts b/src/autocompleteBar.ts deleted file mode 100644 index dba7738..0000000 --- a/src/autocompleteBar.ts +++ /dev/null @@ -1,91 +0,0 @@ -// The Control with decorations - -import { NamedNode } from 'rdflib' -import { store } from 'solid-logic' -import { ns, widgets, icons } from 'solid-ui' -import { renderAutoComplete } from './autocompletePicker' // dbpediaParameters -import { wikidataParameters } from './publicData' - -const WEBID_NOUN = 'Solid ID' - -const kb = store - -// const AUTOCOMPLETE_THRESHOLD = 4 // don't check until this many characters typed -// const AUTOCOMPLETE_ROWS = 12 // 20? - -const GREEN_PLUS = icons.iconBase + 'noun_34653_green.svg' -const SEARCH_ICON = icons.iconBase + 'noun_Search_875351.svg' - -export async function renderAutocompleteControl (dom:HTMLDocument, - person:NamedNode, options, addOneIdAndRefresh): Promise { - async function autoCompleteDone (object, _name) { - const webid = object.uri - removeDecorated() - return addOneIdAndRefresh(person, webid) - } - - async function greenButtonHandler (_event) { - const webid = await widgets.askName(dom, store, creationArea, ns.vcard('url'), null, WEBID_NOUN) - if (!webid) { - return // cancelled by user - } - return addOneIdAndRefresh(person, webid) - } - function removeDecorated () { - if (decoratedAutocomplete) { - creationArea.removeChild(decoratedAutocomplete) - decoratedAutocomplete = null - } - } - async function searchButtonHandler (_event) { - if (decoratedAutocomplete) { - creationArea.removeChild(decoratedAutocomplete) - decoratedAutocomplete = null - } else { - decoratedAutocomplete = dom.createElement('div') - decoratedAutocomplete.setAttribute('style', 'display: flex; flex-flow: wrap;') - decoratedAutocomplete.appendChild(await renderAutoComplete(dom, acOptions, autoCompleteDone)) - decoratedAutocomplete.appendChild(acceptButton) - decoratedAutocomplete.appendChild(cancelButton) - creationArea.appendChild(decoratedAutocomplete) - } - } - - async function droppedURIHandler (uris) { - for (const webid of uris) { // normally one but can be more than one - await addOneIdAndRefresh(person, webid) - } - } - - const queryParams = options.queryParameters || wikidataParameters - const acceptButton = widgets.continueButton(dom) - const cancelButton = widgets.cancelButton(dom, removeDecorated) - const klass = options.class - const acOptions = { - queryParams, - class: klass, - acceptButton, - cancelButton - } - - var decoratedAutocomplete: HTMLDivElement | null = null - // const { dom } = dataBrowserContext - options = options || {} - options.editable = kb.updater.editable(person.doc().uri, kb) - - const creationArea = dom.createElement('div') - creationArea.setAttribute('style', 'display: flex; flex-flow: wrap;') - - if (options.editable) { - // creationArea.appendChild(await renderAutoComplete(dom, options, autoCompleteDone)) wait for searchButton - creationArea.style.width = '100%' - const plus = creationArea.appendChild(widgets.button(dom, GREEN_PLUS, options.idNoun, greenButtonHandler)) - widgets.makeDropTarget(plus, droppedURIHandler, null) - if (options.dbLookup) { - creationArea.appendChild(widgets.button(dom, SEARCH_ICON, options.idNoun, searchButtonHandler)) - } - } - return creationArea -} // renderAutocompleteControl - -// ends diff --git a/src/autocompleteField.ts b/src/autocompleteField.ts deleted file mode 100644 index 8ea182f..0000000 --- a/src/autocompleteField.ts +++ /dev/null @@ -1,177 +0,0 @@ -/* Form field for doing autocompleete - */ -import { BlankNode, NamedNode, st, Variable } from 'rdflib' -import { store } from 'solid-logic' -import { ns, style, widgets } from 'solid-ui' -import { renderAutoComplete } from './autocompletePicker' // dbpediaParameters - -// const AUTOCOMPLETE_THRESHOLD = 4 // don't check until this many characters typed -// const AUTOCOMPLETE_ROWS = 12 // 20? - -/** - * Render a autocomplete form field - * - * The same function is used for many similar one-value fields, with different - * regexps used to validate. - * - * @param dom The HTML Document object aka Document Object Model - * @param container If present, the created widget will be appended to this - * @param already A hash table of (form, subject) kept to prevent recursive forms looping - * @param subject The thing about which the form displays/edits data - * @param form The form or field to be rendered - * @param doc The web document in which the data is - * @param callbackFunction Called when data is changed? - * - * @returns The HTML widget created - */ - -export function autocompleteField ( // @@ are they allowed too be async?? - dom: HTMLDocument, - container: HTMLElement | undefined, - already, - subject: NamedNode | BlankNode | Variable, - form: NamedNode, - doc: NamedNode | undefined, - callbackFunction: (ok: boolean, errorMessage: string) => void -): HTMLElement { - async function addOneIdAndRefresh (result, _name) { - const ds = kb.statementsMatching(subject, property as any) // remove any multiple values - - let is = ds.map(statement => st(statement.subject, statement.predicate, result, statement.why)) // can include >1 doc - if (is.length === 0) { - // or none - is = [st(subject, property as any, result, doc)] - } - try { - await kb.updater.updateMany(ds, is) - } catch (err) { - callbackFunction(false, err) - box.appendChild(widgets.errorMessageBlock(dom, 'Autocomplete form data write error:' + err)) - return - } - callbackFunction(true, '') - } - - const kb = store - const formDoc = form.doc ? form.doc() : null // @@ if blank no way to know - - const box = dom.createElement('tr') - if (container) container.appendChild(box) - const lhs = dom.createElement('td') - lhs.setAttribute('class', 'formFieldName') - lhs.setAttribute('style', ' vertical-align: middle;') - box.appendChild(lhs) - const rhs = dom.createElement('td') - rhs.setAttribute('class', 'formFieldValue') - box.appendChild(rhs) - - const property = kb.any(form, ns.ui('property')) - if (!property) { - box.appendChild( - dom.createTextNode('Error: No property given for autocomplete field: ' + form) - ) - return box - } - const searchClass = kb.any(form, ns.ui('searchClass')) - if (!searchClass) { - box.appendChild( - dom.createTextNode('Error: No searchClass given for autocomplete field: ' + form) - ) - return box - } - const endPoint = kb.any(form, ns.ui('endPoint')) - if (!endPoint) { - box.appendChild( - dom.createTextNode('Error: No SPARQL endPoint given for autocomplete field: ' + form) - ) - return box - } - const queryTemplate = kb.any(form, ns.ui('queryTemplate')) - if (!queryTemplate) { - box.appendChild( - dom.createTextNode('Error: No queryTemplate given for autocomplete field: ' + form) - ) - return box - } - // It can be cleaner to just remove empty fields if you can't edit them anyway - const suppressEmptyUneditable = kb.anyJS(form, ns.ui('suppressEmptyUneditable'), null, formDoc) - - lhs.appendChild(widgets.fieldLabel(dom, property as any, form)) - const uri = widgets.mostSpecificClassURI(form) - let params = widgets.fieldParams[uri] - if (params === undefined) params = {} // non-bottom field types can do this - // const theStyle = params.style || style.textInputStyle - const klass = kb.the(form, ns.ui('category'), null, formDoc) as NamedNode - /* - { label: string; - logo: string; - searchByNameQuery?: string; - searchByNameURI?: string; - insitituteDetailsQuery?: string; - endPoint?: string; - class: object - } -*/ - - const searchByNameQuery = kb.the(form, ns.ui('searchByNameQuery'), null, formDoc) - - if (!klass) { - box.appendChild( - dom.createTextNode('Error: No class given for autocomplete field: ' + form) - ) - return box - } - - const queryParams = { label: 'from form', logo: '', class: klass, endPoint: endPoint.value, searchByNameQuery: searchByNameQuery?.value } - - const options = { // cancelButton?: HTMLElement, - // acceptButton?: HTMLElement, - class: klass, - queryParams - } - - // const acWiget = rhs.appendChild(await renderAutoComplete(dom, options, addOneIdAndRefresh)) - - // @@ set existing value is any - renderAutoComplete(dom, options, addOneIdAndRefresh).then(acWiget => rhs.appendChild(acWiget)) - - const field = dom.createElement('input') - ;(field as any).style = style.textInputStyle // Do we have to override length etc? - rhs.appendChild(field) - field.setAttribute('type', params.type ? params.type : 'text') - - const size = kb.any(form, ns.ui('size')) // Form has precedence - field.setAttribute( - 'size', - size ? '' + size : params.size ? '' + params.size : '20' - ) - const maxLength = kb.any(form, ns.ui('maxLength')) - field.setAttribute('maxLength', maxLength ? '' + maxLength : '4096') - - doc = doc || widgets.fieldStore(subject, property as any, doc) - - let obj = kb.any(subject, property as any, undefined, doc) - if (!obj) { - obj = kb.any(form, ns.ui('default')) - } - if (obj) { - /* istanbul ignore next */ - field.value = obj.value || obj.value || '' - } - field.setAttribute('style', style) - if (!kb.updater) { - throw new Error('kb has no updater') - } - if (!kb.updater.editable((doc as NamedNode).uri)) { - field.readOnly = true // was: disabled. readOnly is better - ;(field as any).style = style.textInputStyleUneditable - // backgroundColor = textInputBackgroundColorUneditable - if (suppressEmptyUneditable && field.value === '') { - box.style.display = 'none' // clutter - } - return box - } - return box -} - -// ends diff --git a/src/autocompletePicker.ts b/src/autocompletePicker.ts deleted file mode 100644 index 9b8f951..0000000 --- a/src/autocompletePicker.ts +++ /dev/null @@ -1,259 +0,0 @@ -/* Create and edit data using public data -** -** organization conveys many distinct types of thing. -** -*/ -import { NamedNode } from 'rdflib' -import { store } from 'solid-logic' -import { style, widgets } from 'solid-ui' -import { - AUTOCOMPLETE_LIMIT, filterByLanguage, getPreferredLanguages, QueryParameters, queryPublicDataByName -} from './publicData' - -const AUTOCOMPLETE_THRESHOLD = 4 // don't check until this many characters typed -const AUTOCOMPLETE_ROWS = 20 // 20? -const AUTOCOMPLETE_ROWS_STRETCH = 40 -const AUTOCOMPLETE_DEBOUNCE_MS = 300 - -// const autocompleteRowStyle = 'border: 0.2em solid straw;' // @@ white - -/* -Autocomplete happens in four phases: - 1. The search string is too small to bother - 2. The search string is big enough, and we have not loaded the array - 3. The search string is big enough, and we have loaded array up to the limit - Display them and wait for more user input - 4. The search string is big enough, and we have loaded array NOT to the limit - but including all matches. No more fetches. - If user gets more precise, wait for them to select one - or reduce to a single - 5. Optionally waiting for accept button to be pressed -*/ - -type AutocompleteOptions = { - cancelButton?: HTMLElement, - acceptButton?: HTMLElement, - class: NamedNode, - queryParams: QueryParameters -} - -interface Callback1 { - (subject: NamedNode, name: string): void; -} - -// The core of the autocomplete UI -export async function renderAutoComplete (dom: HTMLDocument, options:AutocompleteOptions, // subject:NamedNode, predicate:NamedNode, - callback: Callback1) { - function complain (message) { - const errorRow = table.appendChild(dom.createElement('tr')) - console.log(message) - errorRow.appendChild(widgets.errorMessageBlock(dom, message, 'pink')) - style.setStyle(errorRow, 'autocompleteRowStyle') - errorRow.style.padding = '1em' - } - /* - function remove (ele?: HTMLElement) { - if (ele && ele.parentNode) { - ele.parentNode.removeChild(ele) - } - } - */ - function finish (object, name) { - console.log('Auto complete: finish! ' + object) - // remove(options.cancelButton) - // remove(options.acceptButton) - // remove(div) - callback(object, name) - } - async function gotIt (object:NamedNode, name:string) { - if (options.acceptButton) { - (options.acceptButton as any).disabled = false - searchInput.value = name // complete it - foundName = name - foundObject = object - console.log('Auto complete: name: ' + name) - console.log('Auto complete: waiting for accept ' + object) - return - } - finish(object, name) - } - - async function acceptButtonHandler (_event) { - if (searchInput.value === foundName) { // still - finish(foundObject, foundName) - } else { - (options.acceptButton as any).disabled = true - } - } - - /* - async function cancelButtonHandler (_event) { - console.log('Auto complete: Canceled by user! ') - div.innerHTML = '' // Clear out the table - } - */ - - function nameMatch (filter:string, candidate: string):boolean { - const parts = filter.split(' ') // Each name part must be somewhere - for (let j = 0; j < parts.length; j++) { - const word = parts[j] - if (candidate.toLowerCase().indexOf(word) < 0) return false - } - return true - } - - /* - function cancelText (_event) { - searchInput.value = '' - if (options.acceptButton) { - (options.acceptButton as any).disabled = true // start again - } - _candidatesLoaded = false - } - */ - - function thinOut (filter) { - let hits = 0 - let pick: string | null = null; let pickedName = '' - for (let j = table.children.length - 1; j > 0; j--) { // backwards as we are removing rows - const row = table.children[j] - if (nameMatch(filter, row.textContent)) { - hits += 1 - pick = row.getAttribute('subject') - pickedName = row.textContent - ;(row as any).style.display = '' - ;(row as any).style.color = 'blue' // @@ chose color - } else { - ;(row as any).style.display = 'none' - } - } - if (hits === 1 && pick) { // Maybe require green confirmation button be clicked? - console.log(` auto complete elimination: "${filter}" -> "${pickedName}"`) - gotIt(store.sym(pick), pickedName) // uri, name - } - } - - function clearList () { - while (table.children.length > 1 && table.lastChild) { - table.removeChild(table.lastChild) - } - } - - async function inputEventHHandler (_event) { - if (runningTimeout) { - clearTimeout(runningTimeout) - } - setTimeout(refreshList, AUTOCOMPLETE_DEBOUNCE_MS) - } - - async function refreshList () { - if (inputEventHandlerLock) { - console.log(`Ignoring "${searchInput.value}" because of lock `) - return - } - inputEventHandlerLock = true - const languagePrefs = await getPreferredLanguages() - const filter = searchInput.value.trim().toLowerCase() - if (filter.length < AUTOCOMPLETE_THRESHOLD) { // too small - clearList() - candidatesLoaded = false - numberOfRows = AUTOCOMPLETE_ROWS - } else { - if (allDisplayed && lastFilter && filter.startsWith(lastFilter)) { - thinOut(filter) // reversible? - inputEventHandlerLock = false - return - } - let bindings - try { - bindings = await queryPublicDataByName(filter, OrgClass, options.queryParams) - // bindings = await queryDbpedia(sparql) - } catch (err) { - complain('Error querying db of organizations: ' + err) - inputEventHandlerLock = false - return - } - candidatesLoaded = true - const loadedEnough = bindings.length < AUTOCOMPLETE_LIMIT - if (loadedEnough) { - lastFilter = filter - } else { - lastFilter = null - } - clearList() - const slimmed = filterByLanguage(bindings, languagePrefs) - if (loadedEnough && slimmed.length <= AUTOCOMPLETE_ROWS_STRETCH) { - numberOfRows = slimmed.length // stretch if it means we get all items - } - allDisplayed = loadedEnough && slimmed.length <= numberOfRows - console.log(` Filter:"${filter}" bindings: ${bindings.length}, slimmed to ${slimmed.length}; rows: ${numberOfRows}, Enough? ${loadedEnough}, All displayed? ${allDisplayed}`) - slimmed.slice(0, numberOfRows).forEach(binding => { - const row = table.appendChild(dom.createElement('tr')) - style.setStyle(row, 'autocompleteRowStyle') - const uri = binding.subject.value - const name = binding.name?.value - row.setAttribute('style', 'padding: 0.3em;') - row.setAttribute('subject', uri) - row.style.color = allDisplayed ? '#080' : '#000' // green means 'you should find it here' - row.textContent = name || '' - row.addEventListener('click', async _event => { - console.log(' click row textContent: ' + row.textContent) - console.log(' click name: ' + name) - gotIt(store.sym(uri), name || '') - }) - }) - } - inputEventHandlerLock = false - } // refreshList - - /* sparqlForSearch -* -* name -- e.g., "mass" -* theType -- e.g., -*/ - /* - function sparqlForSearch (name:string, theType:NamedNode):string { - const clean = name.replace(/\W/g, '') // Remove non alphanum so as to protect regexp - const sparql = `select distinct ?subject, ?name where { - ?subject a <${theType.uri}>; rdfs:label ?name - FILTER regex(?name, "${clean}", "i") - } LIMIT ${AUTOCOMPLETE_LIMIT}` - return sparql - } -*/ - const OrgClass = options.class // kb.sym('http://umbel.org/umbel/rc/EducationalOrganization') // @@@ other - if (options.acceptButton) { - options.acceptButton.addEventListener('click', acceptButtonHandler, false) - } - if (options.cancelButton) { - // options.cancelButton.addEventListener('click', cancelButtonHandler, false) - } - - // @ts-ignore - let candidatesLoaded = false - const runningTimeout = null - let inputEventHandlerLock = false - let allDisplayed = false - var lastFilter: string | null = null - var numberOfRows = AUTOCOMPLETE_ROWS - const div = dom.createElement('div') - var foundName: string | null = null // once found accepted string must match this - var foundObject: NamedNode | null = null - var table = div.appendChild(dom.createElement('table')) - table.setAttribute('style', 'max-width: 30em; margin: 0.5em;') - const head = table.appendChild(dom.createElement('tr')) - style.setStyle(head, 'autocompleteRowStyle') - const cell = head.appendChild(dom.createElement('td')) - const searchInput = cell.appendChild(dom.createElement('input')) - searchInput.setAttribute('type', 'text') - const searchInputStyle = style.searchInputStyle || - 'border: 0.1em solid #444; border-radius: 0.5em; width: 100%; font-size: 100%; padding: 0.1em 0.6em' // @ - searchInput.setAttribute('style', searchInputStyle) - searchInput.addEventListener('keyup', function (event) { - if (event.keyCode === 13) { - acceptButtonHandler(event) - } - }, false) - - searchInput.addEventListener('input', inputEventHHandler) - return div -} // renderAutoComplete22q1 diff --git a/src/card.ai b/src/card.ai deleted file mode 100644 index 7c6fc22..0000000 --- a/src/card.ai +++ /dev/null @@ -1,980 +0,0 @@ -%PDF-1.5 %âãÏÓ -1 0 obj <>/OCGs[5 0 R 23 0 R 40 0 R 57 0 R 74 0 R 91 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream - - - - - application/pdf - - - Web - - - - - Adobe Illustrator CS5 - 2015-03-18T15:23:14-04:00 - 2015-08-10T17:45:42-04:00 - 2015-08-10T17:45:42-04:00 - - - - 256 - 160 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAoAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A8qYq7FXYq7FXYq7FURFq F/CgjhuZY4x0RHZRv7A4qv8A0tqv/LZP/wAjH/rirv0tqv8Ay2T/APIx/wCuKu/S2q/8tk//ACMf +uKu/S2q/wDLZP8A8jH/AK4q79Lar/y2T/8AIx/64q79Lar/AMtk/wDyMf8Arirv0tqv/LZP/wAj H/rirv0tqv8Ay2T/APIx/wCuKu/S2q/8tk//ACMf+uKu/S2q/wDLZP8A8jH/AK4q79Lar/y2T/8A Ix/64q79Lar/AMtk/wDyMf8AriqvD5l8xwJ6cOq3kSdeKXEqip9g2Kr/APFnmn/q833/AEkzf81Y q7/Fnmn/AKvN9/0kzf8ANWKu/wAWeaf+rzff9JM3/NWKu/xZ5p/6vN9/0kzf81Yq7/Fnmn/q833/ AEkzf81Yq/QP8ibi4ufyh8rT3ErzTyWSmSWRizseTbljUnFWeYq7FXYq7FXYq7FX5V4q/RfyH5D8 jT+RvLs8/l3TJZpdMs3llezt2Zma3QszMUqST1OKp7/yrzyB/wBSzpX/AEg23/NGKu/5V55A/wCp Z0r/AKQbb/mjFXf8q88gf9SzpX/SDbf80Yq7/lXnkD/qWdK/6Qbb/mjFUPL+Vn5YzSGSXyhokkjf ad9OtGJoKbkx4qt/5VP+Vn/Um6H/ANw2z/6p4q7/AJVP+Vn/AFJuh/8AcNs/+qeKu/5VP+Vn/Um6 H/3DbP8A6p4q7/lU/wCVn/Um6H/3DbP/AKp4q7/lU/5Wf9Sbof8A3DbP/qnirv8AlU/5Wf8AUm6H /wBw2z/6p4q7/lU/5Wf9Sbof/cNs/wDqnirv+VT/AJWf9Sbof/cNs/8Aqnirv+VT/lZ/1Juh/wDc Ns/+qeKu/wCVT/lZ/wBSbof/AHDbP/qnirv+VT/lZ/1Juh/9w2z/AOqeKu/5VP8AlZ/1Juh/9w2z /wCqeKoeb8mfyllcu3k/SAT2SzhQbf5KqBiqz/lSn5R/9ShpX/SLF/TFXf8AKlPyj/6lDSv+kWL+ mKu/5Up+Uf8A1KGlf9IsX9MVd/ypT8o/+pQ0r/pFi/pir8+/PFrbWnnXzBa2saw21vqV5FBCgoqI k7qqqB0AAoMVffX5A/8AkmvKf/MCv/EmxVn+KuxV2KuxV2KuxV+VeKv00/Lz/lAPLP8A2yrH/qGT FWQYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX5l/mF/yn3mX/tq33/U S+KvvX8gf/JNeU/+YFf+JNirP8VdirsVdirsVdir8q8Vfpp+Xn/KAeWf+2VY/wDUMmKsgxV2KuxV Surq1tIHuLqZLeCMVeWVgiKPEsxAGKsP1H86/wApNPZkufNumc1NGWG4ScgjqCIS/hiqR3H/ADk5 +RsH2vM6OSKgR2t7J+KwkD6cVULL/nKb8kbq4WH9PNAW2V5rS6RK1pQt6ZA+Z2xV6bpWr6Vq9hFq GlXkN/YzisN1bSLLGw9mQkYqi8VdirsVdirsVdirsVdirsVdirsVdirsVdir8y/zC/5T7zL/ANtW +/6iXxV96/kD/wCSa8p/8wK/8SbFWf4q7FXYq7FXYq7FX5aakiR6jdIgCok0iqo6ABiAMVfpF+VL u/5XeT3diztommlmJqSTaR1JOKspxV2Kvjf8+P8AnJTzv/jbUPL/AJS1FtJ0jR5ntJJoFT1rieE8 ZWaRgxCK4KqFpUbmvZV4f5o88eb/ADVOk/mLV7rU3jAEQuJCyJQU+BPsL70G+KpVBZXtx/vPbyTf 8Y0Zv1DFUanlfzG+66Zc/TE6/rAxVZfeXdcsYTPd2UsMI2MhX4RXYVI6Yq9F/wCcevzdvPIHnK3h u7lh5X1WRYdWgY/u4y3wpdAfstGaciOqVHhRV9+o6OiujBkYAqwNQQdwQRireKuxV8eeev8AnLD8 0ND87+YdFsotMNnpep3llbGS3kZ/St7h4k5ESip4qK7Yqkf/AEOT+bn++dK/6Rpf+q2Ku/6HJ/Nz /fOlf9I0v/VbFXv3/ONv5seaPzG0TWb3zAlsk1hcxwwfVY2jXi8fI8gzvU1xVA/85MfnJ5u/Lb/D n+HktH/Sv13619biaWn1b6vw4cXjp/fNXFXh/wD0OT+bn++dK/6Rpf8Aqtirv+hyfzc/3zpX/SNL /wBVsVd/0OT+bn++dK/6Rpf+q2Kpr5U/5y2/NPVfNOjaXdRaYLa/vra2nKW8gbhNMqNxJlNDRtsV fZWKuxV+Zf5hf8p95l/7at9/1Evir71/IH/yTXlP/mBX/iTYqz/FXYq7FXYq7FXYq/LbVv8Ajq3n /GeT/iZxV+j/AOU//krPJv8A2w9N/wCoOPFWVYq7FX5baretf6peXzElrueSdi2xJkctvT54q9S8 s+S9AgsbK+e2E13JDHI7SkuodkBNFPw9em2KspAAAAFANgBireKqN3awXdrLazrzhmUpIviGFMVe G67pUmk6tc6e7BzAwCuO6sAyn58SMVfb3/OJPmTVNb/KOKPUHaQ6PezadayvUs1vHHFLGKnsnrFB 7KBir2fFXYq+ffM//OHnlvX/ADJq2uzeYbyGXVry4vpIUiiKo1zK0pVSd6AvTFUt/wChIfK3/Uy3 3/ImHFXf9CQ+Vv8AqZb7/kTDir1P8nvye038sdN1CxsdQm1BNQmSd3nREKlE40HHFUN+cv5IaV+a P6H+v6nPp36H+s+n6CI/P6z6VeXPpx9AU+eKvNf+hIfK3/Uy33/ImHFXf9CQ+Vv+plvv+RMOKu/6 Eh8rf9TLff8AImHFUboX/OG3lnSNb0/Vo/MV7LJp9zDdJE0MQVmgkEgUkdjxxV9D4q7FX5l/mF/y n3mX/tq33/US+KvvX8gf/JNeU/8AmBX/AIk2Ks/xV2KuxV2KuxV2Kvy21b/jq3n/ABnk/wCJnFX6 P/lP/wCSs8m/9sPTf+oOPFWVYq7FX5da/pFxo2uajpFypS40+5mtZVbqGhcofD+XFXsPlK+S98ua fMvURLE4/wAqL4D+K4qm+KuxVxIAqdgOpxV4n5zuba58zX01tKJoWZeMi7gkRqDQ+xFMVfZH/OHb E/lAQYwgXU7oBgKcxxjPI+PXj9GKvccVdirsVdirsVdirsVdirsVdirsVdirsVfmX+YX/KfeZf8A tq33/US+KvvX8gf/ACTXlP8A5gV/4k2Ks/xV2KuxV2KuxV2Kvy21b/jq3n/GeT/iZxV+j/5T/wDk rPJv/bD03/qDjxVlWKuxV8O/85a+QL/QvzHm8xpCTo/mIJLHOo+BLqNAk0TEdGbh6gr15HwOKvNP J3nSbQ3NtcKZtOkbkyj7cbHqyfxGKvWbG+tb61jurSQSwSiqOP8APYjwxVXxV475o85atqdzcW6T GHTg7IkCfDyUGlXPU18OmKq/5d/lj5u8/wCsjTfL9oZFQg3d9JVbe3Q/tSvT7lFWPYYq/QP8uPIu neRvJuneWbCQzR2SN6tywCtLNIxeWQgVpVmNBXYUHbFWS4q7FXiHmH/nLv8ALbQdf1PQ7zTdZku9 Ku57K4eGC1MbSW8jROULXKsVLLtUD5Yql/8A0Or+Vn/Vq1z/AKR7P/srxV3/AEOr+Vn/AFatc/6R 7P8A7K8Vd/0Or+Vn/Vq1z/pHs/8AsrxV3/Q6v5Wf9WrXP+kez/7K8Vd/0Or+Vn/Vq1z/AKR7P/sr xVkn5e/85NeQ/Pfmm28taRYapBfXSSvHJdxW6RAQxmRqmO4lbou3w4q9bxV2KuxV2KvzL/ML/lPv Mv8A21b7/qJfFX3r+QP/AJJryn/zAr/xJsVZ/irsVdirsVdirsVfltq3/HVvP+M8n/Ezir9H/wAp /wDyVnk3/th6b/1Bx4qyrFXYqlXmfyvoPmjRLnRNdtEvdNulpLC9RuN1ZWFGVlO4ZTUYq+Gfz2/I XU/y0vYry2nbUPLN9IUtLxlpJFJuwgnp8PLiPhYbNQ7DpirFvy58xPY6mNNmb/RL1uKA9Em/ZI/1 vsn6MVer4q+eWYsxYmpJqTir9J/yp0jSdL/Lny5DplpDaQy6daTyrAioHllgRnkbiPidyaljucVZ ZirsVdir4p/MD/nGX84NY8+eZNXsNKhksdR1S9u7SQ3dupaKe4eSMlWcEVVhscVSH/oU/wDO3/qz wf8ASZbf9VMVd/0Kf+dv/Vng/wCky2/6qYq7/oU/87f+rPB/0mW3/VTFXf8AQp/52/8AVng/6TLb /qpirv8AoU/87f8Aqzwf9Jlt/wBVMVei/kD+QP5n+T/zP07Xte06K30y3iuUllS5glIMsDovwo7N 9psVfV+KuxV2KuxV+Zf5hf8AKfeZf+2rff8AUS+KvvX8gf8AyTXlP/mBX/iTYqz/ABV2KuxV2Kux V2Kvy21b/jq3n/GeT/iZxV+j/wCU/wD5Kzyb/wBsPTf+oOPFWVYq7FXYqxb80PKll5r8ga5od2oY XNrI0DmnwTxL6kMg/wBWRQcVfmtHI8ciyIeLoQysOoINQcVfQFrMZraKYihkRXI8OQrirwrW7J7H V7y0YU9GV1H+rWqn6VocVfeH/OMnne18z/lRpVuJF+v6Ci6XeQg7qsA427U60aHjv4gjtir1fFXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq/Mv8AML/lPvMv/bVvv+ol8Vfev5A/+Sa8p/8AMCv/ABJs VZ/irsVdirsVdirsVfltq3/HVvP+M8n/ABM4q/R/8p//ACVnk3/th6b/ANQceKsqxV2KuxViX5te ZU8tflr5j1otwe2sZVt26fv5h6MH/JWRcVfm5bwyTzxwRiskrKiD3Y0GKvoCGJYoUiX7MahV+Sim KvPvzQ0DePWoF8Irun3I/wDxr92Kpn/zjd+Zh8j/AJiWy3c3p6FrRWy1TkaInI/uJzXp6Ujbn+Ut ir7+xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvzL/ML/lPvMv8A21b7/qJfFX3r+QP/AJJryn/z Ar/xJsVZ/irsVdirsVdirsVfltq3/HVvP+M8n/Ezir9H/wAp/wDyVnk3/th6b/1Bx4qyrFXYq7FX zX/zlr+aflGfyXJ5N0zVIr3Wp7uFr23tj6ixRQkuRLIvwK3ML8Na+2Kvlfyg1uvmbTTOKp66gU/n O0f/AA9MVe34qoX9lBfWU1nOOUM6FHHsR1HuO2KvC9X0y40vUZ7G4H7yFqBuzL1Vh7Eb4q+1f+cX fzlj83+WU8s6vPXzLokQRWdqtdWaUVJRXcvHskn0N+0aKvc8VdirsVdirsVdirsVdirsVdirsVdi rsVfmX+YX/KfeZf+2rff9RL4q+9fyB/8k15T/wCYFf8AiTYqz/FXYq7FXYq7FXYq/LbVv+Oref8A GeT/AImcVfo/+U//AJKzyb/2w9N/6g48VZVirzv87Pzh038svLcV9JB9d1a/ZotKsSeKuyAF5JG6 iOMMK03JIHeoVfGHnb8+fzS84+rFqmtywWEta6dY/wCi2/E/sMI6PIu/+7GbFWEafpmoajOILKB5 5T1CDYe7HoB7nFXo/lT8u1064i1DUpRLdRHlFAn2EbsSx+0R/nXFWbYq7FWI/mH5dhv9LfUUIS7s ULcv54huVPy6jFWC+QdT1DTPOuh3un3ElrdR30ASaJirAPIFYVHZlJBHcbYq/TXFXYq/Nb82P/Jp +cv+25qX/UZJirFMVdirsVdirsVdir0D8gf/ACcnlP8A5jl/4i2Kv0UxV2KuxV+Zf5hf8p95l/7a t9/1Evir71/IH/yTXlP/AJgV/wCJNirP8VdirsVdirsVdir8wPNYC+aNYAFAL65AA6Aes2Kv0L/J Qk/lH5Qr/wBWq1/5NDFWaYq+Uf8AnOS2kFx5OutzGyX8R2NAym3br/lcvwxV4F+Xuj6ZqurTQ38X rLFCZY0LFRUMq78SK/axV6xa2dpaQiG1hSCIdEjUKPwxVWxV2KuxVKvNX/KN6n/zDyf8ROKvIvKf /KU6N/zHW3/J5cVfp/irsVSO48i+SLm4lubny9pk9xO7STTSWdu7u7nkzMzISWJNSTiqn/yrzyB/ 1LOlf9INt/zRirv+VeeQP+pZ0r/pBtv+aMVd/wAq88gf9SzpX/SDbf8ANGKu/wCVeeQP+pZ0r/pB tv8AmjFXf8q88gf9SzpX/SDbf80Yq7/lXnkD/qWdK/6Qbb/mjFVaz8k+TLK5ju7PQNOtrqE8op4b SCORG8VZUBB+WKp1irsVdir8y/zC/wCU+8y/9tW+/wCol8Vfev5A/wDkmvKf/MCv/EmxVn+KuxV2 KuxV2KuxV+YHmz/lKdZ/5jrn/k82Kv0K/JT/AMlH5Q/7ZVr/AMmhirNcVfKH/OceoK135Q05W+KO O+uJF7UkMCIf+SbYq+YbS+vbORpLSeS3kZeDPExRitQaVUg9RiqrJrGryf3l9cPvX4pXO/0nFVWy 8w63ZIyWt7LErnk4DVqfHeuKon/GXmj/AKuM33j+mKu/xl5o/wCrjN94/piqnceavMVxA8E9/LJD KpWRCRQg9QdsVa8p/wDKU6N/zHW3/J5cVfp/irsVfB35kfnd+bGnfmJ5p0+x8z3lvZWer39vawIy 8Y4ormRERfh6KoAxVjn/ACv785P+psvv+CX/AJpxV3/K/vzk/wCpsvv+CX/mnFX03/ziV5382ebP LuvXHmPU5tTntruKOCScglEaKpAoB3xV7zirsVdirsVdirsVdir8y/zC/wCU+8y/9tW+/wCol8Vf ev5A/wDkmvKf/MCv/EmxVn+KuxV2KuxV2KuxV+YHmz/lKdZ/5jrn/k82Kv0K/JT/AMlH5Q/7ZVr/ AMmhirNcVYB+YH5HeQvP2tW2r+ZIbie5tIFtYkineKP01dpN1XuTIamuKpRa/wDOLn5HW/Eny6Zn Ukhpby9br4qJgp+7FV+of84xfkperEp8vi3EIYD6vcXEZbka/GRJVvauKoP/AKFP/JL/AKtE/wD0 mXP/ADXirv8AoU/8kv8Aq0T/APSZc/8ANeKu/wChT/yS/wCrRP8A9Jlz/wA14q7/AKFP/JL/AKtE /wD0mXP/ADXiqtZ/84tfkzZ3kF3b6TOs9tIksTG8uSA6MGU0L+IxV6zirsVeWaz/AM4y/lBrGr32 r3+lTSX2o3Et3dyC7uFDSzuZJCFVwBVmOwxVB/8AQp/5Jf8AVon/AOky5/5rxV3/AEKf+SX/AFaJ /wDpMuf+a8VZr5A/LLyf5Cs7u08s2r2sF7IstwryyTEuq8QQZGam2KsqxV2KuxV2KuxV2KuxV+Zf 5hf8p95l/wC2rff9RL4q+9fyB/8AJNeU/wDmBX/iTYqz/FXYq7FXYq7FXYq/MDzZ/wApTrP/ADHX P/J5sVfoV+Sn/ko/KH/bKtf+TQxVmuKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxV2KuxV+Zf5hf8AKfeZf+2rff8AUS+KvvX8gf8AyTXlP/mBX/iTYqz/ABV2KuxV2KuxV2KvzA82 f8pTrP8AzHXP/J5sVfoV+Sn/AJKPyh/2yrX/AJNDFWa4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FX5l/mF/yn3mX/tq33/US+KvvX8gf/JNeU/+YFf+JNirP8VdirsVdirs Vdir8t9Zvkv9Xvr5FKJd3Es6odyBI5YA/KuKvpbyH/zl55c8teS9F8vz+X7y4m0qzhtZJ0liCu0S BSwB3oaYqn3/AEO95W/6lq+/5HQ4q7/od7yt/wBS1ff8jocVd/0O95W/6lq+/wCR0OKu/wCh3vK3 /UtX3/I6HFXf9DveVv8AqWr7/kdDirv+h3vK3/UtX3/I6HFXf9DveVv+pavv+R0OKu/6He8rf9S1 ff8AI6HFXf8AQ73lb/qWr7/kdDirv+h3vK3/AFLV9/yOhxV3/Q73lb/qWr7/AJHQ4q7/AKHe8rf9 S1ff8jocVd/0O95W/wCpavv+R0OKu/6He8rf9S1ff8jocVd/0O95W/6lq+/5HQ4q7/od7yt/1LV9 /wAjocVd/wBDveVv+pavv+R0OKu/6He8rf8AUtX3/I6HFXf9DveVv+pavv8AkdDirv8Aod7yt/1L V9/yOhxV3/Q73lb/AKlq+/5HQ4q7/od7yt/1LV9/yOhxV8o+ZdVj1fzHqurRxmKPULy4ukiYgsqz ytIFJHccsVfoH+QP/kmvKf8AzAr/AMSbFWf4q7FXYq7FXYq7FXxB/wBCbfm5/v7Sv+kmX/qjirv+ hNvzc/39pX/STL/1RxV3/Qm35uf7+0r/AKSZf+qOKu/6E2/Nz/f2lf8ASTL/ANUcVd/0Jt+bn+/t K/6SZf8Aqjirv+hNvzc/39pX/STL/wBUcVd/0Jt+bn+/tK/6SZf+qOKu/wChNvzc/wB/aV/0ky/9 UcVd/wBCbfm5/v7Sv+kmX/qjirv+hNvzc/39pX/STL/1RxV3/Qm35uf7+0r/AKSZf+qOKu/6E2/N z/f2lf8ASTL/ANUcVd/0Jt+bn+/tK/6SZf8Aqjirv+hNvzc/39pX/STL/wBUcVd/0Jt+bn+/tK/6 SZf+qOKu/wChNvzc/wB/aV/0ky/9UcVd/wBCbfm5/v7Sv+kmX/qjirv+hNvzc/39pX/STL/1RxV3 /Qm35uf7+0r/AKSZf+qOKu/6E2/Nz/f2lf8ASTL/ANUcVd/0Jt+bn+/tK/6SZf8Aqjirv+hNvzc/ 39pX/STL/wBUcVd/0Jt+bn+/tK/6SZf+qOKu/wChNvzc/wB/aV/0ky/9UcVd/wBCbfm5/v7Sv+km X/qjir61/KzyzqPlf8vdC8v6kYzf6dbCG4MLFo+QYn4WIUkb+GKsqxV2KuxV2KuxV2Kv/9k= - - - - - - proof:pdf - uuid:65E6390686CF11DBA6E2D887CEACB407 - xmp.did:F77F117407206811822A938BEAB82E55 - uuid:537ad86f-15a7-4f47-8fc5-01a42f8bf30c - - uuid:52d3fbd8-d8d7-2543-8e0c-81d9ea137ecb - xmp.did:8CF5709C0E20681188C6A12CE4B46A4D - uuid:65E6390686CF11DBA6E2D887CEACB407 - proof:pdf - - - - - saved - xmp.iid:F77F117407206811822A938BEAB82E55 - 2015-03-18T15:23:14-04:00 - Adobe Illustrator CS5 - / - - - - - - Web - Document - - - 1 - False - False - - 24.000000 - 24.000000 - Pixels - - - - Cyan - Magenta - Yellow - Black - - - - - - Default Swatch Group - 0 - - - - White - RGB - PROCESS - 255 - 255 - 255 - - - Black - RGB - PROCESS - 0 - 0 - 0 - - - RGB Red - RGB - PROCESS - 255 - 0 - 0 - - - RGB Yellow - RGB - PROCESS - 255 - 255 - 0 - - - RGB Green - RGB - PROCESS - 0 - 255 - 0 - - - RGB Cyan - RGB - PROCESS - 0 - 255 - 255 - - - RGB Blue - RGB - PROCESS - 0 - 0 - 255 - - - RGB Magenta - RGB - PROCESS - 255 - 0 - 255 - - - R=193 G=39 B=45 - RGB - PROCESS - 193 - 39 - 45 - - - R=237 G=28 B=36 - RGB - PROCESS - 237 - 28 - 36 - - - R=241 G=90 B=36 - RGB - PROCESS - 241 - 90 - 36 - - - R=247 G=147 B=30 - RGB - PROCESS - 247 - 147 - 30 - - - R=251 G=176 B=59 - RGB - PROCESS - 251 - 176 - 59 - - - R=252 G=238 B=33 - RGB - PROCESS - 252 - 238 - 33 - - - R=217 G=224 B=33 - RGB - PROCESS - 217 - 224 - 33 - - - R=140 G=198 B=63 - RGB - PROCESS - 140 - 198 - 63 - - - R=57 G=181 B=74 - RGB - PROCESS - 57 - 181 - 74 - - - R=0 G=146 B=69 - RGB - PROCESS - 0 - 146 - 69 - - - R=0 G=104 B=55 - RGB - PROCESS - 0 - 104 - 55 - - - R=34 G=181 B=115 - RGB - PROCESS - 34 - 181 - 115 - - - R=0 G=169 B=157 - RGB - PROCESS - 0 - 169 - 157 - - - R=41 G=171 B=226 - RGB - PROCESS - 41 - 171 - 226 - - - R=0 G=113 B=188 - RGB - PROCESS - 0 - 113 - 188 - - - R=46 G=49 B=146 - RGB - PROCESS - 46 - 49 - 146 - - - R=27 G=20 B=100 - RGB - PROCESS - 27 - 20 - 100 - - - R=102 G=45 B=145 - RGB - PROCESS - 102 - 45 - 145 - - - R=147 G=39 B=143 - RGB - PROCESS - 147 - 39 - 143 - - - R=158 G=0 B=93 - RGB - PROCESS - 158 - 0 - 93 - - - R=212 G=20 B=90 - RGB - PROCESS - 212 - 20 - 90 - - - R=237 G=30 B=121 - RGB - PROCESS - 237 - 30 - 121 - - - R=199 G=178 B=153 - RGB - PROCESS - 199 - 178 - 153 - - - R=153 G=134 B=117 - RGB - PROCESS - 153 - 134 - 117 - - - R=115 G=99 B=87 - RGB - PROCESS - 115 - 99 - 87 - - - R=83 G=71 B=65 - RGB - PROCESS - 83 - 71 - 65 - - - R=198 G=156 B=109 - RGB - PROCESS - 198 - 156 - 109 - - - R=166 G=124 B=82 - RGB - PROCESS - 166 - 124 - 82 - - - R=140 G=98 B=57 - RGB - PROCESS - 140 - 98 - 57 - - - R=117 G=76 B=36 - RGB - PROCESS - 117 - 76 - 36 - - - R=96 G=56 B=19 - RGB - PROCESS - 96 - 56 - 19 - - - R=66 G=33 B=11 - RGB - PROCESS - 66 - 33 - 11 - - - - - - Grays - 1 - - - - R=0 G=0 B=0 - RGB - PROCESS - 0 - 0 - 0 - - - R=26 G=26 B=26 - RGB - PROCESS - 26 - 26 - 26 - - - R=51 G=51 B=51 - RGB - PROCESS - 51 - 51 - 51 - - - R=77 G=77 B=77 - RGB - PROCESS - 77 - 77 - 77 - - - R=102 G=102 B=102 - RGB - PROCESS - 102 - 102 - 102 - - - R=128 G=128 B=128 - RGB - PROCESS - 128 - 128 - 128 - - - R=153 G=153 B=153 - RGB - PROCESS - 153 - 153 - 153 - - - R=179 G=179 B=179 - RGB - PROCESS - 179 - 179 - 179 - - - R=204 G=204 B=204 - RGB - PROCESS - 204 - 204 - 204 - - - R=230 G=230 B=230 - RGB - PROCESS - 230 - 230 - 230 - - - R=242 G=242 B=242 - RGB - PROCESS - 242 - 242 - 242 - - - - - - Web Color Group - 1 - - - - R=63 G=169 B=245 - RGB - PROCESS - 63 - 169 - 245 - - - R=122 G=201 B=67 - RGB - PROCESS - 122 - 201 - 67 - - - R=255 G=147 B=30 - RGB - PROCESS - 255 - 147 - 30 - - - R=255 G=29 B=37 - RGB - PROCESS - 255 - 29 - 37 - - - R=255 G=123 B=172 - RGB - PROCESS - 255 - 123 - 172 - - - R=189 G=204 B=212 - RGB - PROCESS - 189 - 204 - 212 - - - - - - - - - Adobe PDF library 9.90 - - - - - - - - - - - - - - - - - - - - - - - - - endstream endobj 3 0 obj <> endobj 7 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 97 0 R/TrimBox[0.0 0.0 24.0 24.0]/Type/Page>> endobj 93 0 obj <>stream -H‰tTKn[1 Üë¼€e‘¢(j›—¢«´¼èŒ|I€Ä@Þ¾C='y)\øÇ¡†äâóþçBû›¥ÐÕõBi¿ -OÄóE§ãKÚ‡ëá”^á(xá;·6”ZÖ1ŸS¸Ÿ“pœ§w“-"À»’K·ü$™q…XÂ_fôcºO·éH4Þ;|ÞîÒ/zYõ-‡)¤–[]Ô6zhª ãCK9ƒ)À>ËP¶ä:Œ6imZ=g_A[0+²1€I§Š©ÄwS¥ß8)ZI³Zœ÷®°Í"ЋC®y¥cR!ËW–eÆtj®-üjÈ Ž|ÿ°ðœ!¿ñ˜,ÇÍx–á¨ÄU`sÈéHçÙ¤êÑs ¹Þa›Déja·¦`q5 uÃ+ljBN‰Hg0v«Û1ØCì¸'D»pLÔ³V]‰£éYú$šG'Uû¸ˆµ•I !–”—,3`ÿÁ½tsç*NúëŽs.#.ÐŽp‹‘(·³ÑÆŽ¦wTÁetsÑ#Ÿdiu-ß%Î;ÓŽ!¾Ãöɹ¢Œ¤¶à…-¶s=+S£÷(ÌêØŠ+lÓ…çés±Xˆ}»Zu.VÄmHöI/‘äëŽ^L„j_žû‰·¤þAúvƒÿ‡ÛôW€\µÍÿ endstream endobj 97 0 obj <>stream -8;Ue`J-(6$!rr<-!!*~> endstream endobj 98 0 obj [/Indexed/DeviceRGB 255 99 0 R] endobj 99 0 obj <>stream -8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 -b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` -E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn -6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( -l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 91 0 obj <> endobj 100 0 obj [/View/Design] endobj 101 0 obj <>>> endobj 96 0 obj <> endobj 95 0 obj [/ICCBased 102 0 R] endobj 102 0 obj <>stream -H‰œ–yTSwÇoÉž•°Ãc [€°5la‘QIBHØADED„ª•2ÖmtFOE.®c­Ö}êÒõ0êè8´׎8GNg¦Óïï÷9÷wïïÝß½÷ó '¥ªµÕ0 Ö ÏJŒÅb¤  - 2y­.-;!à’ÆK°ZÜ ü‹ž^i½"LÊÀ0ðÿ‰-×é @8(”µrœ;q®ª7èLöœy¥•&†Qëñq¶4±jž½ç|æ9ÚÄ -V³)gB£0ñiœWו8#©8wÕ©•õ8_Å٥ʨQãüÜ«QÊj@é&»A)/ÇÙgº>'K‚óÈtÕ;\ú” Ó¥$ÕºF½ZUnÀÜå˜(4TŒ%)ë«”ƒ0C&¯”阤Z£“i˜¿óœ8¦Úbx‘ƒE¡ÁÁBÑ;…ú¯›¿P¦ÞÎӓ̹žAü om?çW= -€x¯Íú·¶Ò-Œ¯Àòæ[›Ëû0ñ¾¾øÎ}ø¦y)7ta¾¾õõõ>j¥ÜÇTÐ7úŸ¿@ï¼ÏÇtÜ›ò`qÊ2™±Ê€™ê&¯®ª6ê±ZL®Ä„?â_øóyxg)Ë”z¥ÈçL­UáíÖ*ÔuµSkÿSeØO4?׸¸c¯¯Ø°.òò· åÒR´ ßÞô-•’2ð5ßáÞüÜÏ ú÷Sá>Ó£V­š‹“då`r£¾n~ÏôY &à+`œ;ÂA4ˆÉ 䀰ÈA9Ð=¨- t°lÃ`;»Á~pŒƒÁ ðGp| ®[`Lƒ‡`<¯ "A ˆ YA+äùCb(ЇR¡,¨*T2B-Ð -¨ꇆ¡Ðnè÷ÐQètº}MA ï —0Óal»Á¾°ŽSàx ¬‚kà&¸^Á£ð>ø0|>_ƒ'á‡ð,ÂG!"F$H:Rˆ”!z¤éF‘Qd?r 9‹\A&‘GÈ ”ˆrQ ¢áhš‹ÊÑ´íE‡Ñ]èaô4zBgÐ×Á–àE#H ‹*B=¡‹0HØIøˆp†p0MxJ$ùD1„˜D, V›‰½Ä­ÄÄãÄKÄ»ÄY‰dEò"EÒI2’ÔEÚBÚGúŒt™4MzN¦‘Èþär!YKî ’÷?%_&ß#¿¢°(®”0J:EAi¤ôQÆ(Ç()Ó”WT6U@ æP+¨íÔ!ê~êêmêæD ¥eÒÔ´å´!ÚïhŸÓ¦h/èº']B/¢éëèÒÓ¿¢?a0nŒhF!ÃÀXÇØÍ8ÅøšñÜŒkæc&5S˜µ™˜6»lö˜Iaº2c˜K™MÌAæ!æEæ#…寒°d¬VÖë(ëk–Íe‹Øél »—½‡}Ž}ŸCâ¸qâ9 -N'çÎ)Î].ÂuæJ¸rî -î÷ wšGä xR^¯‡÷[ÞoÆœchžgÞ`>bþ‰ù$á»ñ¥ü*~ÿ ÿ:ÿ¥…EŒ…ÒbÅ~‹ËÏ,m,£-•–Ý–,¯Y¾´Â¬â­*­6X[ݱF­=­3­ë­·YŸ±~dó ·‘ÛtÛ´¹i ÛzÚfÙ6Û~`{ÁvÖÎÞ.ÑNg·Åî”Ý#{¾}´}…ý€ý§ö¸‘j‡‡ÏþŠ™c1X6„Æfm“Ž;'_9 œr:œ8Ýq¦:‹ËœœO:ϸ8¸¤¹´¸ìu¹éJq»–»nv=ëúÌMà–ï¶ÊmÜí¾ÀR 4 ö -n»3Ü£ÜkÜGݯz=Ä•[=¾ô„=ƒ<Ë=GTB(É/ÙSòƒ,]6*›-•–¾W:#—È7Ë*¢ŠÊe¿ò^YDYÙ}U„j£êAyTù`ù#µD=¬þ¶"©b{ųÊôÊ+¬Ê¯: !kJ4Gµm¥ötµ}uCõ%—®K7YV³©fFŸ¢ßY Õ.©=bàá?SŒîƕƩºÈº‘ºçõyõ‡Ø Ú† žkï5%4ý¦m–7Ÿlqlio™Z³lG+ÔZÚz²Í¹­³mzyâò]íÔöÊö?uøuôw|¿"űN»ÎåwW&®ÜÛe֥ﺱ*|ÕöÕèjõê‰5k¶¬yÝ­èþ¢Ç¯g°ç‡^yïkEk‡Öþ¸®lÝD_pß¶õÄõÚõ×7DmØÕÏîoê¿»1mãál {àûMśΠnßLÝlÜ<9”úO¤[þ˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ -¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ ÷„óû endstream endobj 94 0 obj <> endobj 103 0 obj <> endobj 104 0 obj <>stream -%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 15.0 %%AI8_CreatorVersion: 15.0.0 %%For: (Tim Berners-Lee) () %%Title: (card.ai) %%CreationDate: 2015/8/10 17:45 %%Canvassize: 16383 %%BoundingBox: -1 -19 30 -1 %%HiResBoundingBox: -0.001953 -19 29.2188 -1.04395 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 11.0 %AI12_BuildNumber: 399 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -24 24 0 %AI3_TemplateBox: 12.5 -12.5 12.5 -12.5 %AI3_TileBox: -276 -368 300 366 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: -9 3 29.45 1318 756 18 0 0 403 387 0 0 0 1 0 0 1 1 0 1 %AI5_OpenViewLayers: 7 %%PageOrigin:-388 -312 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 105 0 obj <>stream -%%BoundingBox: -1 -19 30 -1 %%HiResBoundingBox: -0.001953 -19 29.2188 -1.04395 %AI7_Thumbnail: 128 80 8 %%BeginData: 6872 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FD1AF827F8272727F8272727F8272727F8272727F8272727F82727 %27F8272727F8272727F8272727F8272727F8272727F8272727F827275227 %52275227522752275227522752275227522752277DFD1BFFFD64F827FD1B %FFFD64F852FD1BFFFD64F827FD1BFFFD04F8527DA87D7D7DA87D7D7DA87D %7D7DA87D7D7DA87D7D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7DFD135227F8F8F852FD1BFFFD04F87DFD5BFF52F8F8F827FD1BFFFD04F8 %7DFD5BFF52F8F8F852FD1BFFFD04F87DFD5BFF27F8F8F827FD1BFFFD04F8 %A8FD5BFF52F8F8F852FD1BFFFD04F87DFD5BFF52F8F8F827FD1BFFFD04F8 %7DFD5BFF52F8F8F852FD1BFFFD04F87DFD5BFF52F8F8F827FD1BFFFD04F8 %7DFD5BFF52F8F8F852FD1BFFFD04F87DFD5BFF52F8F8F827FD1BFFFD04F8 %7DFD1AFFA8FFA8FD3EFF52F8F8F852FD1BFFFD04F87DFD11FFA8A8525227 %27F827FD05F82752FD3BFF27F8F8F827FD1BFF27F8F8F87DFD0EFF7DA852 %27FD0EF827FD3AFF52F8F8F852FD1BFFFD04F852FD0CFF7DFD14F827FD0D %FF7DFD0B52277DFD04FFFD1052277DFD08FF52F8F8F827FD1BFF27F8F8F8 %7DFD0BFFA8FD16F87DFD0CFF7DFD0CF827FFFFFFA8FD11F852FD08FF52F8 %F8F852FD1BFFFD04F852FD0BFF52FD0AF8FD0827FD04F827A8FD0BFF52FD %0CF827FD04FFFD11F852FD08FF52F8F8F827FD1BFF27F8F8F87DFD0BFF52 %FD05F8272752527D527D527D5252527D27FD04F852FD0BFF7DFD0CF827FD %04FFFD11F852FD08FF52F8F8F852FD1BFFFD04F852FD0BFF27FD04F8FD0F %52FD05F8A8FD0AFF7D27275227272752272727522752FD04FFFD05275227 %272752272727522727277DFD08FF52F8F8F827FD1BFF27F8F8F87DFD0BFF %27F8F8F827FD1052FD04F852FD36FF52F8F8F852FD1BFFFD04F852FD0BFF %FD04F82752525227525252275252522752525227FD04F87DFD36FF27F8F8 %F827FD1BFF27F8F8F87DFD0BFF27F8F8F8FD1152FD04F87DFD36FF52F8F8 %F852FD1BFFFD04F852FD0BFFFD04F827FD0F5227FD04F8A8FD36FF52F8F8 %F827FD1BFF27F8F8F87DFD0BFF27F8F8F827FD1052FD04F87DFD36FF52F8 %F8F852FD1BFFFD04F852FD0BFF52FD04F8FD05522752525227FD0552FD05 %F87DFD36FF52F8F8F827FD1BFF27F8F8F87DFD0BFFA8FD04F8277DFD0C52 %FD06F8A8FD36FF52F8F8F852FD1BFFFD04F852FD0BFFA8FD05F827FD0952 %27FD07F852FD37FF52F8F8F827FD1BFF27F8F8F87DFD0CFF52FD05F827FD %085227FD06F852FD0CFFA8527D527D527D527D527D527D527D527D527D52 %7D527D527D527DFD11FF52F8F8F852FD1BFFFD04F852FD0DFFFD07F85252 %5227525252FD06F87DFD0DFF52FD1AF8FD11FF27F8F8F827FD1BFF27F8F8 %F87DFD0EFF27FD05F827FD065227F8F8F852A8FD0EFF7DFD19F827FD11FF %52F8F8F852FD1BFFFD04F852FD0FFF27FD05F827FD0552FD04F87DFD0FFF %52FD1AF8FD11FF52F8F8F827FD1BFF27F8F8F87DFD10FF52FD04F827FD05 %52FD04F87DFD0FFF7DF8FD1727F852FD11FF52F8F8F852FD1BFFFD04F852 %FD11FF27FD04F827FD0452FD04F87DFD11FFA8FFFFFFA8FFFFFFA8FFFFFF %A8FFFFFFA8FFFFFFA8FFFFFFA8FD11FF52F8F8F827FD1BFF27F8F8F87DFD %12FFFD05F8FD045227F8F8F87DFD3BFF52F8F8F852FD1BFFFD04F852FD12 %FF7DFD04F827525252FD04F827FD3BFF52F8F8F827FD1BFF27F8F8F87DFD %12FFA8FD04F8FD045227FD04F8A8FD3AFF52F8F8F852FD1BFFFD04F852FD %12FFA8FD04F82752525227FD04F852FD3AFF27F8F8F827FD1BFF27F8F8F8 %7DFD12FFA8FD04F8FD04527DFD05F8A8FD39FF52F8F8F852FD1BFFFD04F8 %52FD12FF7DFD04F827FD0552FD04F827FD39FF52F8F8F827FD1BFF27F8F8 %F87DFD12FF52FD04F8FD065227FD04F8A8FD38FF52F8F8F852FD1BFFFD04 %F852FD11FFA827F8F8F82752522752525227FD04F827FD38FF52F8F8F827 %FD1BFF27F8F8F87DFD12FFFD04F8277DFD05527D27FD04F8A8FD37FF52F8 %F8F852FD1BFFFD04F852FD11FF7DFD04F8FD0952FD05F8FD37FF52F8F8F8 %27FD1BFF27F8F8F87DFD11FF7DFD04F827FD085227FD04F852FD36FF52F8 %F8F852FD1BFFFD04F852FD0FFF7D27FD05F827FD04522752525227FD05F8 %52FD09FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FD0DFF27F8F8F827FD1BFF27F8F8F87DFD0CFFA87D27FD07F8 %277DFD07527D27FD05F87DFD08FF7DF827F827F827F827F827F827F827F8 %27F827F827F827F827F827F827F8F8A8FD0CFF52F8F8F852FD1BFFFD04F8 %52FD0AFFA827FD09F827FD0B52FD05F827FD08FF52FD1EF8A8FD0CFF52F8 %F8F827FD1BFF27F8F8F87DFD09FFA8FD09F827527DFD0C52FD04F827FD08 %FF7DFD1EF8A8FD0CFF52F8F8F852FD1BFFFD04F852FD09FFFD09F8525252 %275252522752525227FD045227F8F8F852FD08FF52FD1EF8A8FD0CFF52F8 %F8F827FD1BFF27F8F8F852FD08FFA8FD06F827277DFD0F527D27F8F8F827 %FD08FFA87DA87D7D7DA87D7D7DA87D7D7DA87D7D7DA87D7D7DA87D7D7DA8 %FD047DA8FD0CFF52F8F8F852FD1BFF27F8F8F852FD08FFA8FD04F827FD14 %5227F8F8F852FD34FF52F8F8F827FD1BFF52F8F8F852FD09FFFD04F8FD15 %5227F8F8F827FD34FF52F8F8F852FD1BFF27F8F8F827FD09FFFD04F827FD %055227FD0E5227F8F8F827FD34FF27F8F8F827FD1BFF52F8F8F852FD09FF %27F8F8F8FD0527F8272752275227522752275227522752FD04F827FD09FF %7DA87DA8A8A87DA8A8A87DA8A8FD1EFF52F8F8F852FD1BFF27F8F8F852FD %09FFFD1DF827FD08FF52FD0CF827FD1EFF52F8F8F827FD1BFF52F8F8F852 %FD08FFA827FD1CF827FD08FF7DFD0CF827FD1EFF52F8F8F852FD1BFF27F8 %F8F852FD08FFA8FD1DF827FD08FF52FD0CF827FD1EFF52F8F8F827FD1BFF %52F8F8F852FD08FF7DFD04F8FD0527F8F8F827F8F8F827F8F8F827F8F8F8 %27FD04F827FD08FF7DF827F8F8F827F8F8F827F8F827FD1EFF52F8F8F852 %FD1BFF27F8F8F852FD08FFA87DA8A8FFA8FFFFFFFD15A8FD09FFFD0EA8FD %1EFF52F8F8F827FD1BFF52F8F8F852FD5BFF52F8F8F852FD1BFF27F8F8F8 %27FD5BFF27F8F8F827FD1BFF52F8F8F852FD5BFF52F8F8F852FD1BFF27F8 %F8F852FD5BFF52F8F8F827FD1BFF52F8F8F852FD5BFF52F8F8F852FD1BFF %27F8F8F852FD5BFF52F8F8F827FD1BFF52F8F8F852FD5BFF52F8F8F852FD %1BFF27F8F8F852FD5BFF52F8F8F827FD1BFF52F8F8F852FD5BFF52F8F8F8 %52FD1BFF27F8F8F827FD5BFF27F8F8F827FD1BFF52F8F8F852FD5BFF52F8 %F8F852FD1BFF27F8F8F852FD5BFF52F8F8F827FD1BFF27F8F8F827275227 %522752275227522752275227522752275227522752275227522752275227 %522752275227522752275227522752275227522752275227522752275227 %5227522752275227522752275227522752275227522752275227522727F8 %F8F852FD1BFFFD64F827FD1BFFFD64F852FD1BFFFD64F827FD1BFFFD6352 %277DFD9AFFFF %%EndData endstream endobj 106 0 obj <>stream -%AI12_CompressedDataxœì½érG“(úõ¸?aŸÀ]KoöÄÀêùΑ—°üÍøÆÄ„&!‹c’СH/óô7—Z»@@rSj¶(6 -ݵeVî•õÙÿóÃËñôrûËf¬'ÙH|öÙün³¾ßÞ}5¢ÒÑ?®¯ÞÝßaÑç?~1’ù$ƒ‡¦ÿ¨^Ùÿ}s÷îj{û}E_®ðíϺºÍ6w·ðõøÅfóÅèó/ໟ®î¯7ðíÅúîr²¾úÂ55,Ö÷ðÊdþeõ¥ÌF²üÊäøýúö÷õ»wWÿßÊBWÊfÛ‡ÛË«Û_gÛ?¿%ü«G:ƒ?ðÝ¿]ý¸y—>ýÊdkzNÕ%« -î'™Ñ56±Ø^<Ülnï¸Û^lÞ½›o¯·wï¾ÍÿZߎ¾]ÿ -߬GÿßæúzûÇhv½¾øMÀä¯VW×ëÍú~$%Ž|ú©^Í®®/¿{¸ùe³ ë‹õ+ªòŸï .¨ﱸ|õ(y¹¹¿‡®Bƒ8{?~3‹»…t}þŸ?n~½"HÀ\ý×¶Ú»íÛ›õÝoøîh¬ÌþeüÕO››·×0¥4RMr0þnís0 -ž%U£±.*˜Él¤‹‚¿s³ùýjóÇW£ï¶·ž€éÝýK‹1ð -ýÏßüøp½¹ûçíÕ=tŒê©y¾Ý^n®áyÿþêzM§K†ÿùŸÖw¿nîœÛë‡{B²Êµ3übý×Á$¹ïßnnÚþ;õq 耀60^-«Q™#øƒÕ›LtU6šÄ¿¶WXÖâª/(?˜¾¿»úõêö«±FÜÑR1¿¹»º ,Õ¨âÿ¨âIýÖî—» #¿¿ßÜÚîâÌ¿!›|ûÚ]Þ^η78ýïën9®·¿òwþž¾×Þòèó+€ÔwW·X§øŽ¾©^ýpý_}s·}xûÛ×[ñ9/óŸîÖðØèû_þ{sq‹Õ„»—W÷X²o¿x´"ÖÝfÄ_ÂËôÑýÝÿöbóTxK—·¿o®·o£j}Éúörôë»·û«þáz}»¾Q¹¯ùÅÕïðÍæ(Ôʨ0ä-L½B4xäè«Z߿ڳ¹½|çëæiǹl}//ûîF³»‡woF?m·×¾Úô+_»-¦R|¾mü@/Ü~ËÔnÉ>Ðl HOïZ§w·_ö¹öùúúúê×»õÛ7W] t|ï[âïŽA¬¿n~Ù^_½» ø•ü°¾»¿º¸Þ¼üëÝýææ±Úp6^_Ý^"u ½ÝÞ¼EbôòÍúí†ê¼³¢'_ú -óW@c;?B|Að˜ÝFßs·¾¼º²Ðj} x;Z^þºaùâ ÑUEf—â?E6)ê²P%Þ”¹â]åe7%È4y 7R—*Ç©d^P‰ÊM-Ìè³W³»óTú2rÕŒ\5#WÍÈU3rÕŒl5#ƒ*F90_  F`z¯ÎXãìÝÉý“\[~¶î… -ÏÐ;;ÖsÏõm¶ðhî°µ¿ÛloG?¢ä2ú÷«_oAŠÙw•¢¤U:.³RkESÕÆàÉKƒxXéBD¶¬4¹Ä¿¦Ì3èg¦úý«˜™Y>+fÕ¬žMg‹ÙržÍå\ÏÍ<Ÿ—ój>Ïæ‹ùj‘-ÔB/Ì"_”pU‹é^,ËÅj™-ÕR/Í2_ËR,ËeµœÂuÁO,ùgµ\­2¸$]Ê^.üßбWnÿ‡¿Âšè!m/E¿ñ…•c#6ºŸ]Ð%AýšQ§tÕÐc¼Jº -¸rº /—„+[f‹]ËþÀÌà4˜椢¹)àÊa¦ Ì—†YS ³×|…íâ;sü™ÁÜNç5Ìq Wóì˜{-æ -€ çÙltçg3ÑUÍJ¸ -\àÓ3—ÿ/B3ƒKÒåþ*þãùC5U`¨*CŸrúTØ¿¹p7þãâWŒý_ÛF áéÊþ¿0½ øcÅ»™˜Náv:­é·š–ô›O ýjú•Ó ëe½‚ßE=«çð[×Sø-kXŸu^›ZÕ~3QË:à-àw^M«üVU WQ™*¯t¥ª¬’å -`3ƒ™ž–ð~Y–,”¼Ô¥,U™+„Z1/¦ÅTuQ9\¦PEVHÀB(€gšC}ðþè\åYž™%æ`j 5‹Íà2ÒH@Ï%s.`žk=ŻԹ.´ÑJk-uhµü˜«)À¥Vü–ªPFåÊ4aNr˜¾̉„Á9YÂŒÌí¬Ôu…#‚y)h^pføÊ`bVˆ–0185SÿUüSØ ûs¤*I³´¢™"œ´s…³…ó…¤ÅÀŒ)˜3 3¶*–ÖÊœ.˜8ìÌ\Y4w0ÒB•¬%žAÄžÅÒΣ¡™”¹„E ëMÀ -˜%ÓÙœÐ%¬*ÄÜ©QœS£µÑÌéÂÎéçSДâ¤j…?QŸ¬.\5ŽYRó æ* ?@¡hãBʦ8…ÐÙŒ€ —™‚ëÈ‚&QÍô€hÁ‚¨S€œV¾¢%‹}J‹<ÇEËgF«¥€õ¡pMÔ‚‚†1 gU 8ø.ˆ1ìJÆpÂî§ÐR@5€Á¢2Lþ\ÀÄ×0íL¸†)Ï`€Á<ÑM³²“<”Z„t…™•4·K;·€ª²ÿxr3?¹s?½8Á8Å„'v’¡e{)I¼ÿñ×É?âI/!4aHáR;®]?Yû4žÕŽk¹ãZt^s¼ÿI®ÙŽkºãªãKDªW¹ã*º.AïºÌŽKï¸,’ˆ_"¬é¸šÐ„¹Á‰[‚à€ßK‚žÄEô-€F u¬%’àà7,aÀt”b2x4¬$Ü :ÂU XS¢ë°¦-IÔÉ[úÃú"^PÀª€; ˜!³€‡4n£…Ö¡N|Ô˜\Àª,€ "Y¬<"‘œçš rNš„e uÅÄŸ–6ÒÙY,õ9Qàe¾¢™—…@4Ô‰Œ® ²]…@2>#‚¾Ò4€‡R1Ä1 âñ…)qÔ9ð ›D¹BF —"dˆù"ƒ)Ù‹"Ö<>´ YkEx$‰‹kàY9ñ¯$NRŽrŠ„'”DSA¢CE‚ÄÈãˆäbºdh2¥‡!C°öÐ[zÈiµŠ@6sà"`1¨rááÄPZx)†Ž †Á²ò 1µ…°…ÀÌM¾zí§½òSŽγÍs ?ÑS?É+?Á<½¥ŸÚ¹ŸUég”ç³vs)@\[‘ ©H¼C¡´Z øh -³é -Êj é 5i sàmKÒ¤ÓX¨8Ô¤:̽ê cå0£¶šj +€fPTX¨ 4ke/+Äüù"ÉEå)ÿÔÄ<Kdþ\Ya“M2s+`ÊH¸t¢e+Iªd™RP9}D LÅɦ,™J’ꬱ Ib$îjkOÊ­E)îœU©òv%[–„7-!pŠ–e‰íJÎhW ¨I°c-?2íç–¿3òKkYYySÿÒšûže1› -Z’Ž·UÞà܅刎?jïPŽ‘z×^Ka9îÂ{ æž3O­¿€/æá¥õð•{‚qb€°Rc®³­¼_aé効õ0ðÏÔzjÂW¾HTVnqRŒñží¥TµXI#49Ç^NÓɪb¦õ8§{ŒGâÕb­¢Qð8Ÿn±ùÆx/•—2vˆ&áÃ)§)5ôiåeÚÜŠ¢,×N­Ô¹p²¦•1•—,s«ð;•Há%Ç¥Õý3«ÿ+/$æ^4¬¼)`æ…Àe$ûÁ:‰ÐçÅ=ë¥c]mÙáÌûÏqá+vâÄe‰ëÑIr*‘ÚÚÒ›tƒÿÞƒËÍ{p;:ãÔú ë[TDf¸9YT‚æÆù ,,hå:qÑ2#!6âTs$—hÈbORTà€°’‡„ÖÑE‰0ÛQcK£!9MŒSô È–ÄrQ@c«"Ú§V4[‘wGY#bi͇s¢|(!oÑÄgHic‹!2¡ˆahõ@ ÙTAþºÊzïæìÍ#™+³n>”¸ØõÇn@´ü·`!û áW["ûKë_¬­¿qN"ŠPsë”\²“E§éJ¥½¦|›¸:Œ'wîSáWޱêöo°oÝi~\©ÓeƒVzšÉܱ?ÊZXH*#+J>K¶ˆÊÈ[CÀÌØ–í,Ù…µc³{NËYðÇÂ#Ƥ)Qg·ŽqÉc“5W³Ä/#‰ßª‰ü^è·VjI^DãMÔµÇ1¼–ÖD-½y ¨ë€o,ú³V$Éßù@ùgj/–üVîwÎT#"+5[ ér²¾´f¾`HOƒæžŸC+ìr|׈óÒ‹7…µUÖÞ6óV¤¦‰-I]v$²" ‹;hCb¼aûQaQUDTY9,H-$ñ´¦1±aÉF Ò7#ÒÂd¥´ð]L‘Ž” úÎnhFN´IÄ -@bkàòÇè Èî¦ÄæÁ©(ê¥ÞaÃnAs—©é‡jNzt‰Hßi_»ÇÅ·LɇÉj+vNµcåΩw¬à9Ï)y.8ƒ½• (GÀêžSøœÊ§Ø‹nÕ>•œpIòÖÌFuŲ–ôÒÖœ¤­š´µbGX…f ™Å±ÅÁXOTåE·.ÿtU^tëòOWåE·.ÿtU^tëò«òAQ9_˜#‚URŠC³^Á’Bj ­òŒBÎÜŸ“I×­só!ŠKжYUs ªm¯fÍ«@´¤*¤©¡Êm/eçÍ[‘³~MÏ|0UåW¶[Û†Ä!^ßʇW­¨n¥Ï‰qNÁ·¶ÑVäÿ³k¾¹ê›ëÁ^[g`´òBßÃ?Æ€Çq ²QmÚ†_--è+Ag¸óJfóMj¼É¬ñÆû`œ|]ûNxîuÓ»:jbç3Z×ÈБ¶htH#ê(Š5óîhM$ÃX…³ŠZÈj] ¬MZP4"Xsg©·ÿ—Öôî ðmk:øò¸P†é¦u5õz¾Òg:ޯõË&Óes‰Ì*"² 4M"Á¾6‹V8#3"W\í¼ò6´‘íìpw¼Ö…:bä[Á9{ß™ýjªÈ\/) -Òrdû»$~6x~Iþ3¢¾üË)ÿÖD‘§¤)TޛϿ…gíüË‘§F¢¡ˆ6Pªuõ;Ž¿ Õ„ÃRg$ÎVD+*Òbr¤jÃTËLÐ\/(ìrA´¢Š"û -¢Ê­rØêŒâü¦Dpé+¸ºÄå.h­ógl劖7XVÄÐaù»FÇ-Ù‚™5ϼ‰²$ƒEÊ8ÑÈ1ó† Ô–µðrUÒürôª3 IJ8†ÕE±ÎH¼]på’D,g(T  ‰rL«‹j­¼Ùpæc[ÞxÈaRØ WgEDãB]]°+’š$Ôá@›Û!†!ò‚ oÇÕš€v~"kO+d;ŽèŽí8[tZÄ%²ÜtXaÈÁ'yï•UÅócæ·Y¹ VÆz^¥õµº-U©jbúNí¼S9wªyS1gµ|ŠÁAÊ~‡‘Û[Ô%gVýÎHf›±¤A²êÜ$“-­Â]ÑÖ!cUmÐÈhNì–·ágIÛ}P1*HvÀåGQD¿–´Èåƒc'qŠ&‰Ê/¹")‚%‰¹æ”ìdŠ*’*sø.‰ÔhÖQ†²x*£;¾ðüqYc ÅE,Û?‹=×ü±KxŒ{üšî¹jw‰pÛ¸ª½WÙu‰èCѼ؛wÆðK$°âœá—HÅ9Ã/QìÉ]4'ñ^R¦Ãfn9÷~DnšFqÙ~ø-" âò1\sÛ­8zKÙ˜­ÜFl5·P€–à¨,ëÌ –ŠÜzV-ïúb§wìš/¦V„tÞuŠÆŒùP{_Ñ£›…ß ÿ ¿)¨É:⫹͕ۧ<Ç -;}â½<Æ+9ú¾ØÉGã`ÝŠŽõ"JëŸF¬fœ^Zß´f¿4`Ì”\ÒKë6…§äLb74¡‹ó>[·³E‹Üz–¦Œ¬­Ha§´´±G=È[&l„Db¥r!€áª -ñ¾ko¦:Õ™R~Æ—2‰˜…hâ¾g,rw…åPÎßX ËÂf–¥1{[¡°Aâ2ë!ÌÉvXY'$ŠÇ ŠÌ b1rÕœÏ)ê3RÚ9‚¢!|¨EŠ»©wt=Jû… PÙwíãCžc‰¬ìQ~EÄ4.}hý°ÅîI‘‰»½âi‘‰»½âi‘‰»½â1S6ÛÀ8Z¯k#eƒñüFþÆ>þEkå"êÜV~mcB25ç¶35Ý“ÁAiw†3ªðÔîÍJÚB‡á“îTšZ¯“ÛA\•¬˜±·2ñW¶ô¡t+ -¯å¥]½šÂkQ¦eÃÓÒFhºT¥‚hI>±ìã¤'ÿ8 ˆ5Ïš¤ ÆFIÑÚ+¹[Ûœm³CÙd…Óˆ§kœ¤p:e“BVPÉ ‚†¬,ÉK/)À!„¬ xƒàZQ¨ƒ$€:Y`Ÿ»Í“‚£2²>Šƒ(ɨnC¡ˆë¿ -Ú[ØßÐܬm?H\íË:Dk¯@êwh»6v»/H§{¼ñ«Á¹»8RçF%¼O¦Œ|5Ρ;3B¸`PqW‰ÇyÊt?è·‘ŽkcŠ9د¶q~šÜÜHLæé7ó±½¥'%¹ y!M0%ÚQ$D#sº¦!óMeƒ³p¡¬l`–¡h›‚.Œ¥ïS´§y3ã¿|%lŸ"ÎËzåDrçRš‘*šûx/Ø%ÑÊÜŠësÒ:%¡I¾[XgQ}aÉ_Õg”ŒfeÃ=9ß3ä/¬39êªX)bq³ô!Î$´sÊYƒP°õ³¡Ô+qÞ ô»59õYƒPÐD`Š3ÀLm R|5müer¥îÄu lœS¸R¿Có'uZ¤úðŠc¤œ¿£é I=%óäj:Y"Œð[ÜÕôޔɕ:~R§ñùŒRÒã9RRgäÄyP:òžØP0Ú­2õÑt.ž®ðQ8ÚÕ5"qºqDG$Ž‹´Û…ãbî:ƒp„¡ìGHœùIâhœÊoÏ/|R$ŽÇ³y¤å•Ë£À<Ÿ'©öQ:.>ÏEèiB?ŠÒóqz.ƒÒ\ÏÈ­‚ʇì1n;$vèì×Ky3oÇ&ts–hÌ'=¸—ï'üËøÝJ.ßíd*íÅÛÜ(·ñÊ©mNÛ&!RX&‘ùÝU*Úöa«h7vú—¿uíF-ÉÞ‘ùh³–S™ìÏ£-Z•‹YHɆéàìö+§B:õ±ðÎE*#ÇÜØH7håòÅå6Jç…f€Ö—¢Ž’O+bŠs -­Zø}â’vü O+\ Uå“òvŸ91Á%;½áWÚíÞÊþj/@‡_Cl4G ÛÞ&¿ñ§ };\ÛŠY—Ôì’÷÷ ¿¹ÏíÄ™ú}a7_šÒχ4¹Ì!.|p¦ÓòTéy*ça{„£2Ùª¦8ùÇÂóÕNÎJ^§¥¥?@{Ä#&‘)¥Y‹9«Ëø5ó9¿rŸªŽs~Õ‚ÜV9»¬l KmTŠ Ï ¿m}Â×ÎK8ìÆ#áÆ»ðêVö³’æ=v<¿…ˆrŸUä¤S6Ëg>ü~KJMç= YÏ0åÜÂFýà¹È(cß”¢žhä6×™Ëtæòœ-­‡Ž³ÇÅŒ ›´„½„·vÆiª®ùÂt\ Ž ÕIrOY+§Û±“û ¶ãì(Þ’"½“wæ©U’yÊ´vî;¿ÒB$y§ZÛy¬‡Éù˜¢¼SÑŽžd'¿hejoꩼÞ*! Æy©ã°ŠîÀŠîЊ(¸BDfäÌÄáÝ;C,Dw”…CfÑh‘†ZkÑm‘X¾|¸Å누0‘Q“È8¥%ZÃ< -XEAL¯¥¥Ôqü¡ IbN!™L•ç6ñ¥£ÈÊ!&zŽÓr2›1ÈQìŠrÜäHÃ: L›.Ð@ØXƒt·„K•lègѾv°ŸÄL„YHØš§¼CXk¡Š³ ‡Ža8saìáÃ…Å‹ÁÅ¿J\ü5YˆyŸ¯"Já#"\sžnls\ˆùPÑh@ŒgËØuÃ;Û+¿™xa·³;ƒeéÑjI;Wmr\l–Îbéö°Ò†—O‚2žjdmÚXÅN#ëSöˆcM¬»\ðûÛzÄž+Z ÃL421®;=@Y›SFž,–ÊDÄ&£\ìLÎW“GøÑ8Rar,}ø¦ËÜ£ì>Ä©»Ü¨]¡ø. FîCV*›5n‘„­äÂÇ­,0÷›n -›ébn} <½œãbIóгÊ~Ï%?ñÙ-„KnA¢ &5Y’@Á™-X^Q$«TQ^‹Â{Ežãœä›Õ‚å‚’lØp(í¦Xï"½•ÓÂoFt.Ÿ~ >ó¡#û@s‚ ’ Ÿ|ÀñÇš'?ĹÞã×LGlD’zÀ9ÿæ™t’y`éÎHº²°> ŸxÀ+ÍiÞÒ«ÎÎ5¸ÓEÓí¤i¹il®)ï§‘£¦ÛUÓé¬i»kœ·FìpØtºlv8mv¸mº7‰ëÆ9âœþ3d;øàÙÂÙP#WÍÈU3rÕŒl5#WÍÈUcO±*óI‘É|Tê PjÈ:ÕtŽ×‰ÕN*>y«*'@mõٺ۬מ9ܲÀc¿L–•x8)²-£l§R€*xb)†µÕ¹­®šÈܨøØ±sUI=„Ç -MïªÌä]µMJwˆYɺÀ’º2ÀêÂkP#,Ø2tò¬µžk&ë‰*3sÖ™´Už/C¥…QÕ³Qñyz[*«¹â>Ö0“çëqGåÔk (‘Âñ«Ö1ìjâ€VQ3|Æ0cÈÕrd„ g¯™û \F᫺ÈyFÚ Áã?p%EÇV2‡û°j5Q²Œæ÷¼ÕžyfÕ —¿™µ5Ÿë $O‡bz"A"?þvU~ž^+%×k&:¯Ê3vº]7õ9¯@£Z@é*šÄ´„Vm$û=³ª¨>U§ð3Û"4>{Íç\s z€ vö5g«=Ç̺*‹ JÁg›ÖFµg“¹TB3V\ÉìœÜ¢£ò3ôÚÍC +£>WoÓJ9ûõ‡«ÛßF?ÂÇõõ"ù•*wÔ+CÚY5Úç½Ø(îF··yƒ…Ûhヷ…Þ–” ˜­.áƒKÌéœuÈEq/¬…HÚýh× ô‚áô†•ß0£í™pt§p]y7Šö;w¶mË6Ø;ÝêoóM7ùrľa‡ŽµÕ¤€Ú=1Î+ûãš¾8¶Î¦^8w KË'¬Žýo±nEÆG¶4k1]ǵ”ǵ4m ·¸£[Âñ-Ñ!..¯|s÷MWrN¹ûJíjÁв™š¬+“l¼×Àå“õ¡:.ÿŒ´‘:§“Ûí5iͼ anct–¤S;cˆUñ¹¸·lf#rÈ÷èXáµÍŠÍ6Q—{Jÿœtÿ%Æ……fÊÝpÈMéÃm¦~M,Ь@–ÓŒì ÚgÐFû¬‘’Œ.©I¼Å¬+—IsW™Û{³°Ë+a³ g~S™öÛÊ -Š~žÚí73Ÿyi÷˜­l2îÌ‹æA[ox¡•QŽä8K²;À|`w.iF¸l0¹°¶Û4 Þt^ùî+öd"9\­hØœöuÕ´‰« m[¼M+óÛ³ßá]…Âû -›ÞÂÔ_{ ½Ï0Ú™á݆"òšdwçÒûõf­]û:mêYami±£¯±«3J?Ðvìëä´•"9„.ÎL7?8†>‰¢@úJ²Zr^K¶‡ˆz¶k¿‡‚mŽ™ðáõ.Äžƒì] ½ ¶w÷Sv_ûà{wQ×ÿ!çd|uý˜Ýï˜Ü…mLsà¤8èÝÕñaâE’m/‹v7±0x®Ãþ ë¼#ÛxèüË»S 70Qø ©ï0VÛ§!&Ø(R„ôtèPŒLqÒ`ÜG-£íM¼Œ1³ 7 ;EA›(*£œ)žÆ¸á«H¶¼ÓNDn]ÁpüŸ¢KqiÞðÅ⪖‘ôÈÔ(ûŠý“ªI­ÀÀY èÖÊÄU€Ž @â—:•¢e–uôæÉU#ÿóöv}³¹ýj‹F„òŽB¨_³lþ¯¢#EÈÒ~H–›Bf '+52}ñcÝ_æþ7O£y:‚Z!-ÒpM}î"—€ˆœâLÍÒSq:rº&G½•ÿv‡ÿ.£h.y”§èMýTèÇå8ÌÏíŸßå'îä4ÐoAÌRGéS¼ø£‡( ø\Z,çº=µ¥ÏgRÑþ›ÕÄ'\›“¿~Ž v>fÝŭDZë!±ç<á8vË®ÉTøÿK<®,µW$2Ï¢œs›%ÉHª(a ”·+Ñ ‹è®ˆ„{·•8NB—þ-â³Âéàéù­ñ¹mXZ'ß–¶Ì+¢âÝÇ;„^ºÓâð|„dýœs[-JiâoçQ‡´‰Ó}LŒß -å·AùÎQ K{ÿ“;É,Þ¥„;¾lgW;«+ŒËr YWWw W#Œ‹iXód­Žã²¢݉çBêœ(ïNGr¸Î\o!ƒPŒ¿´°‡ZÅ'Ï©h oØÝ’Z„®ñq© ã—@½2vtÕ%™âldyb"¬Ð hÈœ“1«&cf`•Ï=S}숔º,ÉV&K4žã áÔgȯ’GˆÍ—5V.Ce(eÈØ*~ÞjÙ [²ß°æAúÌʸFmÇìÀÄœvˆ.çªð4¦[‚&s"LD “0ôpÜh„Œ`á4ãÂï¨í¾TkûÑ©Åqz# ½•³?µsAMÌ*Ÿ°b•½¹\BÒ8k2ú,m¨¹;ôŒ£Ý8ÂÜr¶ŒQPê“8 j6·6JCÆ”)Ÿ'Ÿ:Ô4K¦¦¤Ð;¶ {ÍYDêI¼ ½½=ÝŠÞÚŒÎ!ÅgËçÅIØÅÙ²yEq0%m®]±F_ØØz—ù±i§rbw-„7X-’#‘c“Õ.UмÊp‰:þ™E×"ºÃp;BÜ¥¢ËÆ€‰è„`ã·‹¸«Œ.Ò¿™éu›ØàPtÆÆs´jIqªAXPpjåRޤ’‘ÛfüÎÜ¹Ý f³öÓ†rÞVÐY ízžb–žÂ§ë_øÝrš2õ/hŸfÎu9úq—nA[ã2Ú¥;¥Ìü†Ž'à„ü¥ º™ug´?×Ð#KÚ’oH¦3EšKÔfó‰!g¿ˆó\ÆŠÆþÑE¸k]1ÖÑÿ”þ*Â%47Ñ/…8Iœ­#’­]ª.á)îZD×<ºf6Ñõ¿Š§ нT<ý`€îí âétoøÇ °Ãt³*ÉXƒ–Q 1}–B঄Ùû O¯+µÅ…ØàëZaNë1.ª §¯¦Ü”ÙÑ­“ªK{Â&ŸdHYè:­*ç%ñ®S`=¹¦ÓD,]wÊXPÜáÃ}䆯'Yô0¬Y]LH~|‚1¯QC -¡ýoO*õYÁið0ºPàá™Á™Üéu"gîÚæotê(,ylÇ”4¦„Q·6;:š¨DD™ †Úg5nîH|„Æ»‡Ý¨ &$ÑÅ`‹eG‰íb¡æ˜M®é6W«cˆHÍpGä{¬nv{Qå·¾Ö‘úáðÂûÇ‘*² »§š>mçÏŽóåUI®<·/$޵HQc&"Ü8†{î䟢µA'垺ƒ{¦ü³ÁAE´E'M»ãN3åÆÒ#PA"¸ˆphfOÐ]zÁºIe#]âÌïµ(%¢­Ó2M‚[…•„«†M#<³—˜Î×"½G…p0®£1…Hh„ˆˆDŒ.oÈcbT§ %:¡)DµÅ¨¦ ÎT~ÒíÍ•'&^´JÐé‰M¹ÛÛgUš†ß…(—Œ?ÊÅ_¶b!" *èO-Úˆ‘GèP$BaKŠ1gþÖs›ÏPaב3Ý1: uÄ­cs´µ?äl9@] Ù,léçà±Ê†È¬¼ÅÅ&¿¢£¾ÙÞÒ<ãyNi­­Õ,ôÛ¸žç´÷xŽŽwöûà”³LQ¶²ö8½0è@ëÊP‘æ§88ÎäÀœŸâøýè;'†Tí]I?ÛŠ%’ƒùêÆ9¤ÒæPa@…TˆQáÉA8¤îN`ÞŸ~*àÐø<£Í Øþ‚ç+ŒhCapç\ñ¶ a¢àŸöþiêzÞ­®CqðQ êú ®êú ®êú ®êú ®êú ˜:Ú€ -* ¨ðTuý_E+§¡Ó:œ2óqÈî¸ w…˜äÒ¾‘ Ÿß0d™T^?Ê’l“i¾I·÷ª‘pRtdœÌÂQ~–Ç'Vx¼6 )„Ÿ¿ãj/vtá‡HBЗ»'7×6†+`EŒ)FP~-áñ¡ bLx,·Ö¥¤Yt"z8‘A¹Ó8(²¡]´´D9‰гÊʬE -9c^—/´ Á†nggeU®–¢±¡.ÞÜ êV{|^ç2‚j”ÜO4~šÙ¯kù§› ÚÛ ðPG€ýXBµN - ºI@Bš ÷À÷r8Z0åÝ#¥ÝÇbì±* ‚C…&ˆ§‘îÂùb5%(/A¡ñ°ø>]lþ¥ m"@¹cC%Å&ŠÆ®J‡]û{Óc[~ ¥‹K¦ˆdaáqTˆ3ïÇ;NÚì  Žp(2ì̯',¨íñ3vјø<{f‡£B$t¥”fÞßuž¡ã:‘¡$gÙ{˜M˜¡èÀ 9€»¤&8T¶¦˜j [¬êÎ(Y c[ñ1˜n£ Éæãlæ6T6·Ä§— +Ÿh£ü™68Ÿ¸´Â¡4‹b1M¦pêy«›Ã0‹á¤•ÕþÞÕè÷U¡3/´ó®L[–¥ƒU§ÄÑv…ÑŠSâh»ÂhÅ)q´ÇªìŽ£žP‡=!Ò³'Ž=z‚Žp¯éŒõ9¾¸“Nù5tÜqI§Oéa5F¼¨:ÎPLjÛcÝÇù|v®ÇEó £xMÆ9Óv¯É9íL:jºŽgödõ°2»;jûŽ5GË4I†ùŒ]«nµÖÉÉEäv[FEk¿hê ¶>`¦¦’èif!Á%â>)ÿ_.aFš2îD3ÅF”Ó Î àr -„´ iòçq™ -«>Ì}.³8‘ƒMâ€T~]ò†øBw¡MÛ€‰*›¸Á%m˜’ç<"YÊh_kf“¶+räh›Î=>†°b\]Ý „îèAå,]Jé'›¥ó¦ª9ý2ìµMf|UJØÛ÷€‰ ÃX½ÁiytÁ'áo‹ä«¼ñ¸ñŒâ;N±’´¯£—LGyã{§áðgšáÕF7GY2£ŒÎY#gËlű©Xœi/¯7‹sØŠcS±8‡­8¶ ˆÃlŬÄ/| -¸Y”¿!älð9pl†Œ$GF#KÆb1þ°—ãTþ¸`{Byœ+ÃgËé2Ú 3’“â³Z93¦¢uúÑ#ç5N@ŠÎ@ò¦/òÀ;Wl“NÎAb7 ÛÔ§ÑUû+l¥-£«heв N<ÔJëÑ™ØcGjEœÚC„ÜÑõxrGÓ{ˆf†C|ìHña¤^ø´,ó(9KHÑ2md)TUrŽX>,¯)ä¿壠ĵ˗ÕLÎg9O},j) Ì|¡¤Ée·t L2/(†²yv«ü‘Ä`ç«ò$ARu/*Š]ôb¤W€Œ›‰¥+Ÿlêи<±#,oeÕvÇáÅ‘xqÞ”“†„µi^…—ÄâÙh¼(ÌLy=°qk¾#¬­(ºÂËxf˜†ìŒ3Ë;ãÌj NÓ¿ÓŠ1ãÁ¹sªâ0ª8ª.NJì b»Ð:;taƒ©ÒÑ3RÔ>V3 >Š£j œ/’pª®€ª$”ÊEÞÑà|dÛ4Ê[çæä$¸KŸ/¥ L·xŠÕ’²Ú¦ SèNÑ8Éʸ“¬h¶ø$«©=ÉÊtžd5­;£sððô»©°g[J{ŠU¬×£VÏ:}K£gÈ|8P*ŸˆG”ŽjJ'â£ÚžlÜy‡f*ñÈÐ<ù(ž8ì䣿ðrg8Ø) 8ÇÁNñðÄ¡;¥ÃkY‰tÆ -sPQF]ò9)° 9í–å¯gñÇ›4¡BÊÏV%ŸcP«Äd -¦VyMÇ  )¢¦ŒV 4"Ë¢WÆåƒ†6;%ŠsUxÃîä×)»öšÛ°Õ`Øj!ðÕ`Øj°†­ÃVƒã†­ÃVƒ!¨øy¨0 Â€ -*ìÌ pd€CS³?öݧ…ƒ<)wß™ónÍ$X‰B• -Zësu±C CÈ8”eEÉ79Û<&ZNû&9GÏ묣³kÏ^ó±Ù2OK•y&וéZo¦m “–°`öHà …¶ìs;Øý°+бZ%:O–Ñî4Jr®´ƒ w‡ž-“„<¦AqØ£ÞíוV8XÆ\ð£ tUÞ·gÍ_J°åëqET¶>ÉÖ¥þgí8ˆ¨„Ó<‡hâøx*k/™aœwŠÃ„“ªH÷#qâƒqL|$)§…¯ªí1’¼chnÍ´ÀGÈ ãʼn#¬B|U(9%ÛãœôZhEs嬌 E7ߟ䢄T&ix›ö¿á4õp—B(Ä*…¨¦8ºÉSáÿŸøT¾§úD'ù´båÂQ=¶eÑ8É'¾KÏù©}YzâO8܇ëñ'ý!¥yã¥ôJ¿O¢á pÊa½·»S¨VÔ³ (Í}ˆQ+rD¹? ÁÅ Ù¡(&h!!a!Ú§+ LÅa­C“(2GtžšÔ>7I>zlÒ,ĉƹIí““\Xkœ”Ä€‰Ý!`;6%ûð¯xKrˆþ²û|V!ô*„5Eç ‡À‘½¡aÍ“è:#Ãv†už÷$ -›w„„í9íIzÜÓ£¡`Q0˜Ø}ÜÓÎ@°à¢Gø3)Ç$6´ÐL—$è*s{„+•íßT†”Lç‚­.ØT7=WÏNcÍ»è< ‡#‡#‡#‡#‡#ÿÞ#û|¸ß¹N3Œzw® -ObE{,sîÀö8°Ç=ìñïe}f@ýfÞOge{,‡@ä!yD‘‡@ä!yD‘‡@äçïÁ¢OTPa@…!ùY¸u;3ÃU爋,Zq‘VÞOŒŠ\Z{o, ûmǶ£íèŒ 9»šÖì†E{ü›»oÇ¿¹Ɇ\ſŢb ׌~‹âàÞSÌ—M-N£ŒûãœBÚ¤fœS3Êi匑¢3Ê)˜›QN ³îí9 ²§a¹Ì Êt)S#ý!;c‘˜] ªÌòŠÌŒ&Ïêj…;W…ÏŽìÕ]d¯>”ìµ³Þ¶µ³½áàÓáëÎ{Û•ù–Œ "M~K‹>É~{¨Öܦ•Y‹bÊ6¥ŒHU9ÆæÆt4bq#§˜èp -ÆÁiLÈ>hë‰9 Å>Yo7ÜG[„0|ŠÈ!³?à³E ÏXw9ºbº™ÒÎ.*Ú¦¦]tuÖ•Y¯MjÛ$·;çž%ÄEÇåÉqJjAœ­Ø•£«Šœ#mÊT¸¬2•‹ô« þÛAlÏWeßÉí¬ï7w@aù/¼œ;¢J9© žÊbÓÔZzØÖ³DÜ UÒn®Ò„¦Œe–º9Lìƒ ˜Ètjͦ¦ä×qÑ%eZš[³-n+Ê÷…Ä”rã#rÊÕn@‰´°ßÀîêH ž§–;$aPAÕý˜ÖÖÐÛø¬–Ç5ÆGôÅä¨Ú:cæÖÿ²²YÅ%9™5å7ä|.ÈJWQ*2g«›“ãšã%9¸5¹»¥ÄyгO’OÎÚg6›"w[(3n‰Z¤uÅ1xhçÓÜC…U€ÄÊÑ‹(jCQ`Ž×`–ËVQf¸Á è® ³µ·îŸ×älÙ©H¤‡6X"æ1¤cXhÇ‚æxdŽ7¡€÷-VÇ3Ž4eÄ9:ëWÕþ¼‰ËÈK8!:sI†l’Ö¹ vû;éG$ ¼qFIΛø:»²J:o§õwŠÔé‹X³ëþ+;ÿ¦š¡Í72N75¦6ØÜ­–nv"·´ˆBŠj44µ;Öf>õ7_6ÄÂî^I÷c·‘‘ÆoÉ¿|ÍâEêâ³”M.ésxÓ•k±¥}lIàDâ9ïYæ6œ¤íÚã,ã]ŸMô)o|KŸ„½)ì6:÷Eé?óßÊnt.ýv»ÏÇbý‰~Î4ÓhG›çöä§ç:òvØi}” … -I¢9$*ìšyïpm¯Ê^eÈ-¢}C1ÒHsäTˆžŠJï< QøÓÃyˆéYˆ•'Ž 8a’Cí±ˆ"=‘#ÌÚ‘PÍx¨fTT36*Ùt#:¢¤Ú;p)™“¨©Fì”híÊiîÍi§jN÷é4vëˆtÓNÌ3<“<ÜÆøè3‡ì½Nã;º‚r#Ï~[ÙFɰû¨çÑŠò°ÁA$ÚñAÏÝ˽ûG&ÿ§‡^(Ñ64ì¶§¶í2²äªÄ ‘nçÎ… vˆ47ðÆpD†Û±ëXdÂ&…Uvû»ç~·»f6¯Fˆ_^¸˜%¿}˜¥ðö—•=S#{OVÜçìáJÍ&ËÈššNêÄt}Ó±cVŠÔŠâ£[SCÊ4 cM-Ë#„'¼Èz:oÄO#ÂXv쨉ö¶Ún‹u·Í:±®ì0¦Ð|‰ãN,Øi¿ö‘Äâ€3 ºƒ‰wZ ¢€b ‹ÔxXeÈŠbòÔEŽp­ tᡞž“ë.dßm¤É¯«IU&XKÎSm*甑Xã91X§2 A±1¨ /#Õ e‰U”Ë?ÔU–“VAÔµóÔÇçª(-LU”º8«tïmÅjLªL›ZË ÚñUå -š.Uä==KuÔ3˜w#yLP'UL5a6u•i²œÉ¼ Pè*‹,g¹œ%‰àzÞjûf”ƒ‚Wßmo¸»º½¿ºýu<Žluñâ»·øæo~Xßßoîn¿}¾¸Zßlo/Gó‡_6ï¾Ï£b’I9 ªQ•Ot&«QYOrX0 ÔHZ/ùÏÑÇÿ ·ÿ …ŒÌèÛÑþW6º¤òŸ„?*oB‘­uôŠ-%eîÕíÚ°è¶ãõ›Ã_?°3·4¢ï9ùR™×J gÑ  R•‰ñ·rçu”@@r|DB:G?¯¡“OjŒßÏ‹ 2@꯮¡SµÁw7`«ªÀ“–i5©€ -øw_tÔ‡e¯£rm&@Òʤ¥&¥†‘ÇíÄe®÷ú\;E>A±Ø¿íäõ$ËašâÉvïÇe@@PPIÛÍúší¸ùˆÛ¡>•ý´e®x.›õ¹všóíÈH‚)öá“Ô©ôÞÙ}Ýݸ•¸ç¶•¸È¶²Wb l®ŠŠj"k ãñûq™Ã÷úš°¡÷µI`³Wlâ¶›õ¹vÜêŒ×NYMJ“í‡m©`ñ–išõ5ۉ׎kg®ºvâuÒ¬¯ÙN ×ÎÎù°e®ÍúšØæÞ±-»Å¶¸ÈbÛ>lyÍ ¸ÒÄm5ªÇ(!ýË%ŸºJ~¦à/Ÿµ„1XH,‰4ÚÍCI㮎î]|D‡’Æ]ËïPRâžË’ºžh’‘C‰ü¡Äw‘?”iJ|w1­˜ÜÙádéŠ;ˆê6ªiÔ"KéÆAÔ¶c•ÄЮñD1]%ÐŽä¡Ä¶Yß±DýPb{QW»‰ú¡Ä¶‹ˆÄØ-%¶»û¡‚Š{.KZèz¢¹e]âi-'Uatçs»ØÆ>6˜¼oñÙµÓõ\k5ÚqÆíf,Æ–CÙS³¾cÙ`W?Ýxºžkat$ï—…]ÿ Ÿ=ˆÿ5ªqµÿS,YïEÍj]ORÜ*þfv÷ðî«ÇǶQ銿Ùh -¿?ÿ!D¢–u+e¤’+ ª -ýw#Ƹ¿gRÀ qÉ‹´ÄhTdpÜ[ízë:€]øžÕe]ÓIH…Ò¤ÕUUçInÚºt»“áYо–¬ƒ ~Ä-ÓuÉ{«‹2W|£1p5)]çd Á£¡r,ñÇ$Jªöç)þ4úú˜ÉáX`×a”´R ë©hqñ‹Fq1u-§â¸’ž’_ÒjŠ"ES?ïŠÕ¨‰YÝìË®b_É/GX)`†;z³»Í=Ü1-“ø‹ø§¨GŸ1úù?΀"c´ßÀb, m+ (5Ã^žÀk&*¦žfÀóT­°¸˜èº2\¬õ¤®©§iq«n†kT{n@zÍM®®¸1=@Lв.}_4ŒºUܪû pí¨¼ÙøÍ¹cZvL¢Tô†a%%,À²Þ=Ì_Î{„ŠÉdÝ€½°ÌeÂ×f‘We£ÛøA©*o·ê~òòJæûƶ©µÉ`ÀE•I©3¸«‡;ÆšŒaÙÑ“³!ª:Z Ñ Æ«açØ;ú×Y·%­m ßìýKÏ’Nb& r“PôˆRYé‚q_éI®Šºµ®Z•œ iö/&‡;ÖýÞn‡AþÒ=é­Ã¨8š+™ç0ѵٷé\ ÊŽ›½Ž»Š“îuõ:æqñÉs &ÒÜÁBÞȘDΓ£éÛC„=é„= ‘çÒŽ4ˆmþCބĕ„v;‰/ã®ØvJÀÑL1ÔµÎ]c ï£[-¿hñ+”¢JvûJnÝLœaû¹ -½B\ת5†’Å_K³¼ˆúÄ…ÜG…¶ÿ¦¦ñlTTk\H=¸hÍK^‚^“Öj'+í-¼io£gc øZ[sp!^ŸŸË†Þr$>ƒ¸‘æ|/ì(øl›(&µÉL •à -HP9'8*ÙQü~Q9ô*A叨#]Ž>-Ý@Ï|¤_µP¹˜-U íÝ ’ -#TŽçÅ#]¨5AO׃•Co£gc øZ[spnT®ž„Êz8ü•i}MK@eã«]°ø hj~¡ŽßZ‰N敊š½±D©¨¤+®Ln‰’ªŒ-¬=¥SÐÒˆ†dt™{¢¦òZsq-#€…ÎIºBf\º²…¨U\Ø~åu¦m±ÃÅ -¤'–V ÖÂÕµk¿Rƾ^ƒØ­gȘü¬ke­ÂÕÙ˜D¤Ï^}9½»_\]Ü_mo×w¾‚¢ÏÇð/+ëâ‹Ñ—/ïï®n}>›M/.n~ÜÞ¯ñÙ/FÿO~ ¿nvm‹Ð;ÜVg©:àùƒbnç°’U€XòÐÐþ\ˆ’&Vƒ,d|aA…’™_Tå ¨ma®óÂC‘W>è‡bUºâBæЦ¶µº )©0ŒYm;«´¢rcÕfÔ9þsÃPÛ>µÿ}BQiff™)êй+ÖFùeWÙB#3_X’ «ª,#(êÚ*•@*<©. ©ÜKñÖThTUZÕ1S¥`‘nEƒ„šå•MnQÁ`î(»Ì€Zº -H¥±½® _A xg%k»øP®-µ-Uá*mLÁ9 •ç™Wsvо7@µ[L(R¹b`vN†Õ™ô…•¶âjYzé$S•—ÆI¦En´¤±ë¼(ª<¤rÏ–µƒYU×¶Ð÷) +0«\E€Ô®·ÆêMÉÂbB[¨5g†¤qü¤Â.¿/H‚  µE\P•·ZàA¥¶¸¨™ J -jˉÙBkÍ0L:/œ‘C»yu¿°Ïæ2sšK]Ù2 ¶,—ÒÑV:³Ãš\Ya 4¼BZ]Âw -Kã:0Š«Âu¶Î\”‰‡UWؘ‚s*·C6Î!n@î¶w "3þê忳ºº†jÄ—þ:ùåÏß¾øn{¹ÛÏ_SaÔÕ?o®oá»1þ‡5ìk÷·¿¯¯èk9úò·÷é—÷½¥ï`†îÖ5Ýüôp÷ËÃõæöbóšþ:|ñæêúònCø2\Ü?®áËÞ^]@ÉcÝûü>È#/ø«³õ8zpåîê—‡{Ü&ò/ø…¯1ÕíÃÍ÷÷ëßñ¡ƒÆ¦z5¤¸ûéÀÞÝ_Ý_¼ùéêúà‘Ýn_Ò;½`2Œt„w›w×÷G d¯æzŸŽé—õ»Íênó`ñüuàÐ2Œz5´Æ þ屇ÿ¥AçÛ›·ÛwW÷½$W·{VѺžNööíæn}¿½;pHW·½Pèý¿4`tàx^nî.6ßÜ­ß¾¹ºèÕЮn÷.š£Q÷Íæê×7‡K™eŸõjF\ïSPÿquy¿‡[õwH¶ó ä½ÜCö>ŸþãÕôúí›õ+Ù«Ñ`ÇÓ¡üy(÷êXþlŽƒuèàý¡rÔö—ÿÞ\Ü϶·—ðÐl»g&>ð“ñ¤C=XàèÈö‰_.6¯G_ÚÞûÒö^ß­A¹þn{õî#Ô÷L¯†4è{ÏU?§¾×/Þ?¨{ýöAÝÔ½AÝëÑNU÷ú%† êÞ îý]#z¦êÞ7ë‡wï®Ö·³ë‡ÑøÑãÝýåbóû•uÅ>CÕ(À ªÃ/ ¡þŒ¬[u8Rò!6Ò«a ÷¤Kèûׯßmîû¸x.¥¥ýZ2—5‘êòP>Þ³´øøQ+~Kˆ5ûÈÖ}ïèØÑ þåÛÍÅÃõúîªÐûδØ^ÝÞ¿°ªTï¨Îÿˆc…{ò{… -ÿóTýaœ÷m(-Òs(/ËÞe¿ùî rå_ׇz®í:_l¯·w_ýñ† ƒý™;˜†åýáîõúbóòb}ð@û¯“ 18K‚çÛÛw÷ëÛƒMJý`k݃\þùv{»9|ýZ¼íQœ aeß?ìyz‡>¬<ÔkoÉG‹^‡:ú«g¾ þcßÇE ~ÓÏRPÀn§óüÛCG°’÷k ¦5=3Ý×ÈÖ@¥Ç=C­>Ša^_Ýÿ°¾Ú'š>3ŽÙO:|*·\ß]Ý¿¹ÙÜ÷,ÌàÓŽ Hyç·›»_?ßìh?ö‘cŒ=5–? ž=4zÉÎÑôwÆD™ž…=œ!&ªoCzzLÔlóûæúå›õåöf#ÌXõ š—¼²ÖS²Ö³=,§‘µ~ f kÏ‚û|Š1©ãžÅr¶‚R§_}×#`ýͩѽÌÑë|Ø­ÿ¾AÒµ[ÿð•ß/9¬½òÎ;ЯÁ!ïÀóDÄsfè×ÈZYžÆ•úÅcfK‹«wo¯×››Ííý·ë·}äM‹Þ5ô¡iBW@ôŸó7ëÛÛÍõËÍõæâpÕíÇ^¬=ˆ†¥ÿiƒœöjíAصÙüO¿¬PÜûÖ½_ßìN¿þcý×¢üá×) ¨7ßn/eŠ×W·›u¿‚>ÃÒ‘]î N f¶~AŠ:Þ0Öà¡%‡òø~Æv½A7ï¶7Ïrw<Ìúòòêþê÷C—Ð݆¬5½VBchîÁï¨÷‡mè88‰Ô‡d:˜t¤÷Ûgi“Çn7@†ç)=ìˆLñ·=CÆhçÏDqt†³~ Ç2œ®õ ‰OUˆú5šS¢~©wŸd0LÕ+œ sÑ/âuâBïÙh†`˜!æ½Êv§Ã\ôÌ%rz0LÏ2- Ñ0Ï?¥3ŸÄ—zÆe?õp˜~É¢C8ÌCD¢gn»‹~æÔp˜žqÜSÂaž;3ÂaÞ#4Î#?…p˜‹žYO¤Ýý͉F¡žq¢¾‡Ã þŸ§Q€~é­§R€~æT -Ð/z6¤Õû€‰Üz†ÉŸh:½žù“?Q(<»œ§¶1d3<>›¡ìÙžžÍp¾Ý^Ïú -}B*ü_ Ny=f}#CÒÆ¿;»Y¿ìݹ͆ ZÏ;/ûñBä!uA`~Õ/f~:P´¿‘¢½Bˆ¢ íHŠÖ/(ÚßNÑúÅâÎBÑ6wÛ}{R‚öì Ú¡¶ôT)±»Yß/& W·—›×W·W=sÝEÃøÔ÷~ôK¸>Oî¯ÞÚ~bö¯¾çÄýÍŸóíÍÛí»«~ªUÇm0r#ùþaÏ+=AµC7Š÷Ù„ßÚ3~¤Çeß‚{nî–Þѹ‹ ü¶Ç ÝÓí ØítžÛcGú^¿bZÙ3Ó}ˆl äPrÜ3ÔjQà'3Í~ ì<\³Ú©I%oqüâöþ…Í]Ú;ájs -¡áý²"GÝo,©ÿ¹ºy8<·jÕ¯aùÞŸ{Ëå%+óí-¡å³ŒÕi!…ü1L !d÷j˜Íqtéü/8[­_@LúŸíÝÃÝkRŽ[¿’˜§x¢ÝÉby¯v¢é©C:õ\ã¾YÓŽ6;½|»¹Áín°; v§¦ ŽV&¶;Y#™Ÿ»ÓßC§»Ó`wúð£ìNƒÝi°; v§ÁîôiÙž¤´^ï?¢©o9ºž`D{’… Äå^MÌãæ¥'Ø`äó1¼³:ï±fÐ~-Öö(ºG¹üó-°íÃGÙ38¶Fq‚ÊUÖ·­qŸ¼ª×Ûå?j6lÉ3úŠQ88‡F¿„†!‡Fß<¡'äÐèDNË¡q}uÿÃújŸ˜ú̸f]žCêŒÇeœ~¦û$ygÏ(õÀ;û6!ÿTÂ;û5¨S™g™>#nÈ;õóNõ“ 9§Þϼž+çԎ𷇹9§z•sê£ÌЯ5ðXî„!ß@/ý GJ9ß¿~ýnÓËØ Ë¿„E¿NQÄn§“|¹‡ê÷u ž´â·„XH™ï6—ý[(Ÿ¼¯}Pož®Þô·Ÿ† Ï*ÏÚnÿ7(žig/߬/· é€Õì“WÍúuÈý š ªYïU³ªW8A5ëÙ@ÕìѳA5T³A5T³#&öÍfÿºâ³Ïz5§®÷).ÿquyøŽHÓ³!ÙÎ?Á½iè~ùuÚ -ô¡‚ÐXæý‚LKúÈMñPÃ{´¿ž§Q㧇»_®7·Z:ò#½¿ÅÕÊ4d ¢}”Y‚úŸ$èõÝöæÐ(ìI¿6is×Óá 9‚’ñý²~·YÝmþï0‘=Ü»O)‚î·£d¿ÁŽ7 6d;úx²-­pgšœ×wë‹ûõõwÛ«žíÜó5>%7ÏEßÑÛ‡›ïaÞ?8ºgùXâþ§#{wuñ槫냇v»}Iïôj€É0NðBô »½GðëÞŠe1<Ñ­rѳj+ì€åãKÀÒ3úv.GÇñðûußv8ñcƒ©õ$z}„q¤?Ò¥D-z÷+*f¼@É^ 윲wÖsá{YûšAdí=axBëq±5YÏQÎ[Ó·!==¶&‰¯öä’úÛŒCãkz›!ºæÙlˆ­ù{¾gå7:Zåë×õAå{®’Ý9U¾~áä ñ ß ñ ß ñ½_¯_v¾Aã4¾¿kDÏTãûSDôK},EÄÁƒýÛN}Úñó½ÏYÒ]<Ó­µ]‹~€8áÁôkëª?£9‘‚õ<ÅÁ'Ÿ¾cu½ÝîÓeþ&毃Ïq}ƒàSa¿úåz}ñÛ×#.Ú¾]_\ÝÿõUßÌnvpO¤ý;²ýD"Ñ¿ºðÑDÅ®w”bÞ;|šŒèP+vχ7³ûOóŽ–|Rà {,û·É,®èñÖ`Þ;’»¹†ŽÉÙÙ¯ÍQ÷Sȯÿçêæápƒ¾î—ñÛ÷þ‰Ò×5¢[϶Ë\î]¹Ç[xqÏ··´Èv¯æ¥5†ä×–p Å~„¼éÛôæ0º„¤—냵©~Á0é#læáîõúbsÌØúEŠÒ<‘õò¼ÞÓdõ>é“·½´G[âÞ î}jâ^¯Fô>¤½OBú¨åwòð³ØÛƒèäòÏ·ÛÛÍáƒì¥mâY©¯'NòòR¯½5Š ‘ß›±¼¯øq…ßöìK !¥½v;çßöxûû:ÓÈñ¬§bv»1CirÏ Ò"ÄG1Îë«ûÖWûÄÔgÆ5ûhœ;c®ï®îßÜlú–üëdÎùEÜ~¼³g”zà}ÈÓygÏPkà­AõWøç3BÃáÆs$øX"+Ÿ‚ Ï*Ïu]žÚFšC&¢÷ Ô³d"ê™jHEtàà~êgBäó%$ê} -Ú¬³¦m8ß®á¡?Ÿ9}¿qƒè4º(;uá`ª>ÊìÕuçKz5h7Àˆâ7ЕwûƒhzA&=¥ôGSŒ!QÉ{-v'*9jõV¥Ÿ­ßý¶¹ÿBd£)üþü‡xÿë˜ÿ>}/²I™g -tóIQÖE¥é&SJÁMÉÂØ€¾Ÿ×"Äùýü|øßpóßPôÇÈŒ¾ýçe£K¬ÿG1VÅDgRT9©j3º¡Y*3ÒÙ$«3=+3QEYŒ´œTU© @M²¢4¾`.¨¤%/½T„—¨VYûZᳪëʵ U”0˜¼å“iUŒ»ŠÒa !Í$W2I=‘Jç0 _=SÚŒd>‘u¡GRò²€rüÞ~¾PR™¢ O”Ê´¹p%*ç{J`t¥¢V¨Nè.=áZuŸ¡UÛ/ÿ„iÔ`Ò6æ­±âhh&«T4~_b{/IS„ñæÍßûñ€Š<3¾¤hÔP4Ú˜ WÆïKlï]nt®Õ0~×/W¢5èFóÖXqüãfçn¢"Ûÿ1v¦ÈÂÇí9cwòMÆÍy7›Ÿ‹q³/¢"; _±ç¸=¾ƒþ™ætŽ›3>oœ¦ƒð0™ Wâ†A˜YF“A¨™Ì£f=bu˜¤èŒ-‰&•¸¸Jým»Ñ4¸®…GÊFeÒʼ5^œƒÿõO„fQ謩InŒÑ8PJ¸ËIQ—ªÄ.Ö“"¯etmbL ÕSšd%£Éó¬ŠJp8ºÖÔOW–Oò–ä(ÔTLŠLf刚£¹*':7@ï ³@Õd- ~Yè -G|ÉÒ0åY&CÙÛ)'¥®”ýPØoÿ`ä@"eUл -Ǜɱ×Ö£íר޻'ÄÕUäIGoOª¼Âe¨2]H¯ªeSXÃRµ¦tŽÔ'êÿŸ½¹ô>=?{åÄXþô ]nîn1ÏâÝýOV–ýì` -@Íl4Р˜µà£0÷å›õ5o·ç’Jê—×WœzÄËoî®.ÿÏæ/®.o·ø#ïîï(p%´ õ϶Ûë´o·èzùæáê’%àÏ^ðûJԣϿýü‘Ìl—Lûp}½¹G³õÅo¬ï.ñö%Û]âªÌò*ÐMÅ(¤µP~ïûH÷Äð I<ˆîÜ÷ñƒø=þE¡Šn`ÍD_ÇïÙ§aQý/DÔfô woîúùBÌ~nŸÍì P“Ïÿy‹ÊÏåTïË« À¥ø¿¤‚¥Ž¼ÄÃ&_…–ù©ÏARËAÀ®‹È–=›M/.n~ÜÞû˜[+xüò ¢ŽÄÖ¤9rtX¢¬âÆPŽt+ËÆñ uÛ=Á2±ò®þÜ\ÿ°¹{½¹¸giéßÖ·—×›æ°N$ÕÀÿ¤úò£ ÂØ¹„1@":¦½ ˜FûG¹hGºûXHo´Á’ ©8‚R=1rÌ{LTQòFpYduޤ°´À A©Š·¼DâPiˆâRÍg‚ˆ,$LPum_(›[¯–µDÐr0"tžÒììðfÇVT+µ}õD?õ#ÓøÌ„z,t0BéáBéý=°£ñh†žR±ôXÁ´Dš(1Á±,`†¹Fƒ¦Ç*íWá7® -_À-ø¾þmì_„ºø4ú²džŠã1:߈×¹+'ÑÀ¾”¾­B•¸Î”®³s:÷:êF~Œe´ˆ(–-zŠj ãÜg;Ÿ¥Ÿnî@ܽx ÍUú¨DÏ¢|ƒIN"}è=–Dƒ“<8?xhž_ÄÇø½ˆ>¹$ã i{“¼hÍPwIKͨkzµ¤¼KÏmÜðË.š´6„©@¾}eüTåʘ…Y°4ÒŒ ,I9Q¦ÊÜJÌ$¥ÈˆiµE¬RfµŽW®†f€V]ˆhuËRFëQLæ"YhѦE­QÐäk/b•[äÖè;Ú.sŒfaÐÈŒ_¡„J’úÇË Ç:7°–ŒTᬘŒg,™¾¹[ø?81u) û£éæBB¾0ë\è§¾$1M‡©güóÓ^`²Â:žeÍvW@új4ã9fáŠg¬ãY§ÏeÃ…/ìâu Â -\w˜uÖ¿lß<|÷ìšwpÃ!À3ÔžÝy×:© -Iàø§—œøSÔN¥&òÐQP֩—ä˜#¨®F Þ™þºÏ8.w?v_º—ÇîmW¿/¸%,g#£¢JNq]-®€${ï¾so7pŸçnA.]³ª•—µÝ#q­:¤%9]o ±@›Ê*4 -ð¶¶I ò}ØãÂJøš€³ Š¼E0MÆÎ¡Fšã T»{÷{Û½ìçÐ~ž#ä”Ò–ä8PB®Á}ÆÚݽoÚ½f†‘%©Ú6ù¹2Üo"¸¬@@>Ò_2ç˜d´Þó²ÊkV(0ìègOhQ–ðm•ÉNÕ¥˜¡?¯Ð•¡¿ZÜè¦,%+C•Ò9V.a’…)A½AÂD`ÈJ$a­|B\ÊC++j2¤Òc©^ÀoÖºÈÑHO×:Ïñ)ÐÃTT¬ù)^OÝîÆã66ìÜ ¤Š»K¨_WÊIãî‘0†Ž×œüzÞý =ØÒ5ʆ¨Á沪²J ½y7’·E7üU?Ìe‡å*ü,u& –œ )³`i˜x’Es å$b&IÿslÁ²Æþk÷.yY\µìD¡Oem4ô õÚµª‰iöÀ½ï¹Ù_ b'é¯Ùñ¢ÊZ V–çbŒ4Y H…Ø&¶ Ä:§d@+¥.-¹tÏÛJÝ.LÞðÆÛöì)måž(YwÛ±J••h´RU^ÕºSH•l´îœ×¦„'Ú±"°³ SQ[°k vC¬ÈteïÝwîÅÇÁNúWž×w“*ÆqýãVëþÝ.ÜuîçØ„åFI®Ã N¯TTqn«Ü3˜`Ø•dÖšFðÛ,çžÐËdKsãË£5DmDO5kˆ«o5w-Ä<Òæ+?û Ú&X°¨c¶°=À¸¬Û/âaºB—]•|¸dwÇ—’ù ``Tج±ÕhÚÇ´‹Í5GP4t®Yö¢kþv6…dËKÙcžÀ†ØªÝâ[Zì´7/ð†ñ3¾á¯úÁ[♕@øøÏ!xºWªΦÕú÷íž ˜réÿ嬓g?Y§ÀƒÆÄý*§-6@ÿ)߸+Bã)²*П9Q£Ò¡3 -3¥ˆ§IÅa5'Ç¬å’ -ô„¢!4¦´f…ÐÆ`¸Ÿ"ç<¾Tb4ÓDQ¾px¾ ã%d­œ?ó±»¾Q ÛäüCTKYúZ(½k„Ñû^Ø,ö’ ±=Ó`¨Ä†2÷c³ÑˆÉ¾]PZr;-cš9‡™Óô¢>õ·tÙúýSÐnY£¦(ÿ~ýùÚÂñD ›Ü=…áfû¨&0ÙH²P†‘9(c"£BQ…4§Ê©EÀ1àyÔ.NI©1‚9#ë M†NÀÓüóš(Ĥʲ²ruŒ©Ú ¤›âJæt‚ƒ®ÐVž*&ƒ e1×TÀgè š>é- ¤Ù”eUAnò‰–8{*ã`Ò±b{CQQ}DÇMUpÄ. í‚‚ÙR0*¶Å–0©#T«s#šì¨»ôˆ±à¡!XK™s-ZSEkn‰“ç[Ô/*ÒN¨«Òw•‚­ª¬*ÂhhÄFÆC¦Y1aVpÞÊ2š·˜çmÈ¿piß¼à„€GG™àá¯<€ÂQ.?@”ÀûIÿo›ë·Í#޲÷wÄ®sEÀ¤\¡h ­°–&>›ð¡ H¿2úõª¨pÜ|cܬOȉ}ñ„ Wà?»wÂ+®ZW«k“úA݈J·jk4×ìN»Ç¯1f2ÃÕïþÂÔhLϦhí¡#¤j7#B7îtT4n>>nÖˆqS5w³ ¼Žˆˆ-ûzš(^xÍU=öu»†ÇÔ™1õ˦µÞpµEÕ¶Únö®=ZÕ –czi´F[I9É8p XX­ñ̆IVæKN¤Œ¹HTBçIHî¤+Ãã`*ÌxE¹P²œ(iMç]‘«(x:Ô$3š-ŠtÞÞ°°,qHþª”È$ÐfŒú圎ÀÑDþСUfÄLŒõ ˜Móƒ§a;в‘ -½Z@+µ‘|ð J‚€²œÓ€‘¯ã$JÿY¥pµ*du*”\IœJ†"51µT\À‹M†ÌÕx¸ÐQè’JHÒ€iC/ öî *d01x””-Èät™'ÐQ޾@Q -òf‚vQÍ'Š”Yš3Œ/Šƒœ¹fE'Šà©f4 ^çt€ žõQæ|¤HZ9R¦¼4JÒA%…Ší˜ -ÉÔè`ÌjšÄú†/!§!.„ÄÏMGóð ÖzŽc™‹¨¨ªLIÂÀn’ÚO’OØY &ëÁ”LЯj@á‹ÑÐX€ãÑ'.˜ ’œ—lèÁÓ\…µõ)°=œU1¥*ÈAUÖ| -ðñ‚œ’9æ/Âi¨+C§›iò«á¸Š2Ô$-E3>hËTvÒé%. -4‚Ì“S0T\`Cc1â"E)¡"¹ {Z(ɇô   |ÊVe,sxbU(@ÀdƒÈÁ, :ùJ`]]\K¶è - ¥F}Ζ{d­Ãô­øÛ_ëik88ȓϔÁç+8lo6ðlDMg]1ŽÈªBž¥äJà ã`d´ŽnPžÍ -&]P¨6ªB•¦“É0¶», W«2:î Œ -ûÇj.bòCAþHgLEùk¼¯1n]Eo·zî I(g)âÝ70óŠW ýææ‡l¿±§½ Mê’b-Ò¯ÜÁdv‰±)„8\—öæÞðÑYñ ÕS¬_P@Í(ö‹LÂàzŠŠ¢¹,êÞ,¥÷k<ùþî—.'‡tžayèŠ"ŒDX"ì7¾D« ÓÜÊûˆTŠ(û8*Óãyxܸ‘-»"\g$CØ -`aÒÁ™™¿»Íï|íËÍ_Á¢õö â’FUü÷–‘Ô£‘sçz‚¨â’·ƒÚRLžQØ5¢'1°¨¦@×ÅZG,OñYاó;/­+×ÅýGÓØµ ™ÆvH@óÿ¢šûY2ðk¥+»iQfyå‹ð<’›èPJDW€g‘ ŒøäË0c=òÕ ‚Wæ¤1Ò a“ÌÈLDôfÞ Ÿ}í®ÈõÀÕàºúHì”,8<<ÃP& -jÁ[sZ]Ó˰ -)í–ƒ±û@iuà¡u]æ%ðuÑŒžz°a - ïR`5*eÉ›6PÏ ®)б¶Î© —¸0ÎÕ[Nˆcóg˜‘¼¢I‚ÊÑx -ì¬á‘Ž\DâT^Ž\ ¨Ì•nÖèŽÏ­‹²òEcz;oû‚¨…¨ÌvÃ×ÃÝtÝO¢¥°°°˜¦Jcè£'Hˆ’Mô%Qƒ¶ mOœ¾ÀÖ¡Qð¦A¹»9“­<|çÈ”{Ù}ŽçÌÙ^¸:Æì†Õ"õž¨é}R­¦o¢B׿fÿÃØxßdcèíÉiÍ ½×žé<8ÚD ½5/­p|Tˆ¡p¹|qã$H™â #5DE|šÂ²h·´/Y¿tš$¹‚½atUWÀŒX@ôŒ=ÕW_‹+pM]_„ÚliÜF]¬X -:™ehË—Òà -OùN‡ªZc;„Jó!GÏR¾ÓþéZcD;zÌÆy½qÊ«0åøREŠšÇ2ÃLjù2Þ ,i9âZ!O'÷lŒ#i;z¨ÁºÊ£z|mŒ3ØÚ2ŸwÄWT;;‰kÍüÿì½÷^*Ió8üÞ€÷""09ˆ QTÌ‘0%ì>»ü®ýíªžHOØ=g¿îùì9ÌLÇêêJ]UMÍ[úÌBæ¨Í†fçöýà&솧Xê,«?`ª2Bô•%;Œ!DÑ‚8¦£€DD PÙ{Ö+œ€&’é ûÞ­¨ÔtÅ+¢ù‚BJTÉVLó„yX­è/Œžêæ+¢ú‹zm… ëÁ=/(pq4V}¼V+3sú~È‚E@ÖxÈ -tx™á¢XG’zÜ¥Á‡žƒ@fp_3ßÀ®åˆ!#QÒïçëQ¸jvÔ_€…7CEðÙ¨ªÂRÓªÞŽí•ÞÚ¾ÌwÚTḬ̀áfwÆ °¹êC2^YÓÐ[™×÷CW s8T"tSðáhT4te§6ali™ú•@18¦3ߨúmЄܣ7„.( -`5c™/Ò ÞzÅ‚>F+æ ½#\ó ˜!]f#,HehÔ;2^€=IŒñÊ>levF?€ä‘ƒëc¸ÍœƒphE…¤ïvÚ@NàT¼ì[` V¯g{÷·£'˜ÊUÐ,•¥trç­7u¸‡] ö5³ F0 Í–Ì7Fõ ëðxtz6[ƒ2’³?ã dè£2K™#7[š›ß ÁÀD%ƒÓzÑ#òVü%0¿œëñD[•X4Ó¦žù -N8zV*‰*Z>‘uÀ§ŒÁJdýdÀxCƒU« ó…Ù dÈ4Þ 6e£“EŽú4`Gæ‹ú†1ó•9~½‘¹ùüd&\Õùœþ‚ó Ëy Æ -¨:Œ£9C4 ·\y r¬ ßmƒƒµíóœT¨T²ÀcNÑEP+è é N¦á'æ¡='|ñ@ä$/dƒD £eÜ>¨ÈÇÌ2^:%ࡉª§p`¥†5"é> K!¼ -BÀ"¸Áùd.ÀË‘ðn{I†üø0\<æT”#¯x<î$3£G„¸³²D%e,€æè4M«Ò#Hc[ 2„F±HÈ\³p«/seEÀ¨2&Ô!P#(yÆLVª¤çLà%ãx‰1pı.dE¨LýEy²§ñ,§aYú2pt ax*¨vtŸb‹wˆ -Á‘ ùEôDqAUYR!F†pE$t¡73C£ªkõš¢÷ÝªŠ¨ßî€é *Ê,B ¢X<µî€IgÐ"j<øà|wÞÙÏ-ÊϹƒK–ÉkÆ ¬J2±ýV›œðhÌ¢pÅ‘ÑA§,R? UP¨óu%Dƒ=Ú·Ã l- üZÐðAH.ðô4iHŸ†WÀ$Ãñ‡çñnÀ£ExŸœ:%–:G -ÎjñÖ:**ãi’K(Bè’Wà;è£KÐ%d1¬â¡§è>[0Z$çCÅE8¯µ™ƒý.é L‰‡B jà –†ªBY 9ÝíÆ‡ÀúBªÌCîÛ¨$ETDIU•ð_T ~ȧL˜7!up¡aWÖ¬ÍÆÕ'2Š_Òg<“”ÐL Æa¼(š*‹‚&PU^÷0'ª¶z8P‘MúdA©Ÿ«Oª«à& Fáé‘_ŠÊ.²€‡¨ÌpR³^ß@ˆ,ã¡=¦H{‹ªB˜ªˆûŸ¨Ò*¬}êÃÖUq‰Z1ªæ;ÓVË*ýœ(À`™û÷©ˆl7fí$sú·JmÖ"¸B€!õ;¥ ™9úV²èŠG–T6A’Ñ/¬¨,::`¢&,¥J­„G/iš0 -ï -ñ(ý¢U‚c €ˆ¨H²u’'OŒrfá¢5‘W™×äDßU („b ¤D%n"õ*w"…'ò6H;¨y‘g™ -.èŸÏ0zìˆEÐâÕÀþ‡&ŽÖaS©S‚rßLDD8Ý´ä1àBeYž: -¼‹LìܰKeÒYªž -aÝ´'®èÁðŠBýÝá`Nd=4±=É)€:UÈOãÇE­.¨Í¸ Ôˆå%–(ŸÐâj謌º^Ç)tc P”QVœ«—ÇÑ¢—eÔ‚°Úzã%äB€CbZˆøAøßM7>½0?%>Ñ”v½û?"Õ`4ƒžú£¥ ¼cð"1IQ©<*ÃÅT`–!È,¹°Ÿ8•ÏДL·+R§3ê¦EþU°a‘ê8ðBh%nÔì8ô§ä!¬~´>xèI†ç-‚ŽˆÔÔªÛ<‰´Á+Ôº¤[QA$fLzCÇ3Ð 1b½Žd ÝÂù™ÅR,z5 -è;LëÑSÀlP»(9D½Ù¨ÑÄx \ÿ]:‚÷X+4¾ƒ$2Õ“‘-L3n@8eð¸íÁ‘žÃX58GCúBØ1ø’g¬àbŒ§[ -5·€^ .Su¸ÅbQ8¨™ -M"4øƒGA•nUž~gPA¿SNXýKD·LpÁdèžÕ ÎrX÷"„w:”)ÁUdi)ž†¡0ÉBïyAâ”FO[já"Ì•‘È,È3 Á@F$Âõ\s€ûfiC@GÊ0M¬†sB ÷1'‘ÝBíh¤_^P,‡ -qn„bpx'fa×Ș¸ ìP­8$æ¿$tôuXYUÏ:2WYâá -0•ü5^ ‡ -d‰e_ä×ë5EŠ8‘E}cÀn5_Q‘Që¥V9´¯¥Ö.^Ï©€ O•Q¾_ÔøÜªü .ÒŒÌÿË‚xÌy‚x2°R¢/A ª¢¨-EY©0QUêYÁ:¢‹ÔãÞ©è9(Ó“%ž£hðÆÒ´ˆ¤ê66lFŒ&ÝRY8ÙR‘@ú!4I“¢ºW7Fô(4|“ -1 ½$ zÍfƒT ðê¾Ù€â! †ŠßýIÆèÙÌ¡†ÇpÀ˜†S š}Ãdúa/¸‘%Cª3 Äo,0l—¡Ž¤ðæ$’U D‚ÆA40rŠ>§êp22:\J ›™æë¦ÌWiÄÙxäÌ0 -ÇbN$ªœ€™Œ*Ïý“‘–Ôæñ„¼"!J£ºð6-ÂÌYê|¡‹ïëõwjñ²Ì(ºuCà—T…DDçu¡„X™*)kŽªs :ˆd¿[ºøäýâÙ³ˆdõo+)Ó†ª ñ €À 6pW²O@­ ©`,UÏó€ƒs訄q'447" 1•,–Á: -Ñ:ôH•Š:2µ „vRàÀº z(Šð¯ -f/#¤ñãá /‚ü¹“©š„a¡*f¸#<Ï5X<þzÃëAV„bŽAsõ I}ø8ÕE90< ÑEû.¡f@´ð,óƒèz7 ¯o–0T‘ÁJQÀdBÞj‡wICgˆ`aªÂéVijЀCAã¢F¹àŠ9N ^p<’”Í1ʰòDZ@¢A‘`Ót‰ - ¹BXþ|e"ÀQ¨YG¨.L -á(À9œ” „ý®×-ìy$daeÍÊó%‚4ÿó.©X:µîxQ¤QP†g¤üýbÆç—様4THZ´^âîŸF-L_òYÿ]²eêƒ^èÞe¾?+<ÐVõ4ÂÞ0™˜ñ“Ú×UÝ_…°¶`Ö¶ž¨æ ¿“ +Þ „qÀùcýÄÈ(E§¿±Æ¬WŸ›ÄÒÝ,Óm=«3GÃXE‡ -Ñ‘` kÓ1"VschÜán%NF5 Žš"I¡O¹-ÿ$†ê†üGl&Ëañ ’ãÁ›EXQ[&J 4BÔYý·wúl׸óáô^¿5A߃—N³Ø¼ê<"Ù^®Jà–ú ÈD¯þø :‘a}B}s³µðë'ÅX>µÂL^²%;Ÿ \¹(—+f.ß.F3_@xø»óú•fú+!là /(z¨*K ²øý/ê˜<â³­"²³ óYï†Ûà+ GKmºwtc¼ÐcÏLò¢—1Æj62;Øk‹Qìæ¤xYÈôò×Û£:Ymî9àŠb0(@>ÚV]Ñ?ÔªXzÊE8®Lµ3|·‰K„³e8”åez”9%A¯¨7 Y9 ßW1Í®4Q;dJŒnßA“#‘˨ï>tÀ°È–$I¡geú«„ø€¢VDW=Í9^ˆy3d¼FSHÏM -|èqY$Þ6Q´wËöRàÎ -2 ˜Z†ª˜‚B“…E¦Ö*ý Ä:+²>húÎ@“âgäX‘! -{•Y8ã^éìÃIÏ °ø}!¦vÞ%°t…ÅayðµH½×~…P¹ÏÒ²VÕ[sÙý~Z⠴ȃÊéF÷¾R 9Øg4‡À9,¸k ¦ÊQÜé°À|ÆCúN–ü£ºº¸?ˆv„~Ðz®j=ƒ³W%ˆô^¨ÞàÄŽ¡4:–% ÙÝMàé‰,á½pRË ½ûÄÈSHf®ó²N¥8êÊak]ŒV` Wy×0a¢FÆ3m8Íz©†qÖç¡ÓEœ RQ—‡«Lõÿaý€®½‚a2·6ôå§Wo›]xù +DªÍ¯yù-«7Í­¼üôJ-€´<ä¡Ëâ}¶ç³û†“\:çwŠžü“sÀSa$šÑׯ€ðN‘éKp³±ÔqYÑ Î4¹ôecŸŒÑ_ZâŒÌèZÍÏK/¦‚^Î"féµa´ˆ(Z¯XZQáèYXIdÈ.Á)aEY8"嘄&Ž& -/bžˆ¡!Qd)×ÀCàO`÷…L&p˜ þCà! -C#‡ñœ†T)¢(IæœJ8\ -އCÔXtŸ”©U•Þ²« I0 -‹Ž -¬Ê+4bJ@Ì…Ùõ­k 1e¯˜Ó~³p3yïQÊ"åzˆ]ãÁ ýú86Rèþ‘©¡rV(4_@}@ˆNO¹%Ì A³OÐ3f8£¦^Â+Z§ù5à˜ žÑS$Øç4™ ¸÷€ÛÜ&Çré pò¡1"<øÔt‚æjY÷^7ÂxÆDWøËxs`Ã'뀷@Ø3Cžp<‡¹±8I¿» NaÁ·HÔÕ jÀã ÿfÈžÊ`%ûÐG£Z©Ó"X¹ð ô›ÐÍYRh>-=ò^Éx(¡9¬BÅYâ”ô E ï¶Å‹Ox´ŠÉ+OÃBVF"Ò*Àù)ø/«˜åóü±xð'©àï¡ßæMfNèÚÇ‹hKã œúáÕ à6È¢ZÀ$HDHBÈ)®(<ú(òÆr@Œª,Ò4,sßCs„æ; -Í&4?äЂ‰…Ì?´L¡дA»8\~Þ€·² -¬¤bl•ŒÆýFCÈø!ôuˆ>SÄ-¤€S‡Þ‚H¤§&ˆÏÎŽºÎvôlÚÌÃù‹óò>/ho³µ€ÐOûðàRÜ™ácb~svTÖž-ši$4ÛÉ";†Ks[7fH¶û®÷WP€àmUÏ?iϯË7ŠaèÖ©êBfg“Ð2„ÁÉLƒÐ÷‘§q‚xH$+úY&‘¥Ñ*Ž$hûà(mcÑ;% -ÆõKÚÎRw4u€# æHC÷|”•m9RY…ÍcVR‰Ã¨[Áùæ RÀ(«S4€‚øk†>×0ø‰Â ‹ó[šAž^ÝKä™^W‘àˆ ¼Àµ³äSÁ¼6Ü@f Š„ÑŸŠ,Ró2\#àÍ(ŒJæÈ·k;æB^\SÖm/ -'(ô)UÿæNSkv -'R2= ˜À:¬á %Æ’W}Цý†kܪ5WoаçMZmM_€ÝÔ>>ƒßôå †£fú-8N ö3XcωV9‡šD8šÇu<ˆ›ÇvÔ¨çð¼]Ôì"œ×Íþ3XOÁ1ƒ÷  ¹â>’O,¡©ŽŠÒwŠ«?GX¬Tf•ú””J%J%Ta!Ö¥HŸDÊNlh fñf,†Á´üÚšÙJ†ìM„ì­CHvZÜ0þ]B¦D$Sp‘欧‡z¬*1+n# éU¤æñ²B¨„H=fnhUÂ(¾-®# -ºlXÿ|?©õûa%Lþ#ÍÞ`1µCÒãà“lÜ'#±fÞ —DÓJcð¶Dï¶”Áß*½!‰úȸÀ4)†ÈC}‰fYuY-+ΦKmíð²7²· lëºHQa#¢B‡ë˜×7ÍóàZ&Z‡»¢ª®¾ižE1µà58!¨pL*ÍÞ4Þn":¦.¨Ã¡=ÈyAïºÝ¤Öï¼9éõôN,øè€vGµv` ¡èv<ôT¿²è‰É-Œ!5DêLcCûËyü ’ÛpŸÓÎÁÑ—”Xø„/Csm‡æ†€­Í–67;©U¸¶è"IQ¶_¸êˆ1zDbIŸE#P$7Þ zv œž¢oûVJo87–}_a3’­ë…Þìes0ýW(xÈ1”%ûW Nôž"4‚¯ ß<œð¹fÈ#‡—@JŒ“jC0ì¢rìÌÚ«›L­Ó¤JšàQXúžd‰%æw¥ DñžùÎ@ÉÜ vÀ>aC ïD—sqºP7÷ÒØíæÞ‚—Ä‚æˆ%éuf¸Ø’DË-xeC8ûËy¼³ƒ¤˜Ï3„Áj>4[34×vhn”0Ìuv]DCtOѺwffçcÞ)CD²ï¸ýýôk$]…xSHÁéúŽüª¿Â3DÀ]x9ÜÏp1·N‘ßXôQ4è£^òI¸¡²`ÆtÑ;<©Ä* - üâ2z–9u†L2辸ØBEe†^~ÜAjíT™Þ®:/ÓB:7µSBS°´H l硸&ÕŸt*<ÔNåìŽö¹6Óü9H2FñÅ/—ðKY™ç—òB~)ÏñKyŽ_R™á—ö—&¿”gù¥!‹šüÒEüRœç—‹_ÍóK=–vå,~Iñl†_Ú^ZüÒV34×vhn¿tŽuvVòKšÄÓF‰!…'ÞxW0ºdðÆ•¢íFC:½‰•mÓ•»LÖuO³dh®³/l€£¸aü»R»„(UW.!Í ¸’­R.y‚¼1G=ÎzÑD4ðp×Òìuš+ŽzÉêÚ½©aFãülß©oéÒ0‚<·…mëbš"ô'$˜¶†ª˜.¼b…•ú›¡ÇCi\LØd¬ÜKÕ¾¬&Bfã‚j ö,Qƒ»mP!ûhÓúÀñY\Á@Gž®—Ø<5ˆçKO³-¬ÃÁÁ¾n%ÿt?©õû˹1çÐ ÌKÉô~‚ßPTF>ÛÒï&+‹ðø|:è—Fíþ„Œ(¢¯Q‚¶Ø8Â…~)u§äï³Úéxƒ:š»R£é¸å:©ö«¯ÚÈu6jh£Àêo.ú1]ívÛdw [íº^²B¦qq®á$ì:û£J~Ï%»ˆ4a//®,¿ (6‘ëV'–ç±ü˜ùe±‰äeæËÒ‰°â| ‚Œg}‚ --GÓ©j¿¯Œ2 ø„M8KÙ§¥cÓ‚¶’£ÑàO—­‰4ºŽÉ Ât½ ‚8VûcMƒŽÆS€®ù‡q¡'xL€ÄíAžÞ•,<§Fíñ¤«aµb»FöêsºLŠÊÏPù™({8Ÿþ䟚ǒÅ%Ó°/,<â=®æÂÐÿñI÷TY5ÚoêÜÚBØ5$¸ êݲ?¥[~fÊ<ùcLØöç‡÷KA­ãKv¹h(AêÏîÔ„1tÊb‡ ¢ñÈìOèWž²ì’? ä¹+2.J­#.C¢%J@¡Œ?È7]ˆ¬Ë Xý ·3ܑƅQgdÿ©i-£ÀÛLâiÒÍeót Âzoqž+*( ßÊÂ×ù‰ é§ ˆ?TúÅ0oDŽûƒ?ûø@¤'ý‚îÈ)0H"I"Yý¡_#iýä<×îCùt«Úî»hú–š1"z‘]"ªE®Úã6‘r ÁùÊ“j½ó‰RÕq»nU§‹^žŒÍuÖlŽ5ÂBØåõõ -…nwŠîƒQ¸:’)SÐ’Jš>y¿£QW‘•m‚èFJWÚlŽÃ~ºg#½0àªÈÁ-¦”ŒòbƒF·Kès-B^¸E~†¬qŒÄðªîM]7ɵ}ßYju‰d´¦+êÚpùmcéÓ_èÛà -aºôfÚãa·ú} PHRa–V¥1ªínD]8yWtƒ€³:š,X®ô ß˜¶'ë¬ôŠVäŸ@™•+mYëñ9WÛaÝ*½R<\$óøšÅnª¨bYËb@jú\޵ìZÿ¬ÑXéàJuµ~ãGÁ ³¶&°¬éYõ—Nd#’ýŸVŸÂðÖ]D©\\+óE­þQjõ]nÑKÈ÷E®þ9reó²_D¹$]X€”ô4‰¿Ý/ºõ#é–ðE·¾èÖÝú¢[¿Ý¿èÖÝú¢[?n±ÔÑYDs³s"‰ZÐíåÅ5~°ï `Òû"`_ì‹€ý®Lþ"`_ì‹€}°ß•€)_ì‹€}°/ö{0L ð+°ïË®½Û~êõ»m›M†8îþb„|õþtbžC¼ÿ3¨÷¯Ì‰û×¹Ð/nøâB_\è‹ ýv\h­|;_ è‹)ûk3 /öñe‚YJ3YÀf~Ð?«’Ë/!°_f•o£'¿¸+÷—@;oYV™Ç\p߀ Y¹Y›å­í&e#z®8“Ô¥&eý5ʿ۶ûˆ?'d_‡3+ÌŸÀ -x~—}ðÔÉT`ù§Øÿ3xøšÓgXÚ/îåÿÅÒ~_!ûwÛ6_,és,i‰Ú°]tûÅw~A¾óï›f~ñ³ÿ×@EˆgU¼\âô%¸¡Èp¡hD -Ç‹xE™ábÃJ‚ÌH¿¡>ôXx~ ÅåèåìpÃ-«S^¸ÝH˜¯À²J²àòÇŸG²ÌÄãJF}m4þQg¦Q“Ȭ\ ýªp—Ðn:^¶ 8áÕ ÞÚõùú?@ ¾_4e}š¢ª¿¸Eù¿' ¢$ó˜ÂHæEšd–g!·¨íxE¤™‹˜°,s¢ ÒË|Á>ü•Ë肨ñ“W¸ÀÖT?eôQû’~ ½úÅÍ…ÿ=zõS"#¾èÕ¯sr#(R“x˪ÀÐÀFëÀ¿èפ__ÉA¾+þïžEôf[\~c -ÃÎÞãò/И_<øê¿Ec¾d¤ÿ¡úÈ»e$••á>2¸%…c©ˆ$pÂWìè#_£Qõ/×á`Ôþ{ПT»®¿ Ùþ¿Aû2ÿ[[ÿ×1SUUûãæ`ÔûQ ÍÖàzÇ&æd&FM=ùÿØ1Uò±1èµÿFÈæYKoð‡vø\šÌÖš]ÂCoõ—ú±Ì`RhÏíu¤iÎòãzµ«Û}󵣯!±U:Öø„5ŸsÕ:Æü—+ÛA¿ÊhØî—íþK3ÌLù’6ªkô#cŸÜ•1¹Ù*‡ö*ªÞGÚK†mm!8nþ£~"kQî\ˆáÊwâ5D_äú‹\ÿ†äÚÂâÕô:3 Ë­jcðg¸Ú^L¨íM­I©á*( †Õ:LÂ|QëN‘Ú·Õºý†Nñùuò×0°Pþg¢x^ëÝÑÿeúwFè«æJihÝÿÃNâ?å¤ñ“ © -àZ¤GG“ëAQ6É@s<Ñe]dé¶{v2ðÖŸ ×Üv?Uß¶Ÿ\+¼VUb%^µ8ZúXøõ¯þî.®K'ò%ÆÌÀçÿ¢÷;uÅä8ðA`y¸¯®à s²ø¥( ¤17ýûï¿\'ÕqçGÒœFH(À|="ÊšúÜÅ*^ôSæ‹©ü;‚ü ¢~Éâ?`¬ý¿&ýR]èKéÿâ–_¹)–²0¸ŒòÖG[kªf&?lTGÀƒƒ”Y›;csqaV2 -µ£¿‘yØÞý¡&öŠõñ¨¾Ä8¡{·rбŠ@ž:ß±ncÝažu«íeæ‰ÿÓd[Õˆ‘Õ[dd‡í×V—üÿ{Yor·úf땞VÂÒPx鮟oü»1˜$T•DF”ÑíœüË9µx–åe®°gðS_šÇAlûIÛ}ç®Èe¿]4´¥Þ &Ë´ pÍR#Ý1Þe´!Ù0ã³>¡üYíí‚t¾çrtõÑFì÷J“‘ûõØÝPMʚ쿚¼G€/Ý;¾\h¤k²¿*ÇÁ”1î«ê¨]…t|Åš‹?¡Í®¯Ç|¶Ä|éæ¿lÇeÂâÏð¡úel'°Ù$šˆcUwÓ¼ à 2#{”$NDÜ—à2ôƒwÜzÚÿ*bÃÜÏІÿS,à#¹ú_$úÜÑÿï}2@ø‰Dÿ÷Rq¼#¯¨ÔÆBŒZ˜çEU!`wqa™#:—Ã0FCQx–ûó¥¨ÿ¸üð‹!ÂÂÕgz3ÿ„ôÿ„þ|OÞV§ÝÉ£Ma.·{î©0ƒ­ -ÝÉE†c1-Š*)<þ`8̘¢2,ø™Óù®ðŸ<«›HJ„ÞMl3ò& ês¶ßHŽ&8æ1¼áÍóé _"wB˜n(D_§4 KÕ®6™hHmJµµGë¿¿ µQš#@} àÂÝü½1û~£TÿÈü×­öDÓë­ ¹*`dµÞ™íMUyUAwn›Â«W¸È§\Zè"±H<:3+(ÎZ5oµ.øÑÊDœ—„™³q3¨½V~¤i}½’ÈÊ*/Û{d9‘WUg]Ö¬›þ«jT%”\‚ŒåaYRYi!XérèUSÝ©PNRUæ©ð1üÂ…°W=©¾jSÕk³’*a^UVT™Ç¼02‡ª #ÉþE‰Zÿ¬”?ÔM›Œ±*ïÊÇxÕ•Š ¢¹^¤ª„ëÅ -zÈ<Çë!ôª€Ÿ 18kÄÒ³¸èÍr”ù§fyi dRó$’…b)Q›ážæhÍ’WùÍð£o#a”ˆªˆ’èø'¤Xì"ÍÂhYò7i—±ÚåX :Aæ™å‡.©‚IÊH˜@ÄsžåÉJèíŠ0\~*&ªF»D@à£#ªª"8Û…DMø þCdDxír]ÁËÈ (dš´^EëiÄRŠ\EÖMÁÎVY\3²à¶VE†,0EGœ Ã+Ž" -‡e¸ºf­c˜ÀT¬d4+ +:vŠªÊŒZã8ÀhÖÀ0Ž™6+â’)„¿ÆdÁ؈¯ FÏÊ"(ò4.ˆ@A¥F#ÛG†GèmG'ÀIÆ‘éà¶âyA-1‹“I©üF£‹ÀÂ;ÌÞÝ$C.;!“'ûÕ±0¬±Ìæ\uÛ6Ê æTYÖlV$*£àQE}]8™Ò´lHsƒ”`˳¢lÐLí„Ä -޵µ†Hm#Hòx@ö$臶)PL‡1rœ±5Yän"' âÂØ30y0|ŠöA²< RQŒuQɤ„CèŽáU  $Û­¦„¶ þ°*YÙZv}œiWÀ¹ t˜”?p‡©%ÈÂ4ÂÆnái‹únÁÍ”ˆe«EA(«ïE•"5Ç)€‚EÉÀ(UÒ· {š,ŒÌXdAE™9™;´D@¥ó ²1UI3H¦¨›±ôí'žŒíGH4‡“"Ê ¢Ë(,RM‚¯F¨“zv8Úúó1˜±jÒ–`!  êf6Eæ;x^Xà£ã3ˆ gÀOeæä,#Ìì‹ïPN:–µìl‡ÇUáXƒÇr -ìY²ëáê‚C¶ œ‘€3¡IÐd*ⵂ›Å¡û†(¦yŠàdrئ¤0È,$úé˜d.ˆr7Ãv–M:Ke ‘€ e ²tK2¨"/0Y£Áx;k$”X#¬³b6*S”4&°Ø(YÛ"|¥)Þ$‰ú*q”šÓF*njI4¡)É”8*¼*Ð|ƒˆ”H0>쎳-°Q½cÐ\žULM(¨¬Bé>O#┪¨ ®ŠR=ÍæNÛ•`o³È¿ÎhVâxº)dÁf!¿‘ÁH,.¶Á¿xƒ›ë¬Çο}™Ô’'r.—$j¼–'ƒÉŽe­5®¥ãë\.ÀT” LI†¬uIÛ´d#PqŽEiÚoƒÇê»”ì/ ´*@€Ö€« Ë”BÊ„™ItgÊ,îU‰lx#gŒ•5vCi2máÊ#)¦{ŠêÀ¹jCsU®l\³QÞÿ@^TEoÏi\9ÕˆbxAT£±ëªýÚ…èöÕ±{]5•âmÐR ‡Tj÷;. ¦ê~ØŒ½,4†ÖÇø{OkÝd¯LÿÜÛZzt gkP>åϪ¡zéõSÊå¦@MNʼntgJ’„”–hW*Ki!Qa(ÿÓ¯L˜ý¡“Z@ -PÍd÷’*PjC^$²9qÿŠD?B¬²þ×e8D /¢A¬%‘—‘mˆDK@–I¸¤Œ”Š Æã™ýA•qc(/›tPRDv6ü`dãCE~%˜ÿÛù1ü TÊ '"äKEi‹P -U´ÿ`dQgëÆ°fè sHþP7"Û”“xÜd—*”¶V R–JÄ Yg)’9QN"òNæDT?¤’OS‘†¬µC¿Íë0f~è Ë”ë¡Ð ”„° ‡È‚¨%ã‘wêÌŠù¿Ž%Œ€lh2ùÛ`ôpM0ª@dEëˆX-KN¥ÈÙìƒÓ3¨Rs–Î)ÁP^àDʆ­fÃ:µwþk(‚(•°èäocß]k5WzÐŒ\ùÑ`:4wà÷œ1RÊÊ›¢8g -}„Ð3 i—n$ó`pkÙ8Ú¾bT¸BÆ-ÏJWŸ!@…S\¨ ‹;ƒ­A&ÎÏ ìs"¦@3Wï¯p5š³@â>4B.˜ -ËÐOå¿zµAšùÿ6ü‡ƒa²þC­;$ÿ¤ªãŽc-kU2ðû?È€û/Êe(2í°¹B„Qãð¬™ÁŸ}ûsQk:¾_íO)":üY5ìïrƒ‘þêlTƒ2hf#ß'"Ì3¨O{Z’©NªÞçˆñìÚÃ'›!žoNЧƒ††~OC/kK8ò¿^·O -„à/8‚»÷yñ÷?ª0n,`„XÛ?Oþê_#¹æGÐÓ&Õø÷€ý¶ü‡®µ®VÖ ŽüßÄ¿>† -Q«L½Õî6FZ_/3ƒ¶¶‚Õ é¼6Ð ~ø´;?—½qŽq`Küà »ö”œ#†:ÓïëŸëÓñdЋ.)l3÷Ï.ƒ1‡ùåÀ{¬7=‚‡ã_ur0‡ÝuÐñ± ;¨w´ÆÇpêúÚ¯"cô öcuD¶á)NࣹÕÚýùÎþzó³ÏâgbÁ'hÁ¯¼YÖ’sîãæŸÿwÛõÿûÉ”ÓQ]K¿Ô/9'ç[š¸°zœ¬VEÉL&ô‹ »1øù•ø³Ý@·ÖÕ³âÔ0Ç1ò/6+}ìó“ª ˆ~ÓõélÔ& -ÈÇ«fx ý"3›ŸÀ™åÃYá]™Ü/¶hÿ[4—¿>ž «þbùë›ØÇ`8i÷Ú£+áÕ +ÿ{ZQí_µÉ¿>ŒÒižrƒQ¯úO*—ßÈ0ËݰJJ×?ÆÚ_®8?Mô•\CÀg~±‰YŸŸTp ÑzýÛMÌ9øùɵûdÞÝjý7\3ûÐç'Ö[Íüžþ÷멽™µûY -™“2ëà þMº47þ…´I[“I¬ÁQþ]ZeNäÇ"Å/ ïõø7W÷ÿh¯¼í DߺTNu5­:•X3¬À².óœ…l¬éÐU¬ö_§ÕWÍU §Ã+”FÚXý¡¹*Úÿ&®l£=©ÖÚÝöD—X‰Wx³£õtµÿGu\Ö3û:ż™yú“£ImP5 ÛùlÞ©8ésÄt»Z·2¸ z€þÒ`܆Vñ+«#”à -qÂÚµ8sö”¥äÅ < -cc¬úQåéíÔ£OôdÞgÜð/kØ÷Å´«ìšœ‰F'3góéÑ`˜iUš Až•c#YP]'Ú¸åº¨Ž ÕU -×…6t§FŒžéã˜äj“RÕ‰æªA Šô¸´p§?¨wÓ‰ë•ýãf¿?ÑíiÏÖá£mß/Â?ˆœhp¨‹x6qY •D‘MÌR]UOêèrÀ’q.r§,/ʹL)ðÃ’¯û°^ÙÚœ‚1_ÌIÛà»]Þ&ݵ®±¹OlÀV]ÃêÀeÜîM»UkñxƱÜgÓɬÂêÿ”&|>,iƒÏìN6rb“¢ú´ecÞa;<3Ãj·=žy5&3¯z˜Ê çm&zV “& ®ät20 ý@ÞÈcm»’65Ü>yûg

*er°•ÈôìBãrœÀ±Í …Y8ßms¡ §]kc*’L(=«~HÆtÊ·º+ Ò„¾†0GºÁÐŽµ¹ -å¶ÞÖnÃ\ܹ&–.¬%Rú í¹öh¬W‘Uq=~hö:ËyN–äUeÛs8GYý œ*ƒá7̰¬Õ}Ü ÊÒ}yÕÖþ$kN„ó‰Ete™]q¨:57k¯$ìCËÐQzùX$ë÷¤IðE.Ó\N*,ºœ„Qjg§ak/¦‰:ε\1W¨aŸ*·|\º‡ç¡íÐ’“ uùtmÉ.%8€æéÁtm`§ì2¿A6ʹkW¸jeà2´·EÂŒ]ô²$yÍ,Ok„×äDD¹Ä1Y)ãì1û¿á`4>Óåò¡tæy¦…ÃÊIÑu9Ö\…Ø’ct ÎØT¬$Ë2ÇZ"YÍ*é²3Ù ºlLî.ª@ÇE³,™ÿ¢‚ÖyÕ"00ó£2*Ðìc»ímÁÌÒ•Ì50ÛÑPXÕ8ÙHdE-÷ä… é¬CÖcézÎT,ôëÝiCsÝœ”—眃+ƒ‹dÂÐPÏvajš>hã ž»F0M'Ÿ«'êõ”OÖã¾±?~Ö´µF5}uÕOv¥[“¤õª‘57EÊèÇ¥×Zf³Nuâºn÷ƒ?g5çùr'4³ê™²—!ZÛÿfFjûìØœ{"3’­ÈšSJkUÿh›R33rÖ/“’dÓ/…:³äT2P—ûT-e1~PKü¦Z’^‹ùT-Úù©Jú¾R׬dÇÚONJ^¼­>¨ÅÏîåC[Ìmÿ晕³ŒÅØGmº MGNÞŽ³Üg¦°ÍiލÖÉs¸l>©Áä0Ã~Ä8²½áä/Qoxgü®š56¯¡=­Áž®´Ñ„lçîB(ÎÌ„rÒIÏZ›U1¦nÙ¢ Î|³›‰ß#¶”L3df6cÓ‡Ÿ ¢±X"Ã×^'\amÐl†§cŒe·™¹ÚëÔ{aü4 —E,kÝV²Þû«ãÄœ™‚pn -ÑþËp9ì¢w„î6\þòõYé!àúƒ›?6™ëM2+‡Õ4æd2{‘Qc4S'~}D«»ÅòÕ~` UTÔ+d(Ü㦧ýúE´>ØHur°ä8bÅ ÿ7 Ï‡Ï Ó -Œ?j¡>X¾¤èVô!Û9µ”®ìK/i™0ð´hQÉ×ÑÌ¡4,*9š-iZ¡zŒ']½øpØXÞ5Ó»6Ë­Ñ2) ³kóq\£lmäX9 ZÞÐctw3Ðÿ"Wí†6ˆœ jdw~ Îq®ˆ'›nÆ’n}¤WÒ(ì²üJ¾Ai¶ÈK·»J‰ÄrÃ0©ÇjŠ1"‚îh¬A¿+ôi(9î´‡„îö;kÓJéÉ6ŒfeTù€ÎÄÍà '¨µ‘³l€þ¿LѪPjÿOë–´QS3v¸ˆ‘¶³¥²«'ÙÉÑÄUí7¨+笓˜~+A)“Ó}ñ@Š‚Ð¤Aßi*#›LÆuF?Ù¬dæç@û6޳¤Hkðça»1³àm3™aµ¯ugKé“<›õíç‘7R“ ¨³ä2uÖ¬CË"WÔu'eWkî‘8Ým béÜKË”í¾NóÅðL1­{ê\Ø=uÖqµ„VøWڠǹ’…9àERmƒ$ËéBA3ì*ø(œùîƒû×±íhõf÷ˆ÷…R‰Q¾×Ú{í»rî]ÿvº] ·¤ËìäÙK\æã'ÂÁ^ñaû$1šÖå\–;Q¼¬ xfœy˼î2[‰èSx'±¿;'ÆÇ\dÛˆÝ#£ÐÑ$õzx^Lì Z9ÝŽÅë™pxûu®«bã–ô'grÞ=ù.?ɼ=¦„»Ðn²7(Ž“…ò¤ŒKži.#l]§ÞºÛ×ÞL“9ª-llKV›òÕùýC²’_-ïÔ^nï1±ßÉ=&öÆá^0³ëæüùFsËÀʽ<ŸM3ÍÇk9ÕMtoöš©Ö$Ý’ïX8^|™:[|Oìl_ÓvÈÇé§×§ùå{Ïw*¤¼m%Ë!OŸŽá¦Ú˜nxÕ7°ž­‹çþtKxŽî'½¼/˜:Ý} &ÒÛ—¹´6݉_yZÑz½Ú_í`¶YlÑžY&R•Gí­—½öÓQ#Õõl‡FÁ‡i²Xö½Ãø‰èQ‹ßðJÑ«ÇD²_ßîc'шÜ{ˆµe92nòÉQ½À;{¬Ùb=s4¾"`“·5ùšg{ít¤JÖ—=‰ùC»Zª+—zt·Eo"]Ø÷\gwUqLÖ¥p/yârzðÜ¿jÜïq5Ï#6ï{É„âÒŽ–ä^º–Îû§xªB:j^5Š ûè9ÉDªû¾œ;x7‚^$øð„­`‘ /SÛ,ø;Ïíë¿ö¯³Ç´xz7ûBãn¹AÝ&gw¹ÌÁkLoç:¶m¼>áJš&í¥D½R(udàÑë]@!MÀw¢;•yFPg´ñ ÝIoõd%óÌ4#ÇïÙju{+%Õ.Ï÷3Ïñd¥UŸ$K[õ“d…ãÉê'åÇ[©Ó¸ËÞ¼LMQ¬u éSÇjLé†G‡Æ‚Ý2Ír¶ð$ÍVÁ¸'zMWZÞðfŸÙàUJ¸9Ê%F£Ö¥°wr}€+¤ˆí‘Dog7˜¨O³ tNÜwNta¡© o4›ús™.›bŽÄ=òWžiÓvâRmˆV&›ÉÊÑd:Ê™•´ÁÝXø›‘ÞU{·“³pš^¨ZÎïÒ-éâ.[cöw2Úh´Ëh¥XÔ‡ Œb>ù|Ä"¶í‡^r°Sٛ\¥{Ÿ.¨R~ï'ÏžR'¹tóHaØãZ#—nôn‘x.Xƒ|ª+Å®­¶¥I1v—:¬xb3cØð’Qhg™|Ç«‘®Î÷ÂðLsïz0?ÚÙruòkw’nÖT5Ng -ŒÍt{Ü–€Z†îK\ÀS8´fÕö|=²“/€^'ÁØÑÝ‘Ñéë¡c<ùê-îä'Ï^²ür”‰´cþm ¹}(%+'ƒ×ÄU¥PÍe•ó› ï~É>˜àfw§\Î'íÝ5ŸªÙzçÝgt€¤[¥„Ùw¿]$ä1¶¼èwìåΫ‡„üm òEk'œ<¾-÷7¼6n|NTdßYºø^a,cÇ—i&·Ÿ<à"—{¸[8 BsûÙRbm櫾úð½ãà4¶Ú;„‰æÙÝJ=F x~M6öÍV0“xüš,ï&úévû¼SsC‘Jæøø0”ÛÏŠü -syÝéÓâ•“„7Õ=b°V÷Öþ”•ƒöޏªEäÒáÉ[{ºLò>÷V– l=¥Ù|º˜€_q‚âlŒÑj{ì®?}`¾‹oxuhI|) Ši¬ˆR¹ÈÃ×Ö6;Hûm*¹ÊÉb(sÁ=ß ³PdŸÐd(/2fW)(tjµC{þœM$ÌÁÇÍQ,£)áp d.¤$ -L“NЩÀ»(6fõ‚MÌ‚†¼¨S|Ô!-–ÀÄ:QøŠÓ8°@I Ãà(û¯Ñse„§Ù˾m.ÖâÅW.íÚ 1³ Þ™… uXVÛ8 „“1œ•õˆM™=ç­1lxk_„r+—„™³¢ZÇ"Æh…‹æ¬,T™ÅY:—¥ÀŠÑ™âÎ1À³æ …Ïuf§nxMÆf¦iÂdÏÙÄs4i«.~éT_kßÙ0Ʊªq k±0@"¹`«DÍ–LâA‘”Î%‡pÄf×µm +ñANVàh¶_DqjæÖüâ‚Pˆí›à/$… œá/ -~s¦²tnþÆë|OMö“Í×c"VgF²ruÜÏ%X¶³áÍ{óÏ&¢_²É&Ósï~îyRÙID™’;˜½º94XYhË&Nؤ‚Y-É^Ž`2(T|!,8hSÍX•(,Ç)i›ˆ~û¥Ú”½+æ’|gëõç„‚¨ lx•Á#gC»M!s|ð.Ø{I=kÉ‹~ù2YžzÙ`1âw~íæªwh(Kù¢î+ïɳtª2Œ.]õ€!(HaΙڄ 9Z¿¼HÊG™£ÑÎË¢’âác!y|}Näd}d—ÞN~|¦tѯ(¥Û~›ºCxµî°ZséÂР1Y¾|ÔŽ3Íóq9Ò.ݱ9ûž¦ò6ÏmÞ¯V†–ªB^»2da(LjØ7ɳ\æíú9Ý~“"ÑfÏûJäÛ–À$þ"Ë .dÉGº[î>ZMLÖû/iÒŽiˆg^CÚÁ9!‚ÚÙvº¼MGÚñØž¾VN89t‘AûpÎR„ ³¯AéÁO:å=`<(Rœ×‘Ó6eJ…/NñÜÚ¥Ã.Ñ,,ùß)ýÛªv´ã4™P#˜{yŽ«™ü­Ü$êx–c¸¼p2Ûì¹;ð0£¤PËݾœgš—Á<¡Ó¹ hdéDMx€J ×Ó¾¯³l_ɹ§ÇO.ÛŸ¾p^µ§è«¿¿»¹Wäzñ(u^J¹ÜöNuzëMžŸ–¯r™@Ãø`!ûÀÇÈi­ÄkCKGžµ9pw².éÖƒ{/Ï??˜õ&+>NuN‚D´/5­=»––§T‡‹¹­¦!€Ùkôº 0‘S€öeí ß‚¾tÏTR:µoÝaø¼&¼²Ûg| šÐRíÉQJ¸Ý¼<Œ=ÛkÍTó­øÃÐK§pJÔìÀ¾ï¤Ä¸áØ:ÉtEÞCT„;ÕjbUܧ¹Àmi’<¾e¶NcǧL£§îÚÏ,ÈÈü„ÊŸu^-úK‰ðà¥%ÚvªyzA nðtð–iªGÝLm§íU‹/£ý\²ÛßDsè ¾Õ‡£¼½Ótä!s|¼¡¢w^å²lÓŸÛK^l zí'”¿‘b¹d<%y‡b¦PízçèO· °y¼ZÎ6Ó„Z:7Ðþî´t›K0“g²æýZν³Ëöê¨Ù9ü Ù†Š­Y~Ǡʥ\‘ŸŒ³«„×yú¦!šózIµõpêÉeJ'åœw(âr­½&øÔ`íE] "¿, Ïð’rÙ“N’ÿû¡p`a/PÈ—cñ)”åç÷˜§“ü©Ë¬\{BÂ΋ïÞá -º]ÚK¹˜âÍÊÂ&Øí£¨ÌÇÉAëlÇ®9­Ú©ˆö†Æ·ñMãû=žÀZq™j9ÿ÷æ‚/©­ð¤˜{$«ŸØBQÏ(AN–'™ðYk߆µqiwÛ ìJD ¼D•Htñ°1ª©õ+ýN:º´ÏÔn‚8àrÑÝMKŸÃ1;Û6š9ÿq^µ/2âêùƒ>t“åÚ°IµENÚ|Mõ6•7›¤”8¾»Òâ/ØË5¿_•£çg¥dyzÉÍ3q”)ôÚc¶R=2®”{9ñªË%€³½ý ±“Fѳx¹ ™BQ‘z¶68 }P®â»~ÌV_ -›©^ÐgcÐŽÙ¤ƒÓ²ÒmÛ¹ýLc¶}77S`(Íg²ˆ‡;ïDä.œÉçÛhû&盵”0MM‡hÚ6‹ôü -¡ ál7õöVJd -óIæÈïÏÁ1hž%»ÕŠFÙ‰¯à6z>ši|^x-.’`u1väiÞí&Ïwž ‡¬÷X;9>šN˜Â}~f?ès!J½²wúT›æ^ž¸ào¦ßÙQ)¦¥läö9…ƒ—éÜæpãÏ4}C49žÄrÏÝpÄÑKûi÷•¬ÆxGÞ{ -–á<(8».| Ï@¨&…ííÊ^G’J~<·"Ъ7‰qàf3s|ôøžÑöŸ6­C™ÿE ,º9$äã!"íÕÎ|ëÖ†º*Q®sÏ“ÇP.±­Uœ‡qnJa Å DXs"ÔRH»ùüRyÈÖ*ÉëÌ«èkÏP/“p4ËäÒ”NéK’ŵØðâdºu¿ÿžK–ý“ñtà4 JÒ;«^dêéj'³ÓŽÔå}>«eïš…¬ižÄ"e²ãË9àMÕ¤ -o‚-$d !Vº“+/‡‘\fšÄcÉs"ql‡2¹~ò„ðÏJ Õ‰î‡te¦ÅWBàÊÓJÃrÜ ÔPoô|3%rBÇ{™WµÔ¿W<:”uØ]&/Å)þèØUf€qj{¿˜Ý}L}_âz–qExïC›@,þ¾s”©Ýhd·Åó·Ï䑿öYysqt;aŒðPÎ#Έès@Hôñ{ -‡dXG¹sÿði_º,5"d§^îæ¼¬ŸèÍç»™#w“±Ï€²ÒÕ{3‰,!ç-Ê{3m›… Žå|w¯ýLsðDÓÑBûµNêS -X‡+ùixø”<¾ (Öêƒ Àv¶>Ý|RÎùŠÊïEsÏ»W{3s1Û©d3lÛÙÎKúµ•Û†SoÅ1d³¡”OÞÇðî8Ë<¶o=öÓj‹ìU¯N¬ù;Ôès"ÿžä¶óÞÜaÏT‹ˆ‚t½Î=¢½çîd+[¯í6À‹àš;Ðßö6}°ðÏ ¯í;,Ýr"úš&+iù™h ¢aGBÕä ©å¬ÁÑVx2šˆ>^¦ä~¡Âf_9¢ï—»‰ˆÑ¡¥Ùí}2a‡(šÍùòÅ¡åŽvûÔ+I:j¿J•Ðí—u‡R‘V¿QÝR_¯Gd¬‡g#ŦÛîûm²_‚;õ÷ ³ê#{Ýé–è½M"î_Öò`9õ²üÿ‹›¾šNÇÆ Þð5ïP‰ÞrûS:±Òç|±Êš®‡Ôƒo¥ç¡£ÈRÇC,õ=~‡ØÀj·C+Åa`åcsµû˜• B8ægX®þ¡L»“6SÒéŒûòÿ¾ÐíN1Š@мdðÓžÓ‹|~Áϲ”É=çÈ*]k5È3´"ŽÀ(m%â[Ëe€ -Õˆ”=iÓ -kTþJ‹ØUi®IKséþã®±ýgKë»Æ4`½ÚwÙAñ®ê^[®¿F‚Ï0†ÏO°qgc ¦®!AC× ï"¸_°kÚÜk•,cÛÑÑ®‹tfV퓹»&h¢®¹Ú¸ìUW·ú$­ib Hb9žÖ[0¼B?ƒÑ#V3´·>nдºo]Ó~§?ø³^¦õQ{¸:0ÅX7² ±ëøS«Ft¦ý†=2iI€œÑSeÔîAW×¶ ‹E.êFy#]!Ùëâ_ê£hM£4M}— z¤õ?£NÑ Y"lT<ôõ©§Á%–ôn»¥ôn¦5'®‚‰‘¸Ø†‰YŠ®éêæ0nk+"`ĤEiŒÚc/‚¡}\®;ùL6“žv­½ú*à•h #uæ - ô}Ü}Y@Rì‰Û×Õê<$k#¶ùóQ÷&5ÓjR¦qºn„1› öú—ÙˆK6ÂZy’¥ÀmËjƒ÷JàÁ]å˷Ç lëQO=ú-;øó¼g†Š«ÛͶ›#¬E‚‹ã–€àšÅµu¶²>Ôª“bõ/͈›^ÝåÌFšíós® Vdr0€[žyÐL·¤äz\?µœsÄé[fhç#«&©wƒ dÖ¤£f^’bí¼Ø«ð0oÙn[½Ågè3.b™¶­"~H‘*ÄŽœ¶ëÂÕÊ g,É öñȕrƒ•ÿÓ®+ÐWæO˜•¬V3~™£žùge£m”®ÚZ« q.Ò*š1YO —?µ27Ä £­Ì]ü´jŽD@™¤òAšs¢€^Õ‰ViM{µ~µm¤°ú8 ™ÄÇ«_Y•ŸÂä „”Ìd«FO1ªm•F]~ò–Š%iS7ÔEXYµEr:M¶0V+©‹FMzïŽ'ẕԈ(-ô;.¸gÝLʳ‚`…Jé®}(+ûÜnwvª–ŽRÏîÛxœÏDÎÕh®êÅR忉§ÈGOÝîÑ5ãö ‡‰½³ÄDmçNþVÎn§-´Öüý÷ßnwà%ãvïloºÝþ£Í ¯"³g[ÿ‘^Ü\bt^`É­ •’•÷±7—MípÖþÇlmkïO‘3ÇSþ A†ÀäÁÔI€LzÜ-.SàO¸ÌÖýórÅ^üý·o¸5JÌ™Ízñ ±^ø—ﲩ/ÞN玾´}ÝÐx6ÎÁg|Ij“×GdšÛÇOäu§m”Ý܃Õ9{&_ -ÖheÄ–Ôyù@áNÃl>u{w‘¼høRÙˆG€ñøÃ¯ïOÁL¼Ëú7;ùÔƒô’êì5vï·í” •¬VÏžA»¶é7|ðyæös…3I:®Cçá^0{RdÁ Ff‹¹S‰ßšÖÿþ;Ò9:vã“‘löôØ›×ÆdÃ+÷âa8ꔳwÍ\ -”"ÇÍ  ÷îÙ˙ќD ãólÙ&o=M²’oÁTH=¿‡ðÍmpHtùTWôÖ¡“ê#lÍó#Òsq,OÝ­`*Ë5óIv‚(ΚqøðÀgR''ñÙ%¥kù7âðßnO€ ¹=‘zϽÙ8|s»3×ÁÙQÚí>8šÀ87õµ -ì»O‚wÉ'ÜçµdÛ].œîKææÒ}5}Ûtß v³î»çX‹ôòps)»ŸÎ»î—Џë®]]”ݛᖻوÝ­Auâîø˜CwoïöÝ=8 çÝïõëw÷d—;ÜtªÓMÏ0u²éKy|›þÖÍåf0}Àl†ÆÞ—Mæ¤ÝäÙ“Þ†wS|Û;ÚTN·ý›Ñ½þÃf|»º¿™ݾo¦[åÍÜÓ±°Yx,t7‹‡g›gaó¢{Þß¼œ\U6oÒÎC²»¹ù\v?oÖz¤çf´Àm¶/I=ÏðqsXR -¤—Éö¥äÙ,¶<>á å ´kמPY:ô°ü­â}|УôªcÏþK´éI\¼Ýy2§GgžÃ2“ó¯;1Oéá\ðTÞb!Ï­'°íyT‡›žj©:òh¯åžç;~Ûðzúé–gìK¾nmž4·¶wÓ¯[Á§|k‹‰¿m‰îËÞ–úðü¾?º·Òv{ëO†¶N‚×âÖÅî8¶uÞËo=D®J[Õ=ÏýVó丵ÕyO·†“|ØëŽNc^¯ïæ´è N·¼ìiµï•&É wÿÔ÷¦˜fÙ›o·¼'DZ€·,‡ÞÛÍÉ÷©Ûy÷6ÞÚ’÷íù¥ä6ë=Ÿ»Q|ÛÆ¹/ìë }‚¼õí•Ø{_¢ôox}yéêØwrÓéû*¾Ý˜ïî<_óU™¶à{ÕÄ{_?söMCëmßø:´Ò"7ÛÂÕcx;z}ØN„íÂY¹±]zˆl_·ýÃí§iëd»)Ý·{ÅÂóö¤“8 ôo;sûÃMõÆ/©Òž?ö¦LüÙ\ôÆB¨¢¿Ò/ûüÕº¿q4,ú»)FòORÇ›í”VDÒÁR@.ョq8ÏŒ¥p§¸9J_^îã@;^!½Þ»Š¸ãͼw¾{ÏŽô˜yß98:;‡ü–¶sîTwnÚÓN­[}Øé´ïw&ƒçû` ðúä”Ás0z¸Y f^˜fðt7Ó ^ŸÜŒ‚Õͱ7øv¢„ƒ“Í yûëö¤v¹\átw?4¸ßÍŽsíݳúس{ûXâwë/|v·Wë\‡6û•N(äCò^(Jž¾_‡Ž»ÍAèJ|àC/×'¡Nø¢š¾Þ1á`êþ$,ùjÝp¢5$½„¯ü×á«âþV¸z|yîõ»‘Í#~?º¸¨E”†GŒ¤§‡O‘³½ ¹»áè6¸)ÜìlMívk,Œù­±ììLDõZÞóé´W¼ŒœÄzè•ßwwdig'u )ìË¡”KEÊRå¢ü,Õºþ®ô®ÞúäA’Õ@íòOÇ7òUœëÈÑ`G7€·œœ]+û‡‡Cå8”»xôTi'ÞTÏY‚S9í¸¤¦|WCõ<ÛÚW_´-²ß•ýݽöíùÞ^nÓMhÖA~ïVk ÷Ú•XfÃÝ:î¢B:Ÿ‹f2Ûãh%óXŒ6®¶£“*s½Ïø=â~"ýÖÞ/µê…ýªòØoÞ½ÄB·éX|§ˆV[õØóÕÖqlx$òñÝüñ(ËÔã§Ç;…øóÝ Yýø°=ô„BéÎAütôxp6,–ª¹ÝÌÁhXU‘³|$‘”ùíDÙïu'½Î0é~zì$ùê};™mܾ&¯_¯›É·íj+µ½ßyK©çÓ^êxÈŒRO©¼'5ÕƒÞtøt‡O'¹b<]žLŽÒÍZþ*³u3mdä³Óqæè,Î<^·’™áËI9ñÅÛÙ”²È^>¸“ÙöNï6·}ý6ÎE#-5wªu.sµ³É8ïÞ ÄòbHyʧ¤—ü£·~’F‡Œzœ>Ì”FÛV6~ØÛé¾v+ÇñB2x+\Þ×Ó…75?: -L¹Ó£¸æ •+­Ç£Ö•?öŸÝcwOWÇDuR ½lOŠ~et[Œ=s© o±¼Ü)¶®îßN¬ûê$ÞN¥O*—mîä-uŸå×ÖiRÊÞŸ^‹žÓÓÞþCæ,|’‹žežîì~sº{öžíl—¸VÕS*+Jå`¿RÚóŸU^'ÍÚåNýÊs™º?Þ»¼+'Î/G•hçJ|бW'­øÉUÓ—}»¤Ê†÷:ùÚ¼¼¾S¼›×£f<{#>¾ÝœýÑ›×ÎIý6ø²%ßf/k·÷œrç®¶›w{­âÁ]ewop×ËŠ÷ls¼sÌ¿>Ý7žjñ‡@¬î~H{ÛwµaüÑýömx£§{µÇËórñqPéÊOBUò<¹ïšOmyçò9|y™}.øYù¹~Ó -¾„Âô%Ýg;/O÷“zu«P{¨$®®«w‰R¹:-”ÎkÑ‹R©vÕ¸*ÕF;µ‹ºr:¹ÚðÖËcö¾>8.TÒîë[ã¼ÎŒ½«û€&1¢VŠÝ¥´n:zÑäßëͳë›i³ÓLð¯<Ç^Ïʾç×Îxànñçýh«é]µºÑ¨-<¢íó˽ûvÿ´H¤Ï7©T/¼•‚½·ák!ÖQ}ÝFç*“”;ã·aµ»Ÿ=Wº·SVëmÞôâ½Ä~¹×{ârGým¿ºÝÏn³ýz„‰ våðdptÈ_ZµøþcÎ<ÃRùùe8º6¼ïÊK\|¿.T7Gn>¬áÇ«Ñ󎜼MÕqð>§¯Z§ïÑyu9ºáMÔçl¿aÔƒâð’eŸSÚk»gàÆ· Tëíoê¾Á¸ø"®j&<Ù ´&<üâ„ýó=ÞüpnþÂQþ 2Iešj¾s蹈U3Mæ6n~傱 ©åð‡1w(²}A¤Ç`¼³O$í;Õ½Ûj“O/M" O÷ÊîÝ“›Œ;ÄœpL$vëÇîEw:p.Œ¹ñ \¦#œ½Äù”Â+DcìÝa¢ Œ¦´¾2‡ÏZzÃ;"$²–Üž%ŽÕq\9Ü¿çwÂUvôpÇdîr·•\,«³;I¹¯÷ÂoÓ¡ Ò_QZ6]:!¢¡ª[àò8[¨8¢ã -éd·ÀD„2†5²±’›\qO"7|,ö|f5;zdÆû¤meŒçÝ>œ8®K¦ŽŒ•¼ ¼GßÈc¾Kjßfœ>ŒOÎwš—ŸÄ½ÂSxa§O[§„³Ïtku*µóÞÅî»ý£1ë-î´Ä>›ÜÞŽÕ)áìf·ãíݓВNÅ–¿º}›]Ü©xîs¯‹gJôB=—ÃnqÑ\™\ê8±¤SɳÕbK:½}brÍÓ²Õ)&2»Í»÷}ìÑsea§ùC®²¼Ü]¼ò‚\¬ekzM0ùa/B·ùUõßò÷]6@:s¨TdRz§¥íí™NE±÷<´:µ0™vûžÎÎj¤FG\+ùz‡o´ÅG&ÑÂ5ê ›¼&åF©¨‰Á‡çÙ™½§iÓÐèÃ>×-¤xØhÜÔ¨/¼ -´'óüõ(%€f ¿æõÛ}|Í Óqó…Ôh;‹?—P£(AÜ8Ö΢|ôµ<¿Æ6z³‰žNnD×(ÔüÙÇw3Œpc]NÛ“óLJXÛè]döAlôæóêõ 5 -ÎA–±>¶¸»Óß}|£]1Ükíàý= à:6{7lÖ?^p÷‡§u|£g•ÆðåêùÛèóÅ´ƒ…û‹u¬_ƒÜ¸Ihô©È=¯¾SøFÏ¿~.JEÑÔ(h5;ì¤fD/Ã7 ?¡ÑAküý9Á6Z\ñ?w¤§Ÿ\û5¼ÑžZ4?P½õ]¯Áì&jJ¿¾&ÓÓ|‘ÞÊOWÓ¢E*ó³Ï@÷\RŠ—òñiQˆ_¿’Ÿ~Ž^"*Ǭυ݇wâÓnbv(Ÿ¾]üÙÓžš8–^ÞßÚ„_Û»íýÞJzú'²(™~ÛKüUŒÓ?| láXïíäf†{.i¹zbº$>½¿eüä§OõòÂ1Ìó×ðK!D|úµ¾ümŸNï„ê•öÔ±Ÿi³òBú5èÒÕ^ŽøôDÈVúdŽ…ßgo7]Ò¯wý»§8ñiãøìmB|z"x2ÇŽýB(V&<͵¹ÆA\s9ºgzš¸½ZÊOké}³T¶o_[ñcíyv•M^O`5ny¬Éúç5ü ŸþÊÇÑæ0'©žê|u.½2è1a‚'Ìš?uR€æ×-ü“†Ÿ5ýÉúu þ¹Gç7õô&é¹½ÑuUÑ|Ë€9¸LÉúœs öX%(FÀO~lÀ“ŽN"2gÅYœcû Z» ½?ûj{ÁÌ߃·ÐNÆróšNÔí2à kÍ¢“¡Ñ|žsñfÄFÁ&òÅ›ì1ýXÑI‡Ø(ÜòÞIŽõfoÀY×lñ¼z£kt¼»ÔEÖ¿Ú¨hb/´þÕ‘¶¾ ÆèôªoÖÀàØ(²þ ‚ó °þ_´FÁX c}&6 -¼Ê’…Ö?±Q_ÚÿŸø±îûÓ´F»b£È¦Ð…²ohÚ·†Y””æÑ+y"bµ‡ñË÷^6?3½ì¾™.^ý Ûïå>åu'k‹*óÓ±¬--¢ûýܹÖ9h*ÍÍRV.»7G&‰Ïü –“ÚŸÊot|+Ö¡N’Îû•ߨþ¯J1ŠHTJíÐêE¥Ôz¬Å5jÀ–EM5ÉÍWaùOòl.7€L`¥Õ¶ýƒ;ø•¾dò>µWÍ|NêaõϵÞb–}fê—ë°•–~¸¯'‡²O t¹w >Ø…í&®pG²Ûeu¬Á宑ªÇ t˜;É…Ãè\÷ÆS®SÓRÇÔ)}—†›XºgI!rÈéüh&w b9Жϛê©Óá¹óÒa3¾ˆŸ8>_X!úCœAeþnöóTÇ—×n„ÐxíQ˜Å>s´>¥“#³(Äøxõ«I$åcYî -³öRŽV–¶® ;²´²ZO çœÇò7òJöÌy¡úP:¡óÝGf–QõĬªç¥aT="Qõøì–n㩳Ô3Pí²»’êÁóî^–ª0˜ÐŸd#)ý‘yÇÏð¼¤üDµM’JäÃmp>4ý.†'ÞÝžÙ±ºuº+G°©'L£ÒïbºQM.Ó»òì[Ôh´r7w4 œ†kçú:Þªb¨_篱]й~0MÉ_~Š´Q$?¿KÆpä]úsž8PVŽn%#§žÏJ G -ñ]å‰[ånÔd•;ºÔ½rèo¨sä“=> ÿ<&tA -˲š1Ú8ÅM'à˜~Bá0¡š#Úº6ÀøT-h]Wj—týBcY·°=«´ÞV¤Aq“u/c±Â¬S¢øÎÖ)·ì¬0VÕ3-®|aâÆÄ`3j_ÖÌ㚸-ùÂNæ·yÒvn=ádÜ2êi ³ÎæÚÆKéÒúð„¸W^\Ëýa1é@—È2u¾0Û ‚S>Õ°°³ù 38 S ó׺üÑHI+Ù±›C¿€T23n(Nû¥Dxebú!ÆÉ õVgŽ —[ä˜Q£9ìׯÑóZXZ®ëÊÊ¥ulˆ¿€þ´q‡A’A‹Ý …jÿÓo£Çt6^*ׇ­Ieµ¿9;(KñXËL¶aȤ«ñžÄsgØe=|¨¶¥™;••º-Ûºð†aÛ¤°òb?M•ýˆgꈼ’­]±ÑL1Ù–îxb#öºŽHgäa‹úhC×õ£ƒ3¹”4&©¹=Âóê-­shƒW¸æ 85€%è§Ø0XõAÝìð…t*èRµ%¹çu˜¾-³*€Ž¦XÏûäñEXîccºÁV°÷g˜-yÍ×÷ÕA½ûm,ªúšo<¯Zšf0äÂa>„39XûŸ"ëú”#V4f±‹8ñ؃NI€YEÜÀ,UÄÑ/ÄPiš1 -ø ‹Qı§n{ïXµ6 Í—pbvÉš{CsÉš<$?'F žp(¶wÉ‚¡éIž}Çn’˜—pÆêÞPOI殜lŒÛ² ÷X  eªXf‹}®L{*Áïã Ó¼t?'0¸;ðä÷l±÷õ™TÁ_¹“gZÉ:½ið4üLé£Ù”ë€ìL”u2ƒ1 ¹|j6¥ðN²ÇPÂôþ°úÄÃ^!bZº³˜£ðÔd »“—òUŒ>4ûu~ªm~êþâÂý{jÞ÷Hò…)+¬ã¦çFöÂ9ŸÍœ³1fhã¤÷™¶:’- ¸cÚèìö!½-+E·ÕÁ`UDŸ¿G>cY D©Ó­äèOÚ™ÏÛ:æþ n·3FE™C€Éߊó¶J' ’¿s |øó_ØsÍ}Ëó1Ó1$õFމKt¼J DE=MjT섎ó}O=ïcˆ"„Î6Qc|0‚¬‹dÔhqÖPšêV" 5”|ê Û‹!Ãv‰ iÇ1>‚s9ãL¬Ô™Ÿå…a3k´Õ4fÑh«©9€Ç Ñ°’`ÌÑ«FëiM9½:±àÍÄì5š1‚‰¹×hªT¶îæ[Ðh`Öpͱì:Î5šÅw!Ññ®Ñ ï±WD‡ JV£j'ã ã¬Ã&t7§ õ¡C¼’M^ó-Á™Ç⇟y À*ûËŸÈ‚¬†-³ó‹5N˜%¼35 ˆÝù)Y_˜¨f]f?…ù¥ 'q7 -˜5SRIÃØÓa3í‰TÐñž¨ԦȻ=cÐѽŒ‰& bÛðUK{!_ZÆÝ|šòbßëé(p½ò|âëß³z³t¾ ânxïȾ§û`!1ïöýÓ·:ÝÅà¬9wiYw1HÇ‹}¯£¢î…îw1Dcß㨨§WÖݾ" ó´ð¼ö¡9NŒZŸn% êl–¼W’§´4 ¢-0\R¦DÏÊ$Cô­ß÷â«6ùù1¯Ò­ëF¶é¹ÖŽ1™»ÊLÂVH'"0—i&9§DOk€ŸwŠçŠ!ÎÔ%âŠ@¹=¶âeÞ˜jé”e[ª¥3LçJ†I¨öÇÄô,>£_ìd{ V©|Àm‚ˆn̤‹…]!RG!ˆ”‘: -¼±¸ l ~[A¤>-¶ƒH…t¶H…x1ïˆTHeˆTH‡íhÓ‘—ׇ„|iªã$£XJž}£ö=‹¡ -‡×cۆ¡|~jFÏ6 pØyÙ:νßÒÈ1úÙÝÁ¹ÒNÃý(Æ«ð pxÿãùl@3 õª@2 øôIÌUe¹ÞhÕÒ6Ç"ÖD/H*ÇäQdp Cbä›íÚ0–K†thôc‡v;/På¸-OkÅÜlÆÕ=¯Ã1oŠw³=hò «Æ%qíÉs€J\V.>[ßw£a=8Þ4š¥ÐÑKó¶rÙ8ʬ#@ó7o T6¼þÐX·ó·'µjú½V«fNa‚›_e; -»,{œŒX,ê ž’dŒÒ#wV¼*_ê——ì¶÷~q¦w>ëÍ}ÆÃûþ9 a—ôi`·q†Ø(×¼­Òvá‹¿g#R£¯”F[©’®Q3«œXé¼pf°[¶ÿÙU+š `( ìÆ§Mëñíývù`p‘ß<‘Àn4ÔÙa7¿½%6ºÛ|ŽINèõø®úäFç-"{C3qoHjôʈ°C³ -V5z%¯ó2ã÷öpß“¼ -†ofŸºL³±Ké{òÖÙÍc Ñså”Tin¾Í*ÍwÌrk´`3i,†Ñåî|;Ðû U³×„\ÇjÁÐ%]\ŒÒ)»äT»<éôºÍJr¸²#˜;U¼K´Jr޼puæI4$ºÒA^Ÿ]9j^ûz²)"G®î›]±ÖñÙ×`fº]Ó]jêDZËKkB.DDLwe-@G÷ôºAÓ¹óÃ8EÓáÎJ-Îí¡éï‡ñˆ¦ÃùÍòâM‡ÃÒ¹E>’Ñt8_<>ÓÞ šÎÀYf±÷yBÓáHÙÜâMçrGvˆ¦ÃÅiÔ½rkh:–NÞßš‡¥cÌíq€¦ÃùÚ• -ìÛCÓáfyz·Š¦Ã7úÜÑí épX:ÂmóÐtÖ.}É–’[4Î8õ…·¦ÃÍ&Ê#šÎLʶ¦°+4ɶÜ.šŽc^Ðt&Ræ˜ø–Ðt®8æMGÅXm M‡ÇVoM‡#ZÙ2š-1åÀoM‡SÆÓë6Ðt6‘‘-¡éì÷—m épÌЬñm¡éì\ÛAÓá°tÄz|Þ€)íh¨/æèê&r/k‘JsmFàÓÂFØ ÌÏÎIµlÜ׫³ti £<Û®WG¶.Øø´NDñIã’!b2m Æ%`(PϤN™ºÄª -ªËS®º9:å¨ì2­KøD -¢†¡ð‰Rv™ 2á.f<ò'+Ó‰H •~m -›Ó=sjµ,Z¡;Ïeît÷\1šänÊÜ«Ë2a•ËÜ‘\l@:¦ z~²VèÎÛ\µ¿,Uf¨^*¦2w¶EÈÏeîd†^èÎs™; ûfSèŽ-xô{º…{®ÄÃOŸDvœÅéÖR”~O5“Û5– í Æº>‰QX Î6÷Ðn}B<vnIXIu7Ûª`\’CÄ̲ßsT¨š}ƒ…×<›ZV§:[¸%@¢ãµZµDEBÜ ‡ÎrU{ @GÞX#†w @&¼ç -w -¾’TãÎ…b’+ÜÖ­vVᎆ|ô †ÊB“+Üm¥Rž-žˆ­RžW<‘Z)Ï»R*ÜqI,ø7îhõ^a;çîXo5‡è'ïÀÚ§…fæN¯ÌÀZ@ÌÞÌñ±:Rm:wÀZ3ò1çÕñ…gX8´³{®zÓrG¤³<çÇv³¥CÆÂš@L>»k&P¹<'øvˆI… -"iÃrÔf"üZJÝ7F ˆ)rðb>‰êv1“q6¾S”:/DS9Ê„P§ÛU©,GY¤’Ä9˜™o·çʾ#)ƒÖN¤ì´Î þŒáõp+¿É0Ä\–ØH5 ¶q­¥É·ŠÁó‹ÓŠtŽÊ="V’í±Áö®¦ èÛ–0®âÕTÎm˜·•£r6•ò2.1®:ùTÓ0PÏöWÐ%fÔ3 ã*{€àDt øöÓ"ÞÚ·õ)_«fNîëÁÉÉ/\?LÜÜÌ_yðªu‰Ð}ÍþSs,D*º´ñ ×®Îw,¿2€ðίõðp¾ð*x7¸Ô»ªŒuØÊµÇ#ƒð–›×2oÔÉ&'aÿòÁPá:öLá=c 4EâX¹Vð¡Gl4ÒyKê°Å´FU$—ÆàËœ kÔM[E -»ZAÑ„rŒE¿qúÂÁæšsÞÈŒýÓ³÷tÿ’Ðh>Ξ×_5¬7¤4Ú -åɶ®‚¸FQÝ·bÛ­47zM«#xzGn´Ñè5 ™] Ù|žT_É ÌMü cœ}Â÷ÄGüž_ɽÆËÇ åùº¡m“`̃¬ÙèTƒ5²·Ç¸yÖ(~bu£cL›LÍÅP4ÈPÅÌ>q’ao´ÌÀ&[ ’dM­"v ®dr§j,Ð&{`Ój[•YCצ2 «'©NO­"N¥2 hàÆI - ugºyÒ*Í&CSâ’m=™‚^Nǧz­!îÎq•EB—,YZfyafº£,-_˜Ö)²ŸØY—€¶$çiÉý±äÆšÔUã©7¯Öš)v‡áêkìKc[—7R~¶ÐHT÷2k”ç¥áå&Z “h¹2ÎØ ²vt¯õKÃ¥gÙx‹&Dz½„wW/fwj±ÞG9áýcƤLˆuÔtTaš[;#šf ã6ê-îHrŒ"Vöåë =3ûùí]v¨Ñ«’]X¦Å¥s{„Pû)rÐ'É,õ,<”e£#™a¬JŽî9ÐuÉ„·h¾c[kÜÐ%]ª¾­ÖI­C(à4ÄåÔßsEÚ•4¶™?-ò>nÙu˜ƒ©®1¶ÊŒbvUt"ft-…˜iWñÆ1[,û ‘K³­§ãˆcÝì˜.Œ³e޹D²b™ï!!Ę0€”ìt +ÐêOv‚dÅêo8tŽdÅ"¯µk a©PN˜æ»ŠlÛ)Ê'aFèŠ÷¢|¾0Æ*ÜzQ>k}äQ”\y›Eù˜êWz)ʧ÷*ÀN剒Yd &Wõó~7ÔÉ6î†b¬ëÇt7”çº~º¡mán(R]?gyJnëúÑ«ú¹º -S×îŸÄ×õÃ/>êÝP.êúÙ¯ämÔõ£g†¨ž+uýì\[rèR«úùÂŽºÄº~ô¡™|®ëú:b©ê碶®}@¸ U7uý°pDÚ­æìŒaFÊbï‚vQ×~ó—÷X׺ÑÕÐ.¶…º~t·°£¨(uýèG]l´‹º~8˜¤&zÞêñmó -ôóo£®= âc¦ãønF¤º­ë‡15uUýôÕ8uýLbÈ«úîìr OáÔº~¶¸×­Ôõ£WõSW²Çº~ô„k"ÕS]? ¿…[‹¦{®\×õ£3Y°[¨ëG‘µÕTÜR=¾8 -s=>›rrÌõø<ÕõS©`ÅÇ)šÃRׂ{°Í¶8­ëG·äáÛ¨ëGÚÃ﬑Dwø-s^‰$Ú‰¡]]?z¼Ù˜EྮŸ‘ÛæÓ¢Ûz|Î’4Èõø¶ >jU?ïõøX@Lv·7Xs5œ•â3#R½Õõ38¶-Uý$Ä÷º~*TŠVWÔs]?º™CXcŽëúÑ«úy¾µI®ëçÑ×ÇX×÷º…º~ôª~Žëñ¹Báš´¥µ®Ÿ{0¼®ªŸ®Ouý¬®d}U?Ò-gNëúÑÓ»L»˜ëº~ôD'“OÉu]?̼èªúÑï…c¯ëçÞoiä˜sÌá\é¡®Ÿ¦¸pUý\gšêúQW„®ˆ·º~tÃP:½z¯ëGÄÊ;²çº~ÆAš«úYì1曬ŒuýÈFdÃØÜdÅX×Ɇñ\×O?“Ö]KO|]?úæ@Eqn +íûÌöð@³Ñ.zøŒó½RŸÒЦ½|JvíÒïM°EÃjRÖ˜½©üêqð’oJn*jØ!Ós1\æb’Wùyn8‰vWû&¬>ý`[9ñ'ÏC\¦?-H_‚x*è¬ÒIsÑ™?óþø›—Ÿ'ÍÊ÷s骦~b‘ê¢Êµ?΃‹M5ïEðêõ(œ+îµwÏ.×¹Åtðè réì{ñ¬ÙOŸ¦—þ\·•}­^O{‡ã›³üýçíä<·¸‹Nþ„îcÙúWàöútZþÞïÏ'‡ÑÙbXX„—G³ü¹ÿþü0£­|øÏc§Û|³ó§IY–}„í¬ônoîüéÄË‘_øXÜ%öÅÈ׬žV¹æŸ÷®•ß½^._KÑåªxßY_òo«ÜÛ㥊´¼MdR÷i±[ -(°·¯Ìrõ4‡ÅæJA [mÕ!|éÞCwX:~¿ú…jµ$¬'¹yåÃñã£î ŽYˆ`¸ë]8/bÈO+B4FG‘Éeðîá¶š-3Í]!û± ~ýcˆ$=QÀ¡þMò7{óÕÎf“è?nÞÞ†¹ÐdŒÎû—s£Éþk0´Ëš4§ù[uCj LJJ>\ÛøÂõ‡æ¤ -hÖž[×ýüym8ʬ÷OŽ2«ñ^³œ^6îÄÀ¶Y¥õ}×:nçýo€ÎÝB!+•ÏŒò‰iB/G{]ÿêøgWòñéýý0Ѹë·á+0àËï4í&¥c}%7X¢“—YGa6Âp-iâL.Q^ñQä;)ÌÀÛB¡~Âéü‚·I¤a‚°‹=.Áµ´òÃf¦ÙΊ€l›KÔ“áM3Úîtødäó§ñ>]”¸L¥C…{æã5~¯öw”áÁƒƒ„îÁ(T;ð…•Gµ”öH¨>ô•µ½S}{©PçSaÌy ¨Œù”ou#õ³„öe_˜o½¤ßÕG)Öo™ƒŸedû(wÎA”ÑßÎwøVh¿½„UÚW é+o¿<´Ð¯R:lHˆT¢0Ýê*-}é=_ƒt®8˜¶äßÛè­Löýá‘—çjÐLdÎn¦"xz›DO…X¾¤!^c. ¿»œôëáæZ¦ýë««íAÐõæuoü… Ž=dU©|ÓåõÞ_ƒ;ÍLS¸®~§?âÇ—ïºõÓŽÿFS$j0§¦:vu>-’XÛÎDéÏs CÜzYÔ[qwï1'¿ªþªßåïÝý›{sQ»}nÖ¿ïÇ×·O_¸ñ–:º×4?Y[Êz·¬}O¾hw?77þäçWߟ¼{iø“g÷}_Ø;ˆúS™Ø‘7åK¸7·ýÉØá­?ö÷»âOÍ®žü‰÷t nG!•ì®äÊ‘ÔÑÁ ŠFÊ7žŽ£PcÅ9¾ùU¼p™Ñ"¥(ÅlTSŠª‹ÀÌÒ (ÁÛçÚ1$¸ÐOÞ‚?ƒyZÒ†‘#ÿ3šShø&.[xÞìw`Vg–¦ìol]ФC{\B8öŸJb¯þz •ÂÒ¢A‘ŠÊh~úDšèMس¨ð¼z›V¿³&Ÿ|)¨k¨ÌJá®]{A£¿UY«¶Ê1(ÛgÈë®(­s¾Õ‹%;9'†J?k´Ú òLIzSR³¿åŒ¬2eÚÐüxÈ^ój_ÄÞc´kÚé í/áoÍ|CMYœ—Ù8×›l—PL×khÚ]®pè®àg)T‡·¸‘¾¾û^<Õ™¹è3ÿ:ºRI\ZHdã­t¶}üÃóúry0ë-!T6{?¥Üx€ !Zˆšñ*Ù!áj¨®xßµ¨fÎ4|³ßâU‹r$ýƒÖ9jål–ù[é55Z­tå³»…òÙ`™ù{1KhJ-9ƒ‰ÇœÁ›/J~­´3”—æÐ¯ÜÄQ -Êeµ¿{çú#* ´y=€û™R`ûè>>²˜hJu¤a7­wR@_Ÿtcš±p1•RaÃkö(ªå ­úìÍÀxEGLãXß?Ï4$#pY<*ö_îÓ޾…®Ÿ€¨d[æºÖr1A‰ /z&W* ô,0UG¥ï € l[1a¨2þª0!›Ñ˜{35ך¢³à°È–’|Y›—a çA¤îÕ~½rÆùl¤2YZ«Ìt³¦ùd-œÀPù€ä…Ò èPIÙ c´®¿ù¢žÀoƒ1>Z/è¬„Ç XZíjB½æ&þ¸޵ª‹˜üÍæŸÀ\ˆ#¯óÑ0âq%êmu³i"mQI¼q^×Xä3êmq³ZcTÝDÒvè XéK!­­17³Á'?2 dß–8ñÚ‹+­ÀàKh»˜«aëÏJÌtJž+Ël´>²¶OïÃoY·°Çœ£:Ê8Z•’u¡F;Õô$ÐçÀ›ú sŒY6ڇׂM–• ¯hg×éÞ¾~G†®o{ÀÛG"ëƒ/Lï…žÄ/ϼ¨L}µ%ÿ*¤<Éç{ê Md¥ª-©;Ñ{¾Æ"â4mù~Ø9ÔSl_éß^õŽÑa¹ô„ê€ï VX‰È•8öo‰è-ª^ú/‰è<¿üSg"r%úÂÿØ™ˆ\‰3òO‰ÈQ8öo‰òJþÇÎDäJÔyHþ3QÎûÇÎDø «“ÊãLD ô…ÿ±3¹•ÜQ¨wŒª)"9žâÇETR*¦HÎå\ÖýiBb[µÿ²â2Ó@:ó7p¹‹ÜSM¯äÙêi˜A -åG‚²1ädjö¾-'Àÿ#í¤ÊÙ'ð‹;(³í4ŠÂB \å A9‡yAí ñ^¸6‡a0|pEEh¨¾ª®¸¸$¤à€ô¦~–”?롳ȩæQñèW—ãro§pjOy½Â©.`Èóã*—¸ê¨„:†ŸñJ0µ[ùÐj"aLˆ\/ ¶lu3 -m¨®`€ºÒô¡ó÷_‘/”vПÌõæ{²¼Xþýø;ÛIúö|™ãÏ÷fãys9™ÜNþw]Ÿ¿o~&³õNy's|Sëtйúä}>žì ¤¢ÜkAÕuI9„+{E’;­³jýO©5m¯Fõ?Ü bv6G~oÐÙ è?û“Ãñ£?)4oüÑö* ß$:2k€óìùx°>YV7ÄY÷Þ$`È(½Þ¶|áÆ}ur}”Y}ìgÚǧõ‡æÝÍQfÍÍÑ^,Ç Q|]ô¬^.…õ®?¶ž…Þñ;èº?T/füÉØÑ‘ì3¿ -œÃñÇþÔ±8ö'Ïúm|\B¯wQï¬Û²¨i{hs8T¦ùrŽvFŸä:g“()w y?b‡”€"vôžj£ò«¯ ¼ß«-mŸzï9z[ŽÂÝ­-¹a’w7+“øÓ+¯îpÚÆÍµGë’²þZÈлËMV€ö@ í}+.tîkYCµâÚgú–[µ¤.û¢o»ÕICõºå)! Ûóêkƒüãè-rs™Ë#öPÖZ—Md-Å´Nªh¡Á´Š"2лE`R]€©½¼È@Õ– ,Bàm‘K““¹|Õ½°?¸„O²'yÐÕŒ£W¥´ØÇê™Ñþnùcé5÷Ù/]4\Šþ´úWúl9%eNMî(ÎjE=)PÊLQ¹˜QŒ¯JÅVó(2¹­wÆ~Yš}^±ìn¥-Õ–6ÕØ÷0¨£¬:ô‘~y½] ˜” Ø·^F^öo}Žëvbà0­¤ éíE¨”:˜«·L^‘_³ˆ„<µÓkD1…2ÚÀÛ~Fþõô‘S^½h«íMˆv+ro¦cQ÷àÅ/]ÞûÏay,ÓŸûÊZz“[ß5ã±Ê^á.8k¾ž…Kj¢§†fÃ%þ(¡pšI4Rê’uÔ‡M ‘òî\Èí»¸ê6^O”rÙ}”o ôÌê÷<:;©oF—àÑÁa³ºמO‚íÊ"ôÓ5_y.›@cK3˜.©ÌQà$†dHù -Ћ@ÀÓ(Enö¹§|žÑì -9’ŽF’/16n²²ú+GŠú;J¡+ª¡r¦GòN:y! Aa_ - mùˆ…üy9z’mjõ|Sðœ|Ó°Jk¨OIÉn*éS9ÎýSõ“ý94c3­W™¥é·k4œ tË!Ãn -ÔS  ôŽZ¬›-fˆ##Ä~åHÉÄÝœ9mŒ k‹ -m剃›Æ˜¤Û?•rò¤(_íö-«wš Oƒ‹üæL!ñ6“ؼ].ôáÈáÄŽ<ü¨áÈ -öhIx( 9¸Ô“ÈÍ›fbçQ#q#Å‹”(½tF‘µ\sb?Õ /EQŠÌÍ’˜üéh—?›0¾œSW÷ØÀy°½3º8dg–Ù§ŒŽ*jRÍO{Ö‡¿{ç¤P`4a ¢à¢%H‹ƒ¥ç¦8CÌpi<ëyq™I7¼K,¨¯nT<¡¶Ê„Íã…ÊS„dÂ>*]E£2 F‡¦tÒòŠf -¢Â÷4Ç£]àGºÄÃ}H8‚4­”㸸¥D%n†¶_‹Ð†!‘Z /}ЋKjh™A¤¤²fPËg<ÌFT‹ð£5 9¦¬jÆ5Õφ^,È|ð™"äQ™ AvLˆ=ªñAëƒVHƒI?i ›k×oÞÔú3SJƒd…Hµ6n«WÇϦÉѾérh:×ý[Bšµ„5æQâ£z>¸\cúÝÇ z‰,kL/ñÄeª'a†^\VbÖŽfC# Kñ1q‚–’£—xCŒ»•AâY¦S:WÆ´Ùp™Y¤ßŒ­¬Tö: Ý„:"¯ W&Ôå0pŠËÔ0j/äÓ©?]ɄՋ‘@\üxàD\[•ô>¨;²µ¦Èy´UéV[ÆYV%=Ù+N_—ä> ãáäk’‘úJ¥ xzuàté„§W®A—ŽAÉ Çìté”}}¬®A—ŽA¸’¸]:áì;p ºt jW_1¹]:áX¸]:á¼8p ºt úœ¹]:UÙgs ºt ±8p Jè@ÇyþÊU>ÿ6ÏÙïüã<”¾`T\ÿ Ïz{zÑ¢9”í,äØyZvÀ…Žÿ_ë‚“ô“N)¶z‚ÙZý_Å·”c‡ç‡ÙXûó…Ãà“›Ézó ¿V'gÝÑ'K¿#ýãÀ?ø·PÚá…âŽË79øi÷ÍEßÝác;]Àaæx¹®ÿ}_ÿÏFËÿî”ÁGüN¦:ŸïD;7ÍûÆÿþΗëég·óÚÍM ©ß»û»úûö=1|?Ó?ëö:õòŽÔ‡!èÃü5Ï A/À#é{`äC·s þßÿ|qáãÒøŸÆE~!ýëÀ®Á -9N€Oó…R¾(¢œ àE‰ãóYÄ'ФÏ+oþ Þœ€_à£ÿìðÜÎÙÎã3·3†4wR|1Ûùñ øôæ[y“Ε -ù—‡ß(–Jð7 /B±ÀÃO²¹b|£”²ð-`E½Š`*Rùt±È‹9ô“b)ËeáG˜·ÜN)Í‹‚ˆ¾# -%À¾"˜Ñ"XÔ©\º˜+fÑoÄb0|" ìI=•(€qÒb>_€ïK à€x6Ï!/‚G¹t–/d‹èƒltU¢Æ—DØ`tQÈ ð£\‰+ -;Ù´PÈ‹E^ŒÊ¦¥ŸçÓ\>˜ÃDi°‚øŸÔx½çs¢iˆÙ,ì¥Â ø±¸ ?*å Ø-A(ä²Ç`Rq翾\4?*õžãÏ.äÁÔƒ -| ü0<Ì#šß¬(äÁWò`shMpppº÷yއÝÕ>Ò`ù;ù4Ï•Šyô'B"€b}p/ú ØP”>*Kù E„|äÁ(wôËZÈgáÄt!f}T,äu_ë°XV7XNy”8}^š, *|Nz¥Ò4åGg~$¨Æk¦{(I=_”^'HÏJòK]¿s;ÿñ ¥´À‹pÅ䀸è¼[•T8PèH!¦R@»_Ž>&·ËÑßo Ð?V£ÿ™ìŒf³ùz´žü‚';ËÉj=_NvVŸóÿÀOÀO”¯ƒ­á¢éû&”í, endstream endobj 5 0 obj <> endobj 23 0 obj <> endobj 40 0 obj <> endobj 57 0 obj <> endobj 74 0 obj <> endobj 83 0 obj [/View/Design] endobj 84 0 obj <>>> endobj 66 0 obj [/View/Design] endobj 67 0 obj <>>> endobj 49 0 obj [/View/Design] endobj 50 0 obj <>>> endobj 32 0 obj [/View/Design] endobj 33 0 obj <>>> endobj 15 0 obj [/View/Design] endobj 16 0 obj <>>> endobj 92 0 obj [91 0 R] endobj 107 0 obj <> endobj xref 0 108 0000000004 65535 f -0000000016 00000 n -0000000215 00000 n -0000043300 00000 n -0000000006 00000 f -0000120314 00000 n -0000000008 00000 f -0000043351 00000 n -0000000009 00000 f -0000000010 00000 f -0000000011 00000 f -0000000012 00000 f -0000000013 00000 f -0000000014 00000 f -0000000017 00000 f -0000121132 00000 n -0000121163 00000 n -0000000018 00000 f -0000000019 00000 f -0000000020 00000 f -0000000021 00000 f -0000000022 00000 f -0000000024 00000 f -0000120384 00000 n -0000000025 00000 f -0000000026 00000 f -0000000027 00000 f -0000000028 00000 f -0000000029 00000 f -0000000030 00000 f -0000000031 00000 f -0000000034 00000 f -0000121016 00000 n -0000121047 00000 n -0000000035 00000 f -0000000036 00000 f -0000000037 00000 f -0000000038 00000 f -0000000039 00000 f -0000000041 00000 f -0000120455 00000 n -0000000042 00000 f -0000000043 00000 f -0000000044 00000 f -0000000045 00000 f -0000000046 00000 f -0000000047 00000 f -0000000048 00000 f -0000000051 00000 f -0000120900 00000 n -0000120931 00000 n -0000000052 00000 f -0000000053 00000 f -0000000054 00000 f -0000000055 00000 f -0000000056 00000 f -0000000058 00000 f -0000120526 00000 n -0000000059 00000 f -0000000060 00000 f -0000000061 00000 f -0000000062 00000 f -0000000063 00000 f -0000000064 00000 f -0000000065 00000 f -0000000068 00000 f -0000120784 00000 n -0000120815 00000 n -0000000069 00000 f -0000000070 00000 f -0000000071 00000 f -0000000072 00000 f -0000000073 00000 f -0000000000 00000 f -0000120597 00000 n -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000120668 00000 n -0000120699 00000 n -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000044986 00000 n -0000121248 00000 n -0000043697 00000 n -0000047975 00000 n -0000045290 00000 n -0000045177 00000 n -0000044267 00000 n -0000044425 00000 n -0000044473 00000 n -0000045059 00000 n -0000045091 00000 n -0000045326 00000 n -0000048050 00000 n -0000048228 00000 n -0000049218 00000 n -0000056284 00000 n -0000121273 00000 n -trailer <<6D1515C949CA44859614AB62569A4127>]>> startxref 121441 %%EOF \ No newline at end of file diff --git a/src/card.png b/src/card.png deleted file mode 100644 index caecc4d..0000000 Binary files a/src/card.png and /dev/null differ diff --git a/src/contactsPane.js b/src/contactsPane.js index 452d093..4addb41 100644 --- a/src/contactsPane.js +++ b/src/contactsPane.js @@ -1,6 +1,6 @@ /* Contact AddressBook Pane ** -** This outline pane allows a user to interact with an contact, +** This outline pane allows a user to interact with a contact, to change its state according to an ontology, comment on it, etc. ** ** See also things like @@ -9,7 +9,6 @@ to change its state according to an ontology, comment on it, etc. ** http://www.iana.org/assignments/vcard-elements/vcard-elements.xhtml ** */ -/* global alert, confirm */ import { authn } from 'solid-logic' import { addPersonToGroup, saveNewContact, saveNewGroup, groupMembers, getDataModelIssues } from './contactLogic' @@ -18,10 +17,10 @@ import { mintNewAddressBook } from './mintNewAddressBook' import { renderIndividual } from './individual' import { toolsPane } from './toolsPane' import { groupMembership } from './groupMembershipControl' +import './styles/contactsPane.css' const ns = UI.ns const utils = UI.utils -const style = UI.style export default { icon: UI.icons.iconBase + 'noun_99101.svg', // changed from embedded icon 2016-05-01 @@ -50,7 +49,7 @@ export default { // stick functions here function complain (message) { - console.log('contactsPane: ' + message) + // console.log('contactsPane: ' + message) div.appendChild(UI.widgets.errorMessageBlock(dom, message, 'pink')) } function complainIfBad (ok, body) { @@ -65,7 +64,7 @@ export default { dom, { noun: 'address book', appPathSegment: 'contactorator.timbl.com' }, function (ws, newBase) { - thisPane.clone(thisAddressBook, newBase, { // @@ clone is not a thing - use mintNew + thisPane.mintNew(thisAddressBook, newBase, { me, div, dom @@ -240,7 +239,7 @@ export default { } } ) - deleteButton.style = 'height: 2em;' + deleteButton.classList.add('deleteButton') }) } @@ -254,20 +253,11 @@ export default { count++ lastRow = row } - row.setAttribute( - 'style', - matches - ? selectedPeople[row.subject.uri] - ? 'background-color: #cce;' - : '' - : 'display: none;' - ) + row.classList.toggle('selected', matches && !!selectedPeople[row.subject.uri]) + row.classList.toggle('hidden', !matches) } if (count === 1 && active) { const unique = lastRow.subject - // selectedPeople = { } - // selectedPeople[unique.uri] = true - // lastRow.setAttribute('style', 'background-color: #cce;') selectPerson(unique) } } @@ -278,7 +268,7 @@ export default { callbackFunction ) { function fetchGroupAndSelct (group, groupRow) { - groupRow.setAttribute('style', 'background-color: #ffe;') + groupRow.classList.add('group-loading') kb.fetcher.nowOrWhenFetched(group.doc(), undefined, function ( ok, message @@ -288,7 +278,8 @@ export default { badness.push(msg) return complainIfBad(ok, msg) } - groupRow.setAttribute('style', 'background-color: #cce;') + groupRow.classList.remove('group-loading') + groupRow.classList.add('selected') selectedGroups[group.uri] = true refreshGroupsSelected() refreshNames() // @@ every time?? @@ -339,10 +330,7 @@ export default { function renderPane (dom, subject, paneName) { const p = dataBrowserContext.session.paneRegistry.byName(paneName) const d = p.render(subject, dataBrowserContext) - d.setAttribute( - 'style', - 'border: 0.1em solid #444; border-radius: 0.5em' - ) + d.classList.add('renderPane') return d } @@ -452,7 +440,7 @@ export default { const personRow = dom.createElement('tr') const personLeft = personRow.appendChild(dom.createElement('td')) // const personRight = personRow.appendChild(dom.createElement('td')) - personLeft.setAttribute('style', dataCellStyle) + personLeft.classList.add('dataCell') personRow.subject = person const name = nameFor(person) personLeft.textContent = name @@ -471,10 +459,7 @@ export default { for (let i = 0; i < table.children.length; i++) { const row = table.children[i] if (row.subject) { - row.setAttribute( - 'style', - selectionArray[row.subject.uri] ? 'background-color: #cce;' : '' - ) + row.classList.toggle('selected', !!selectionArray[row.subject.uri]) } } } @@ -544,12 +529,11 @@ export default { const sharingButton = cardMain.appendChild( dom.createElement('button') ) - sharingButton.style.cssText = - 'padding: 1em; margin: 1em' + sharingButton.classList.add('sharingButton') const img = sharingButton.appendChild( dom.createElement('img') ) - img.style.cssText = 'width: 1.5em; height: 1.5em' + img.classList.add('sharingButtonIcon') img.setAttribute( 'src', UI.icons.iconBase + 'noun_123691.svg' @@ -573,7 +557,7 @@ export default { groupRow.subject = group UI.widgets.makeDraggable(groupRow, group) - groupRow.setAttribute('style', dataCellStyle) + groupRow.classList.add('dataCell') groupRow.textContent = name UI.widgets.makeDropTarget(groupRow, handleURIsDroppedOnGroup) @@ -685,10 +669,7 @@ export default { // ////////////////// Body of 3-column browser const bookTable = dom.createElement('table') - bookTable.setAttribute( - 'style', - 'border-collapse: collapse; margin-right: 0; max-height: 9in;' - ) + bookTable.classList.add('bookTable') div.appendChild(bookTable) /* bookTable.innerHTML = ` @@ -714,44 +695,36 @@ export default { const cardHeader = bookHeader.appendChild(dom.createElement('td')) const groupsMain = bookMain.appendChild(dom.createElement('td')) + groupsMain.classList.add('groupsMain') const groupsMainTable = groupsMain.appendChild(dom.createElement('table')) const peopleMain = bookMain.appendChild(dom.createElement('td')) const peopleMainTable = peopleMain.appendChild(dom.createElement('table')) const groupsFooter = bookFooter.appendChild(dom.createElement('td')) + groupsFooter.classList.add('groupsFooter') const peopleFooter = bookFooter.appendChild(dom.createElement('td')) const cardFooter = bookFooter.appendChild(dom.createElement('td')) cardHeader.appendChild(dom.createElement('div')) // searchDiv - // searchDiv.setAttribute('style', 'border: 0.1em solid #888; border-radius: 0.5em') + const searchInput = cardHeader.appendChild(dom.createElement('input')) searchInput.setAttribute('type', 'text') - searchInput.style = style.searchInputStyle || - 'border: 0.1em solid #444; border-radius: 0.5em; width: 100%; font-size: 100%; padding: 0.1em 0.6em' + searchInput.classList.add('searchInput') searchInput.addEventListener('input', function (_event) { refreshFilteredPeople(true) // Active: select person if just one left }) const cardMain = bookMain.appendChild(dom.createElement('td')) - cardMain.setAttribute('style', 'margin: 0;') // fill space available - const dataCellStyle = 'padding: 0.1em;' + cardMain.classList.add('cardMain') groupsHeader.textContent = 'groups' - groupsHeader.setAttribute( - 'style', - 'min-width: 10em; padding-bottom 0.2em;' - ) + groupsHeader.classList.add('groupsHeader') function setGroupListVisibility (visible) { - const vis = visible ? '' : 'display: none;' - groupsHeader.setAttribute( - 'style', - 'min-width: 10em; padding-bottom 0.2em;' + vis - ) - const hfstyle = 'padding: 0.1em;' - groupsMain.setAttribute('style', hfstyle + vis) - groupsFooter.setAttribute('style', hfstyle + vis) + groupsHeader.classList.toggle('hidden', !visible) + groupsMain.classList.toggle('hidden', !visible) + groupsFooter.classList.toggle('hidden', !visible) } setGroupListVisibility(true) @@ -761,26 +734,24 @@ export default { if (book) { const allGroups = groupsHeader.appendChild(dom.createElement('button')) allGroups.textContent = 'All' - const style = 'margin-left: 1em; font-size: 100%;' - allGroups.setAttribute('style', style) + allGroups.classList.add('allGroupsButton') allGroups.addEventListener('click', function (_event) { allGroups.state = allGroups.state ? 0 : 1 peopleMainTable.innerHTML = '' // clear in case refreshNames doesn't work for unknown reason if (allGroups.state) { - allGroups.setAttribute('style', style + 'background-color: #ff8;') + allGroups.classList.add('allGroupsButton--loading') selectAllGroups(selectedGroups, groupsMainTable, function ( ok, message ) { if (!ok) return complain(message) - allGroups.setAttribute( - 'style', - style + 'background-color: black; color: white' - ) + allGroups.classList.remove('allGroupsButton--loading') + allGroups.classList.add('allGroupsButton--active') refreshGroupsSelected() }) } else { - allGroups.setAttribute('style', style + 'background-color: #cfc;') // pale green hint groups loaded + allGroups.classList.remove('allGroupsButton--loading', 'allGroupsButton--active') + allGroups.classList.add('allGroupsButton--loaded') // pale green hint groups loaded selectedGroups = {} refreshGroupsSelected() } @@ -798,8 +769,8 @@ export default { } // if not book peopleHeader.textContent = 'name' - peopleHeader.setAttribute('style', 'min-width: 18em;') - peopleMain.setAttribute('style', 'overflow:scroll;') + peopleHeader.classList.add('peopleHeader') + peopleMain.classList.add('peopleMain') // New Contact button const newContactButton = dom.createElement('button') diff --git a/src/groupMembershipControl.js b/src/groupMembershipControl.js index 6ea6140..638039e 100644 --- a/src/groupMembershipControl.js +++ b/src/groupMembershipControl.js @@ -3,10 +3,7 @@ import * as UI from 'solid-ui' import { store } from 'solid-logic' const ns = UI.ns -// const buttons = UI.buttonsn no -// const widgets = UI.widgets const utils = UI.utils -// const style = UI.style const kb = store // Groups the person is a member of diff --git a/src/individual.js b/src/individual.js index e0f5730..b179b5c 100644 --- a/src/individual.js +++ b/src/individual.js @@ -6,10 +6,10 @@ import { renderGroupMemberships } from './groupMembershipControl' import textOfForms from './ontology/forms.ttl' import VCARD_ONTOLOGY_TEXT from './ontology/vcard.ttl' import * as $rdf from 'rdflib' +import './styles/individual.css' const ns = UI.ns const kb = store -const style = UI.style export function loadTurtleText (kb, thing, text) { const doc = thing.doc() @@ -32,7 +32,7 @@ export async function renderIndividual (dom, div, subject, dataBrowserContext) { function spacer () { div .appendChild(dom.createElement('div')) - .setAttribute('style', 'height: 1em') + .classList.add('spacer') } function complainIfBad (ok, body) { if (!ok) { @@ -67,7 +67,7 @@ export async function renderIndividual (dom, div, subject, dataBrowserContext) { complain('Error: Failed to load contact card: ' + err) } // end of try catch on load - div.style = style.paneDivStyle || 'padding: 0.5em 1.5em 1em 1.5em;' + div.classList.add('individualPane') authn.checkUser() // kick off async operation @@@ use async version diff --git a/src/instituteDetailsQuery.sparql b/src/instituteDetailsQuery.sparql deleted file mode 100644 index f9c57cb..0000000 --- a/src/instituteDetailsQuery.sparql +++ /dev/null @@ -1,36 +0,0 @@ -prefix vcard: -CONSTRUCT -{ wd:Q49108 vcard:fn ?itemLabel. -wd:Q49108 rdf:type ?klass. ?klass rdfs:label ?klassLabel; rdfs:comment ?klassDescription . -wd:Q49108 schema:logo ?logo; - schema:image ?image; - schema:logo ?sealImage; - schema:subOrganization ?subsidiary . - ?subsidiary rdfs:label ?subsidiaryLabel . - ?supersidiary schema:subOrganization wd:Q49108 . - ?supersidiary rdfs:label ?supersidiaryLabel . - wd:Q49108 schema:location ?location . - ?location schema:elevation ?elevation . - ?location wdt:P131 ?region . ?region rdfs:label ?regionLabel . - ?location wdt:P625 ?coordinates . - ?location schema:country ?country . ?country rdfs:label ?countryLabel . -} -WHERE -{ optional {wd:Q49108 rdfs:label ?itemLabel} . - optional {wd:Q49108 wdt:P154 ?logo .} - optional {wd:Q49108 wdt:P31 ?klass .} - optional {wd:Q49108 wdt:P158 ?sealImage .} - optional {wd:Q49108 wdt:P18 ?image .} - - optional { wd:Q49108 wdt:P355 ?subsidiary . } - optional { ?supersidiary wdt:P355 wd:Q49108. } - - optional { wd:Q49108 wdt:P276 ?location . - - optional { ?location schema:eleveation ?elevation } - optional { ?location wdt:P131 ?region } - optional { ?location wdt:P625 ?coordinates } - optional { ?location wdt:P17 ?country } - } - SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en,de,it". } -} diff --git a/src/mintNewAddressBook.js b/src/mintNewAddressBook.js index ed1a3d5..e884a70 100644 --- a/src/mintNewAddressBook.js +++ b/src/mintNewAddressBook.js @@ -96,7 +96,7 @@ export function mintNewAddressBook (dataBrowserContext, context) { // @@ delete or grey other stuff console.log(`New ${appInstanceNoun} created at ${newAppInstance}`) const p = div.appendChild(dom.createElement('p')) - p.setAttribute('style', 'font-size: 140%;') + p.classList.add('claimSuccess') p.innerHTML = 'Your [v, k])) +const mime = { + extension: (contentType) => mimeMap[contentType] || false, + lookup: (filename) => { + const ext = filename.split('.').pop().toLowerCase() + return extMap[ext] || false + } +} const ns = UI.ns const utils = UI.utils @@ -190,10 +214,7 @@ export function renderMugshotGallery (dom, subject) { function elementForImage (image) { const img = dom.createElement('img') - img.setAttribute( - 'style', - 'max-height: 10em; border-radius: 1em; margin: 0.7em;' - ) + img.classList.add('mugshotImage') UI.widgets.makeDropTarget( img, handleURIsDroppedOnMugshot, diff --git a/src/ontology/forms.ttl b/src/ontology/forms.ttl index f803e4d..0d4089c 100644 --- a/src/ontology/forms.ttl +++ b/src/ontology/forms.ttl @@ -1,10 +1,9 @@ -# This turtle file defined the forms usied in the contacts management +# This turtle file defined the forms used in the contacts management # -# Indivduals and orgs are in one file as they both -# share some forms (address etc) and also interact (roles) +# Indivduals and orgs are in one file as they both +# share some forms (address etc) and also interactions (roles) -# Now hand-edited, was originally made using form editor. -# Forms documentaion: https://solid.github.io/solid-ui/Documentation/forms-intro.html +# Forms documentaion: https://solidos.github.io/solid-ui/docs/forms-intro.html @prefix rdf: . @prefix dct: . @@ -19,20 +18,18 @@ # Ontology additions or interpretations needed for the form to work well -# The ontology file doesn't make them disjoint. This makes the selector be a choice. +# The ontology file doesn't make them disjoint. This makes the selector be a choice. vcard:TelephoneType owl:disjointUnionOf ( vcard:Cell vcard:Home vcard:Work) . vcard:Type owl:disjointUnionOf (vcard:Home vcard:Work) . # for email # Better field labels -vcard:Cell ui:label "mobile"@en . # app will imake nitial caps if nec +vcard:Cell ui:label "mobile"@en . # app will make initial caps if necessary vcard:hasAddress ui:label "address"@en . vcard:bday ui:label "born"@en. vcard:hasEmail ui:label "email"@en . vcard:hasTelephone ui:label "phone"@en . vcard:note ui:label "notes"@en . - - # Ontology data to drive a top classifier foaf:Agent owl:disjointUnionOf ( diff --git a/src/publicData.ts b/src/publicData.ts deleted file mode 100644 index 4651210..0000000 --- a/src/publicData.ts +++ /dev/null @@ -1,403 +0,0 @@ -/* Logic to access public data stores -* -* including filtering resut by natural language etc -*/ -import { Literal, NamedNode, parse } from 'rdflib' -import { store } from 'solid-logic' -import { ns } from 'solid-ui' -import instituteDetailsQuery from './instituteDetailsQuery.sparql' - -export const AUTOCOMPLETE_LIMIT = 3000 // How many to get from server - -const subjectRegexp = /\$\(subject\)/g - -interface Term { - type: string; - value: string -} - -interface Binding { - subject: Term; - name?: Term - location?: Term - coordinates?: Term -} - -type Bindings = Binding[] - -export type QueryParameters = -{ - label: string; - logo: string; - searchByNameQuery?: string; - searchByNameURI?: string; - insitituteDetailsQuery?: string; - endpoint?: string; - class: object -} - -// Schema.org seems to suggest NGOs are non-profit and Corporaions are for-profit -// but doesn't have explicit classes -export const wikidataClasses = { - Corporation: 'http://www.wikidata.org/entity/Q6881511', // Enterprise is for-profit - EducationalOrganization: 'http://www.wikidata.org/entity/Q178706', // insitution - GovernmentOrganization: 'http://www.wikidata.org/entity/Q327333', // government agency - MedicalOrganization: 'http://www.wikidata.org/entity/Q4287745', - MusicGroup: 'http://www.wikidata.org/entity/Q32178211', // music organization - NGO: 'http://www.wikidata.org/entity/Q163740', // nonprofit organization @@ - Occupation: 'http://www.wikidata.org/entity/Q28640', // Profession - // Organization: 'http://www.wikidata.org/entity/Q43229', - Project: 'http://www.wikidata.org/entity/Q170584', - SportsOrganization: 'http://www.wikidata.org/entity/Q4438121', -} - -export async function getPreferredLanguages () { - return ['fr', 'en', 'de', 'it'] // @@ testing only -- code me later -} -export const escoParameters:QueryParameters = { - label: 'ESCO', - logo: 'https://ec.europa.eu/esco/portal/static_resource2/images/logo/logo_en.gif', - searchByNameQuery: undefined, // No sparql endpoint - searchByNameURI: 'https://ec.europa.eu/esco/api/search?language=$(language)&type=occupation&text=$(name)', - endpoint: undefined, - class: {} -} - -export const dbpediaParameters:QueryParameters = { - label: 'DBPedia', - logo: 'https://upload.wikimedia.org/wikipedia/commons/thumb/7/73/DBpediaLogo.svg/263px-DBpediaLogo.svg.png', - searchByNameQuery: `select distinct ?subject, ?name where { - ?subject a $(class); rdfs:label ?name - FILTER regex(?name, "$(name)", "i") - } LIMIT $(limit)`, - endpoint: 'https://dbpedia.org/sparql/', - class: { AcademicInsitution: 'http://umbel.org/umbel/rc/EducationalOrganization' } -} - -export const wikidataParameters = { - label: 'WikiData', - logo: 'https://www.wikimedia.org/static/images/project-logos/wikidatawiki.png', - endpoint: 'https://query.wikidata.org/sparql', - class: { - AcademicInsitution: 'http://www.wikidata.org/entity/Q4671277', - Enterprise: 'http://www.wikidata.org/entity/Q6881511', - Business: 'http://www.wikidata.org/entity/Q4830453', - NGO: 'http://www.wikidata.org/entity/Q79913', - CharitableOrganization: 'http://www.wikidata.org/entity/Q708676', - Insitute: 'http://www.wikidata.org/entity/Q1664720', - }, - searchByNameQuery: `SELECT ?subject ?name - WHERE { - ?klass wdt:P279* $(class) . - ?subject wdt:P31 ?klass . - ?subject rdfs:label ?name. - FILTER regex(?name, "$(name)", "i") - } LIMIT $(limit) `, // was SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" } - - insitituteDetailsQuery: `CONSTRUCT -{ wd:Q49108 schema:name ?itemLabel; - schema:logo ?logo; - schema:logo ?sealImage; - schema:subOrganization ?subsidiary . - ?subsidiary schema:name ?subsidiaryLabel . -} -WHERE -{ - wd:Q49108 # rdfs:label ?itemLabel ; - wdt:P154 ?logo; - wdt:P158 ?sealImage ; - wdt:P355 ?subsidiary . - # ?subsidiary rdfs:label ?subsidiaryLabel . - - SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE], fr". } -}` -} - -/* From an array of bindings with a names for each row, - * remove dupliacte names for the same thing, leaving the user's - * preferred language version -*/ -export function filterByLanguage (bindings: Bindings, languagePrefs: string[]): Bindings { - const uris: Record = {} - bindings.forEach(binding => { // Organize names by their subject - const uri = binding.subject.value - uris[uri] = uris[uri] || [] - uris[uri].push(binding) - }) - - const languagePrefs2 = languagePrefs - languagePrefs2.reverse() // prefered last - - const slimmed: Binding[] = [] - for (const u in uris) { // needs hasOwnProperty ? - const bindings = uris[u] - const sortMe = bindings.map(binding => { - return [languagePrefs2.indexOf(binding.name?.['xml:lang'] || ''), binding] - }) - sortMe.sort() // best at th ebottom - sortMe.reverse() // best at the top - slimmed.push(sortMe[0][1] as Binding) - } // map u - console.log(` Filter by language: ${bindings.length} -> ${slimmed.length}`) - return slimmed -} - -export var wikidataClassMap = { - 'http://www.wikidata.org/entity/Q15936437': ns.schema('CollegeOrUniversity'), // research university - 'http://www.wikidata.org/entity/Q1664720': ns.schema('EducationalOrganization'), // insitute @@ - 'http://www.wikidata.org/entity/Q43229': ns.schema('Organization'), // research university - 'http://www.wikidata.org/entity/Q3918': ns.schema('CollegeOrUniversity'), // university - 'http://www.wikidata.org/entity/Q170584': ns.schema('Project'), // university - 'http://www.wikidata.org/entity/Q327333': ns.schema('GovernmentOrganization'), // gobvt agency - 'http://www.wikidata.org/entity/Q2221906': ns.schema('Place'), // geographic location - -} -export var predMap = { // allow other mappings top added in theory - class: ns.rdf('type'), - // logo: ns.schema('logo'), - sealImage: ns.schema('logo'), - // image: ns.schema('image'), defaults to shema - shortName: ns.foaf('nick'), - subsidiary: ns.schema('subOrganization') -} - -export function loadFromBindings (kb, solidSubject:NamedNode, bindings, doc) { - const results = {} - console.log(`loadFromBindings: subject: ${solidSubject}`) - console.log(` doc: ${doc}`) - bindings.forEach(binding => { - for (const key in binding) { - const result = binding[key] - const combined = JSON.stringify(result) // ( result.type, result.value ) - results[key] = results[key] || new Set() - results[key].add(combined) // remove duplicates - } - }) - for (const key in results) { - const values = results[key] - console.log(` results ${key} -> ${values}`) - values.forEach(combined => { - const result = JSON.parse(combined) - const { type, value } = result - let obj - if (type === 'uri') { - obj = kb.sym(value) - } else if (type === 'literal') { - obj = new Literal(value, result.language, result.datatype) - } else { - throw new Error(`loadFromBindings: unexpected type: ${type}`) - } - if (key === 'type') { - if (wikidataClassMap[value]) { - obj = wikidataClassMap[value] - } else { - console.warn('Unmapped Wikidata Class: ' + value) - } - } else if (key === 'coordinates') { - // const latlong = value // Like 'Point(-71.106111111 42.375)' - console.log(' @@@ hey a point: ' + value) - // eslint-disable-next-line no-useless-escape - const regexp = /.*\(([-0-9\.-]*) ([-0-9\.-]*)\)/ - const match = regexp.exec(value) - if (match) { - const float = ns.xsd('float') - const latitude = new Literal(match[1], null, float) - const longitude = new Literal(match[2], null, float) - kb.add(solidSubject, ns.schema('longitude'), longitude, doc) - kb.add(solidSubject, ns.schema('latitude'), latitude, doc) - } - } else if (predMap[key]) { - const pred = predMap[key] || ns.schema(key) // fallback to just using schema.org - kb.add(solidSubject, pred, obj, doc) // @@ deal with non-string and objects - console.log(` public data ${pred} ${obj}.`) - } - }) - } -} - -/* ESCO sopecific -*/ - -/* Query all entities of given class and partially matching name -*/ -export async function queryESCODataByName (filter: string, theClass:NamedNode, queryTarget: QueryParameters): Promise { - if (!queryTarget.searchByNameURI) { - throw new Error('Query target searchByNameURI is required for ESCO queries') - } - const queryURI = queryTarget.searchByNameURI - .replace('$(name)', filter) - .replace('$(limit)', '' + AUTOCOMPLETE_LIMIT) - .replace('$(class)', theClass.uri) - console.log('Querying ESCO data - uri: ' + queryURI) - - const options = { - credentials: 'omit' as const, - headers: { Accept: 'application/json' } - } // CORS - const response = await store.fetcher.webOperation('GET', queryURI, options) - // complain('Error querying db of organizations: ' + err) - const text = response.responseText - if (!text) throw new Error('No response text from ESCO query ' + queryURI) - console.log(' Query result text' + text.slice(0, 500) + '...') - if (text.length === 0) throw new Error('Wot no text back from ESCO query ' + queryURI) - const json = JSON.parse(text) - console.log(' Query result JSON' + JSON.stringify(json, null, 4).slice(0, 500) + '...') - - const results = json._embedded.results // Array - const bindings = results.map(result => { - const name = result.title - const uri = result.uri // like http://data.europa.eu/esco/occupation/57af9090-55b4-4911-b2d0-86db01c00b02 - return { name: { value: name, type: 'literal' }, uri: { type: 'IRI', value: uri } } // simulate SPARQL bindings - }) - return bindings - // return queryPublicDataSelect(sparql, queryTarget) -} - -/* Query all entities of given class and partially matching name -*/ -export async function queryPublicDataByName (filter: string, theClass:NamedNode, queryTarget: QueryParameters): Promise { - const sparql = queryTarget.searchByNameQuery! - .replace('$(name)', filter) - .replace('$(limit)', '' + AUTOCOMPLETE_LIMIT) - .replace('$(class)', theClass.uri) - console.log('Querying public data - sparql: ' + sparql) - return queryPublicDataSelect(sparql, queryTarget) -} - -export async function queryPublicDataSelect (sparql: string, queryTarget: QueryParameters): Promise { - if (!queryTarget.endpoint) { - throw new Error('Query target endpoint is required') - } - const myUrlWithParams = new URL(queryTarget.endpoint!) - myUrlWithParams.searchParams.append('query', sparql) - const queryURI = myUrlWithParams.href - console.log(' queryPublicDataSelect uri: ' + queryURI) - - const options = { - credentials: 'omit' as const, - headers: { Accept: 'application/json' } - } // CORS - const response = await store.fetcher.webOperation('GET', queryURI, options) - // complain('Error querying db of organizations: ' + err) - const text = response.responseText - // console.log(' Query result text' + text.slice(0,100) + '...') - if (!text || text.length === 0) { throw new Error('Wot no text back from query ' + queryURI) } else { - const json = JSON.parse(text) - console.log(' Query result JSON' + JSON.stringify(json, null, 4).slice(0, 100) + '...') - const bindings = json.results.bindings - return bindings - } -} - -export async function queryPublicDataConstruct (sparql: string, publicId: NamedNode, queryTarget: QueryParameters): Promise { - console.log('queryPublicDataConstruct: sparql:', sparql) - if (!queryTarget.endpoint) { - throw new Error('Query target endpoint is required') - } - const myUrlWithParams = new URL(queryTarget.endpoint) - myUrlWithParams.searchParams.append('query', sparql) - const queryURI = myUrlWithParams.href - console.log(' queryPublicDataConstruct uri: ' + queryURI) - const options = { - credentials: 'omit' as const, // CORS - headers: { Accept: 'text/turtle' } - } - const response = await store.fetcher.webOperation('GET', queryURI, options) - const text = response.responseText - const report = text && text.length > 500 ? text.slice(0, 200) + ' ... ' + text.slice(-200) : text - console.log(' queryPublicDataConstruct result text:' + report) - if (!text || text.length === 0) { throw new Error('queryPublicDataConstruct: No text back from construct query:' + queryURI) } else { parse(text, store, publicId.uri, 'text/turtle') } -} - -export async function loadPublicDataThing (kb, subject: NamedNode, publicDataID: NamedNode) { - if (publicDataID.uri.startsWith('https://dbpedia.org/resource/')) { - return getDbpediaDetails(kb, subject, publicDataID) - } else if (publicDataID.uri.match(/^https?:\/\/www\.wikidata\.org\/entity\/.*/)) { - // Previous approach: - // const QId = publicDataID.uri.split('/')[4] - // const dataURI = `http://www.wikidata.org/wiki/Special:EntityData/${QId}.ttl` - // Not used because loading the data URI gives much too much irrelevant data from Wikidata. - await getWikidataDetails(kb, subject, publicDataID) - // await getWikidataLocation(kb, subject, publicDataID) -- should get that in the details query now - } else { - const iDToFetch = publicDataID.uri.startsWith('http:') - ? kb.sym('https:' + publicDataID.uri.slice(5)) - : publicDataID - return kb.fetcher.load(iDToFetch, { - credentials: 'omit', - headers: { Accept: 'text/turtle' } - }) - } -} - -export async function getWikidataDetails (kb, solidSubject:NamedNode, publicDataID:NamedNode) { - const subjRegexp = /wd:Q49108/g - const sparql = instituteDetailsQuery.replace(subjRegexp, publicDataID.value) - await queryPublicDataConstruct(sparql, publicDataID, wikidataParameters) - console.log('getWikidataDetails: loaded.', publicDataID) -} - -export async function getWikidataDetailsOld (kb, solidSubject:NamedNode, publicDataID:NamedNode) { - const sparql = `select distinct * where { - optional { $(subject) wdt:P31 ?class } # instance of - optional { $(subject) wdt:P154 ?logo } - optional { $(subject) wdt:P158 ?sealImage } -# optional { $(subject) wdt:P159 ?headquartersLocation } - -optional { $(subject) wdt:P17 ?country } -optional { $(subject) wdt:P18 ?image } -optional { $(subject) wdt:P1813 ?shortName } - -optional { $(subject) wdt:P355 ?subsidiary } -# SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en,de,it" } -}` - .replace(subjectRegexp, publicDataID.uri) - const bindings = await queryPublicDataSelect(sparql, wikidataParameters) - loadFromBindings(kb, publicDataID, bindings, publicDataID.doc()) // arg2 was solidSubject -} - -export async function getWikidataLocation (kb, solidSubject:NamedNode, publicDataID:NamedNode) { - const sparql = `select distinct * where { - - $(subject) wdt:P276 ?location . - - optional { ?location wdt:P2044 ?elevation } - optional { ?location wdt:P131 ?region } - optional { ?location wdt:P625 ?coordinates } -optional { ?location wdt:P17 ?country } - -# SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en,de,it" } -}`.replace(subjectRegexp, publicDataID.uri) - console.log(' location query sparql:' + sparql) - const bindings = await queryPublicDataSelect(sparql, wikidataParameters) - console.log(' location query bindings:', bindings) - loadFromBindings(kb, publicDataID, bindings, publicDataID.doc()) // was solidSubject -} - -export async function getDbpediaDetails (kb, solidSubject:NamedNode, publicDataID:NamedNode) { -// Note below the string form of the named node with <> works in SPARQL - const sparql = `select distinct ?city, ?state, ?country, ?homepage, ?logo, ?lat, ?long, WHERE { - OPTIONAL { <${publicDataID}> ?city } - OPTIONAL { ${publicDataID} ?state } - OPTIONAL { ${publicDataID} ?country } - OPTIONAL { ${publicDataID} foaf:homepage ?homepage } - OPTIONAL { ${publicDataID} foaf:lat ?lat; foaf:long ?long } - OPTIONAL { ${publicDataID} ?country } - }` - /* - const predMap = { - city: ns.vcard('locality'), - state: ns.vcard('region'), - country: ns.vcard('country-name'), - homepage: ns.foaf('homepage'), - lat: ns.geo('latitude'), - long: ns.geo('longitude'), - } - */ - const bindings = await queryPublicDataSelect(sparql, dbpediaParameters) - return bindings.map(binding => { - const uri = binding.subject.value // @@ To be written - const name = binding.name?.value - return { uri, name } - }) -} diff --git a/src/styles/contactsPane.css b/src/styles/contactsPane.css new file mode 100644 index 0000000..9568ec9 --- /dev/null +++ b/src/styles/contactsPane.css @@ -0,0 +1,114 @@ +/* contactsPane styles — extracted from inline styles in contactsPane.js */ +/* Uses CSS custom properties from the global stylesheet (dev-global.css / mashlib) */ + +/* ── Layout: Three-column browser ────────────────────────────── */ + +.contactPane .bookTable { + border-collapse: collapse; + margin-right: 0; + max-height: 9in; +} + +.contactPane .groupsHeader { + min-width: 10em; + padding-bottom: 0.2em; +} + +.contactPane .peopleHeader { + min-width: 18em; +} + +.contactPane .peopleMain { + overflow: scroll; +} + +.contactPane .cardMain { + margin: 0; +} + +.contactPane .groupsMain, +.contactPane .groupsFooter { + padding: 0.1em; +} + +/* ── Search ──────────────────────────────────────────────────── */ + +.contactPane .searchInput { + border: 0.1em solid var(--color-text-muted); + border-radius: var(--border-radius-base); + width: 100%; + font-size: var(--font-size-base); + padding: 0.1em 0.6em; + margin: 0.2em; +} + +/* ── Data cells ──────────────────────────────────────────────── */ + +.contactPane .dataCell { + padding: 0.1em; +} + +/* ── Rendered sub-pane ───────────────────────────────────────── */ + +.contactPane .renderPane { + border: 0.1em solid var(--color-text-muted); + border-radius: var(--border-radius-base); +} + +/* ── Delete button ───────────────────────────────────────────── */ + +.contactPane .deleteButton { + height: 2em; +} + +/* ── Sharing button & icon ───────────────────────────────────── */ + +.contactPane .sharingButton { + padding: var(--spacing-md); + margin: var(--spacing-md); +} + +.contactPane .sharingButtonIcon { + width: var(--spacing-lg); + height: var(--spacing-lg); +} + +/* ── "All" groups button ─────────────────────────────────────── */ + +.contactPane .allGroupsButton { + margin-left: var(--spacing-md); + font-size: var(--font-size-base); +} + +.contactPane .allGroupsButton--loading { + background-color: #ff8; +} + +.contactPane .allGroupsButton--active { + background-color: var(--color-text); + color: var(--color-background); +} + +.contactPane .allGroupsButton--loaded { + background-color: #cfc; +} + +/* ── Selection & visibility states ───────────────────────────── */ + +.contactPane .selected { + background-color: #cce; +} + +.contactPane .group-loading { + background-color: #ffe; +} + +.contactPane .hidden { + display: none; +} + +/* ── Mint new address book ───────────────────────────────────── */ + +.contactPane .claimSuccess { + font-size: 140%; +} diff --git a/src/styles/individual.css b/src/styles/individual.css new file mode 100644 index 0000000..63936ae --- /dev/null +++ b/src/styles/individual.css @@ -0,0 +1,13 @@ +/* individual.js styles — extracted from inline styles */ + +/* ── Individual pane container ───────────────────────────────── */ + +.contactPane .individualPane { + padding: var(--spacing-xs) var(--spacing-lg) var(--spacing-md) var(--spacing-lg); +} + +/* ── Spacer between sections ─────────────────────────────────── */ + +.contactPane .spacer { + height: var(--spacing-md); +} diff --git a/src/styles/mugshotGallery.css b/src/styles/mugshotGallery.css new file mode 100644 index 0000000..795deba --- /dev/null +++ b/src/styles/mugshotGallery.css @@ -0,0 +1,10 @@ +/* mugshotGallery.js styles — extracted from inline styles */ +/* Uses CSS custom properties from the global stylesheet (dev-global.css / mashlib) */ + +/* ── Mugshot image ───────────────────────────────────────────── */ + +.contactPane .mugshotImage { + max-height: 10em; + border-radius: var(--border-radius-full); + margin: 0.7em; +} diff --git a/src/styles/toolsPane.css b/src/styles/toolsPane.css new file mode 100644 index 0000000..126c8b2 --- /dev/null +++ b/src/styles/toolsPane.css @@ -0,0 +1,48 @@ +/* toolsPane.js styles — extracted from inline styles */ +/* Uses CSS custom properties from the global stylesheet (dev-global.css / mashlib) */ + +/* ── Tools pane table ────────────────────────────────────────── */ + +.contactPane .toolsTable { + font-size: 120%; + margin: var(--spacing-md); + border: 0.1em var(--color-border-pale); +} + +/* ── Tools header row ────────────────────────────────────────── */ + +.contactPane .toolsHeader { + min-width: 20em; + padding: var(--spacing-md); + font-size: 150%; + border-bottom: 0.1em solid var(--color-error); + margin-bottom: var(--spacing-xl); +} + +/* ── Status block ────────────────────────────────────────────── */ + +.contactPane .toolsStatusBlock { + padding: var(--spacing-xl); +} + +/* ── Tools buttons ───────────────────────────────────────────── */ + +.contactPane .toolsButton { + font-size: var(--font-size-base); + margin: 0.8em; + padding: var(--spacing-xs); +} + +/* ── Load index button states ────────────────────────────────── */ + +.contactPane .toolsButton--loading { + background-color: #ffc; +} + +.contactPane .toolsButton--error { + background-color: #fcc; +} + +.contactPane .toolsButton--success { + background-color: #cfc; +} diff --git a/src/styles/webidControl.css b/src/styles/webidControl.css new file mode 100644 index 0000000..9ced8f0 --- /dev/null +++ b/src/styles/webidControl.css @@ -0,0 +1,59 @@ +/* webidControl.js styles — extracted from inline styles */ +/* Uses CSS custom properties from the global stylesheet (dev-global.css / mashlib) */ + +/* ── Named pane (rendered sub-pane) ──────────────────────────── */ + +.contactPane .namedPane { + border: 0.1em solid var(--color-text-muted); + border-radius: var(--border-radius-base); +} + +/* ── WebID / Public ID outer container ───────────────────────── */ + +.contactPane .webidControl { + border-radius: 0.3em; + border: 0.1em solid #888; +} + +/* ── Persona row ─────────────────────────────────────────────── */ + +.contactPane .personaRow { + padding: 0.2em; +} + +.contactPane .personaRow--webid { + background-color: #ffe6ff; +} + +/* ── Full-width elements ─────────────────────────────────────── */ + +.contactPane .fullWidth { + width: 100%; +} + +/* ── Open/close profile button ───────────────────────────────── */ + +.contactPane .personaOpenButton { + float: right; + background-color: transparent; + border: none; +} + +/* ── Section heading ─────────────────────────────────────────── */ + +.contactPane .webidHeading { + font-size: 110%; + font-weight: bold; + color: var(--color-primary); + padding: 0.2em; + margin: 0.7em 0; +} + +/* ── Prompt text ─────────────────────────────────────────────── */ + +.contactPane .webidPrompt { + padding: 0.7em; + border: none; + font-size: var(--font-size-base); + white-space: pre-wrap; +} diff --git a/src/toolsPane.js b/src/toolsPane.js index 08cc99c..b5de000 100644 --- a/src/toolsPane.js +++ b/src/toolsPane.js @@ -1,10 +1,11 @@ // The tools pane is for managing and debugging and maintaining solid contacts databases // -/* global confirm, $rdf */ import * as UI from 'solid-ui' import { store } from 'solid-logic' import { saveNewGroup, addPersonToGroup, groupMembers } from './contactLogic' +import './styles/toolsPane.css' +import * as $rdf from 'rdflib' export function toolsPane ( selectAllGroups, @@ -19,23 +20,16 @@ export function toolsPane ( const ns = UI.ns const VCARD = ns.vcard - const buttonStyle = 'font-size: 100%; margin: 0.8em; padding:0.5em;' const pane = dom.createElement('div') const table = pane.appendChild(dom.createElement('table')) - table.setAttribute( - 'style', - 'font-size:120%; margin: 1em; border: 0.1em #ccc ;' - ) + table.classList.add('toolsTable') const headerRow = table.appendChild(dom.createElement('tr')) headerRow.textContent = UI.utils.label(book) + ' - tools' - headerRow.setAttribute( - 'style', - 'min-width: 20em; padding: 1em; font-size: 150%; border-bottom: 0.1em solid red; margin-bottom: 2em;' - ) + headerRow.classList.add('toolsHeader') const statusRow = table.appendChild(dom.createElement('tr')) const statusBlock = statusRow.appendChild(dom.createElement('div')) - statusBlock.setAttribute('style', 'padding: 2em;') + statusBlock.classList.add('toolsStatusBlock') const MainRow = table.appendChild(dom.createElement('tr')) const box = MainRow.appendChild(dom.createElement('table')) table.appendChild(dom.createElement('tr')) // bottomRow @@ -98,31 +92,34 @@ export function toolsPane ( } async function loadIndexHandler (_event) { - loadIndexButton.setAttribute('style', 'background-color: #ffc;') + loadIndexButton.classList.add('toolsButton--loading') + loadIndexButton.classList.remove('toolsButton--error', 'toolsButton--success') const nameEmailIndex = kb.any(book, ns.vcard('nameEmailIndex')) try { await kb.fetcher.load(nameEmailIndex) } catch (e) { - loadIndexButton.setAttribute('style', 'background-color: #fcc;') + loadIndexButton.classList.remove('toolsButton--loading') + loadIndexButton.classList.add('toolsButton--error') log('Error: People index has NOT been loaded' + e + '\n') } - loadIndexButton.setAttribute('style', 'background-color: #cfc;') + loadIndexButton.classList.remove('toolsButton--loading') + loadIndexButton.classList.add('toolsButton--success') log(' People index has been loaded\n') } // loadIndexHandler const loadIndexButton = pane.appendChild(dom.createElement('button')) loadIndexButton.textContent = 'Load main index' - loadIndexButton.style.cssText = buttonStyle + loadIndexButton.classList.add('toolsButton') loadIndexButton.addEventListener('click', loadIndexHandler) const statButton = pane.appendChild(dom.createElement('button')) statButton.textContent = 'Statistics' - statButton.style.cssText = buttonStyle + statButton.classList.add('toolsButton') statButton.addEventListener('click', stats) const checkAccessButton = pane.appendChild(dom.createElement('button')) checkAccessButton.textContent = 'Check individual card access of selected groups' - checkAccessButton.style.cssText = buttonStyle + checkAccessButton.classList.add('toolsButton') async function checkAcces (_event) { function doCard (card) { UI.acl.fixIndividualCardACL(card, log, function (ok, message) { @@ -156,7 +153,7 @@ export function toolsPane ( // DUPLICATES CHECK const checkDuplicates = pane.appendChild(dom.createElement('button')) checkDuplicates.textContent = 'Find duplicate cards' - checkDuplicates.style.cssText = buttonStyle + checkDuplicates.classList.add('toolsButton') checkDuplicates.addEventListener('click', function (_event) { const stats = {} // global god context @@ -699,7 +696,7 @@ export function toolsPane ( } const checkGroupless = pane.appendChild(dom.createElement('button')) - checkGroupless.style.cssText = buttonStyle + checkGroupless.classList.add('toolsButton') checkGroupless.textContent = 'Find individuals with no group' checkGroupless.addEventListener('click', function (_event) { log('Loading groups...') @@ -722,7 +719,7 @@ export function toolsPane ( }) const fixGrouplessButton = pane.appendChild(dom.createElement('button')) - fixGrouplessButton.style.cssText = buttonStyle + fixGrouplessButton.classList.add('toolsButton') fixGrouplessButton.textContent = 'Put all individuals with no group in a new group' fixGrouplessButton.addEventListener('click', _event => fixGroupless(book)) @@ -761,7 +758,7 @@ export function toolsPane ( } const fixToOldDataModelButton = pane.appendChild(dom.createElement('button')) - fixToOldDataModelButton.style.cssText = buttonStyle + fixToOldDataModelButton.classList.add('toolsButton') fixToOldDataModelButton.textContent = 'Revert groups to old data model' fixToOldDataModelButton.addEventListener('click', _event => fixToOldDataModel(book)) } // main diff --git a/src/webidControl.js b/src/webidControl.js index f28d50e..1fd8966 100644 --- a/src/webidControl.js +++ b/src/webidControl.js @@ -3,16 +3,13 @@ import * as UI from 'solid-ui' import { store } from 'solid-logic' import { updateMany } from './contactLogic' -// import { renderAutoComplete } from './lib/autocompletePicker' // dbpediaParameters -import { renderAutocompleteControl } from './autocompleteBar' -// import { wikidataParameters, loadPublicDataThing, wikidataClasses } from './lib/publicData' // dbpediaParameters import * as $rdf from 'rdflib' +import './styles/webidControl.css' const ns = UI.ns const widgets = UI.widgets const utils = UI.utils const kb = store -const style = UI.style const wikidataClasses = widgets.publicData.wikidataClasses // @@ move to solid-logic const wikidataParameters = widgets.publicData.wikidataParameters // @@ move to solid-logic @@ -21,7 +18,6 @@ const WEBID_NOUN = 'Solid ID' const PUBLICID_NOUN = 'In public data' const DOWN_ARROW = UI.icons.iconBase + 'noun_1369241.svg' const UP_ARROW = UI.icons.iconBase + 'noun_1369237.svg' -const webidPanelBackgroundColor = '#ffe6ff' /// ///////////////////////// Logic @@ -157,10 +153,7 @@ export function isOrganization (agent) { export function renderNamedPane (dom, subject, paneName, dataBrowserContext) { const p = dataBrowserContext.session.paneRegistry.byName(paneName) const d = p.render(subject, dataBrowserContext) // @@@ change some bits of context! - d.setAttribute( - 'style', - 'border: 0.1em solid #444; border-radius: 0.5em' - ) + d.classList.add('namedPane') return d } @@ -232,18 +225,18 @@ export async function renderIdControl (person, dataBrowserContext, options) { const row = widgets.personTR(dom, UI.ns.foaf('knows'), webidObject, opts) if (isWebId) { row.children[1].textConent = opts.title // @@ will be overwritten - row.style.backgroundColor = webidPanelBackgroundColor + row.classList.add('personaRow--webid') } - row.style.padding = '0.2em' + row.classList.add('personaRow') return row } const div = dom.createElement('div') - div.style.width = '100%' + div.classList.add('fullWidth') const personaTable = div.appendChild(dom.createElement('table')) - personaTable.style.width = '100%' + personaTable.classList.add('fullWidth') const nav = personaTable.appendChild(renderNewRow(persona)) - nav.style.width = '100%' + nav.classList.add('fullWidth') const mainRow = personaTable.appendChild(dom.createElement('tr')) const mainCell = mainRow.appendChild(dom.createElement('td')) mainCell.setAttribute('colspan', 3) @@ -253,9 +246,7 @@ export async function renderIdControl (person, dataBrowserContext, options) { const rhs = nav.children[2] const openButton = rhs.appendChild(widgets.button(dom, DOWN_ARROW, 'View', profileOpenHandler)) - openButton.style.float = 'right' - delete openButton.style.backgroundColor - delete openButton.style.border + openButton.classList.add('personaOpenButton') const paneName = isOrganization(person) || isOrganization(persona) ? 'profile' : 'profile' // was default for org widgets.publicData.loadPublicDataThing(kb, person, persona).then(_resp => { @@ -263,7 +254,7 @@ export async function renderIdControl (person, dataBrowserContext, options) { try { main = renderNamedPane(dom, persona, paneName, dataBrowserContext) console.log('main: ', main) - main.style.width = '100%' + main.classList.add('fullWidth') console.log('renderIdControl: main element: ', main) // main.style.visibility = 'collapse' mainCell.appendChild(main) @@ -297,7 +288,7 @@ export async function renderIdControl (person, dataBrowserContext, options) { options = options || {} options.editable = kb.updater.editable(person.doc().uri, kb) const div = dom.createElement('div') - div.style = 'border-radius:0.3em; border: 0.1em solid #888;' // padding: 0.8em; + div.classList.add('webidControl') if (getPersonas(kb, person).length === 0 && !options.editable) { div.style.display = 'none' @@ -306,20 +297,18 @@ export async function renderIdControl (person, dataBrowserContext, options) { const h4 = div.appendChild(dom.createElement('h4')) h4.textContent = options.idNoun - h4.style = style.formHeadingStyle - h4.style.color = style.highlightColor + h4.classList.add('webidHeading') const prompt = div.appendChild(dom.createElement('p')) - prompt.style = style.commentStyle + prompt.classList.add('webidPrompt') prompt.textContent = options.longPrompt const table = div.appendChild(dom.createElement('table')) - table.style.width = '100%' + table.classList.add('fullWidth') if (options.editable) { // test options.manualURIEntry = true // introduced in solid-ui 2.4.2 options.queryParams = options.queryParams || wikidataParameters - div.appendChild(await renderAutocompleteControl(dom, person, options, addOneIdAndRefresh)) - // div.appendChild(await widgets.renderAutocompleteControl(dom, person, options, addOneIdAndRefresh)) + div.appendChild(await widgets.renderAutocompleteControl(dom, person, options, addOneIdAndRefresh)) } const profileArea = div.appendChild(dom.createElement('div')) await refreshWebIDTable() diff --git a/test/__mocks__/styleMock.js b/test/__mocks__/styleMock.js new file mode 100644 index 0000000..4ba52ba --- /dev/null +++ b/test/__mocks__/styleMock.js @@ -0,0 +1 @@ +module.exports = {} diff --git a/webpack.config.mjs b/webpack.config.mjs new file mode 100644 index 0000000..786cd76 --- /dev/null +++ b/webpack.config.mjs @@ -0,0 +1,120 @@ +import path from 'path' +import TerserPlugin from 'terser-webpack-plugin' +import CopyPlugin from 'copy-webpack-plugin' + +const common = { + entry: './src/contactsPane.js', + resolve: { + extensions: ['.js'], + }, + module: { + rules: [ + { + test: /\.css$/, + use: ['style-loader', 'css-loader'], + }, + { + test: /\.ttl$/i, + type: 'asset/source' + } + ], + }, + externals: { + fs: 'null', + 'node-fetch': 'fetch', + 'isomorphic-fetch': 'fetch', + 'text-encoding': 'TextEncoder', + '@trust/webcrypto': 'crypto', + rdflib: { + commonjs: 'rdflib', + commonjs2: 'rdflib', + amd: 'rdflib', + root: '$rdf' + }, + 'solid-logic': { + commonjs: 'solid-logic', + commonjs2: 'solid-logic', + amd: 'solid-logic', + root: 'SolidLogic' + }, + 'solid-ui': { + commonjs: 'solid-ui', + commonjs2: 'solid-ui', + amd: 'solid-ui', + root: 'UI' + } + }, + devtool: 'source-map', +} + +const normalConfig = { + ...common, + mode: 'production', + output: { + path: path.resolve(process.cwd(), 'dist'), + filename: 'contactsPane.js', + library: { + type: 'umd', + name: 'ContactsPane', + export: 'default', + }, + globalObject: 'globalThis', + clean: true, + }, + plugins: [ + ...(common.plugins || []), + new CopyPlugin({ + patterns: [ + { + from: path.resolve('src/styles'), + to: path.resolve('dist/styles'), + }, + ], + }), + ], + optimization: { + minimize: false, + } +} + +const minConfig = { + ...common, + mode: 'production', + output: { + path: path.resolve(process.cwd(), 'dist'), + filename: 'contactsPane.min.js', + library: { + type: 'umd', + name: 'ContactsPane', + export: 'default', + }, + globalObject: 'globalThis', + clean: false, + }, + plugins: [ + ...(common.plugins || []), + new CopyPlugin({ + patterns: [ + { + from: path.resolve('src/styles'), + to: path.resolve('dist/styles'), + }, + ], + }), + ], + optimization: { + minimize: true, + minimizer: [ + new TerserPlugin({ + terserOptions: { + format: { + comments: false, + }, + }, + extractComments: false, + }) + ], + } +} + +export default [normalConfig, minConfig] diff --git a/webpack.dev.config.mjs b/webpack.dev.config.mjs new file mode 100644 index 0000000..a50c911 --- /dev/null +++ b/webpack.dev.config.mjs @@ -0,0 +1,85 @@ +import HtmlWebpackPlugin from 'html-webpack-plugin' +import NodePolyfillPlugin from 'node-polyfill-webpack-plugin' +import webpack from 'webpack' + +export default [ + { + mode: 'development', + entry: ['./dev/index.ts'], + plugins: [ + new HtmlWebpackPlugin({ + template: './dev/index.html', + inject: 'head' + }), + new NodePolyfillPlugin(), + new webpack.ProvidePlugin({ + $rdf: 'rdflib', + SolidLogic: 'solid-logic', + UI: 'solid-ui' + }), + new webpack.DefinePlugin({ + global: 'globalThis', + 'process.env.NODE_ENV': JSON.stringify('development') + }) + ], + module: { + rules: [ + { + test: /\.(js|ts)$/, + exclude: /node_modules/, + use: ['babel-loader'], + }, + { + test: /\.ttl$/, // Target text files + type: 'asset/source', // Load the file's content as a string + }, + { + test: /\.css$/, + exclude: /\.module\.css$/, + use: ['style-loader', 'css-loader'], + }, + { + test: /\.module\.css$/, + use: [ + 'style-loader', + { + loader: 'css-loader', + options: { + modules: true + } + } + ] + } + ], + }, + resolve: { + extensions: ['.js', '.ts'], + alias: { + $rdf: 'rdflib', + rdflib: 'rdflib', + SolidLogic: 'solid-logic', + 'solid-logic': 'solid-logic', + UI: 'solid-ui', + 'solid-ui': 'solid-ui' + } + }, + output: { + globalObject: 'globalThis', + library: { + type: 'umd', + umdNamedDefine: true + } + }, + optimization: { + usedExports: true, + // Tree shaking in development (normally disabled for faster builds) + providedExports: true, + }, + devServer: { + static: [ + './dev' + ], + }, + devtool: 'source-map', + }, +]