Changeset 3657956
- Timestamp:
- 08/21/2026 12:22:03 AM (2 months ago)
- Location:
- markdown-renderer-for-github/trunk
- Files:
-
- 8 added
- 86 edited
-
assets/js/gfmr-main.js (modified) (16 diffs)
-
assets/js/gfmr-main.min.js (modified) (1 diff)
-
assets/js/gfmr-plantuml-handler.js (modified) (1 diff)
-
assets/js/gfmr-plantuml-handler.min.js (modified) (2 diffs)
-
assets/js/gfmr-worker-manager.js (modified) (4 diffs)
-
assets/js/gfmr-worker-manager.min.js (modified) (1 diff)
-
blocks/markdown/constants.js (modified) (27 diffs)
-
build/index.asset.php (modified) (1 diff)
-
build/index.js (modified) (1 diff)
-
changelog.txt (modified) (1 diff)
-
includes/admin/class-gfmr-manual-renderer.php (modified) (1 diff)
-
includes/admin/class-gfmr-settings-registry.php (modified) (1 diff)
-
includes/admin/class-gfmr-settings-renderer.php (modified) (1 diff)
-
includes/admin/class-gfmr-settings-sanitizer.php (modified) (1 diff)
-
includes/admin/class-gfmr-settings-schema.php (modified) (2 diffs)
-
includes/admin/class-gfmr-settings.php (modified) (3 diffs)
-
includes/asset/class-gfmr-asset-manager.php (modified) (13 diffs)
-
includes/asset/class-gfmr-speculation-rules.php (modified) (7 diffs)
-
includes/cache/class-gfmr-cache-manager.php (modified) (3 diffs)
-
includes/diagram/class-gfmr-chart-image-handler.php (modified) (1 diff)
-
includes/rendering/class-gfmr-renderer.php (modified) (2 diffs)
-
includes/rendering/class-gfmr-ssr-renderer.php (modified) (2 diffs)
-
includes/schema/class-gfmr-schema-generator.php (modified) (5 diffs)
-
includes/seo/class-gfmr-meta-description.php (modified) (5 diffs)
-
includes/seo/class-gfmr-social-meta.php (added)
-
includes/shared/class-gfmr-core-bootstrap.php (modified) (1 diff)
-
includes/shared/class-gfmr-settings-writer.php (modified) (1 diff)
-
includes/uninstall/class-gfmr-uninstaller.php (modified) (1 diff)
-
languages/markdown-renderer-for-github-ja.mo (modified) ( previous)
-
languages/markdown-renderer-for-github-ja.po (modified) (11 diffs)
-
markdown-renderer-for-github.php (modified) (2 diffs)
-
readme.txt (modified) (3 diffs)
-
vendor/autoload.php (modified) (1 diff)
-
vendor/composer/autoload_classmap.php (modified) (5 diffs)
-
vendor/composer/autoload_real.php (modified) (2 diffs)
-
vendor/composer/autoload_static.php (modified) (7 diffs)
-
vendor/composer/installed.json (modified) (10 diffs)
-
vendor/composer/installed.php (modified) (5 diffs)
-
vendor/league/commonmark/src/Delimiter/DelimiterStack.php (modified) (1 diff)
-
vendor/league/commonmark/src/Environment/Environment.php (modified) (2 diffs)
-
vendor/league/commonmark/src/Extension/Attributes/Event/AttributesListener.php (modified) (6 diffs)
-
vendor/league/commonmark/src/Extension/Attributes/Parser/AttributesBlockContinueParser.php (modified) (4 diffs)
-
vendor/league/commonmark/src/Extension/Attributes/Util/AttributesHelper.php (modified) (7 diffs)
-
vendor/league/commonmark/src/Extension/Autolink/UrlAutolinkParser.php (modified) (3 diffs)
-
vendor/league/commonmark/src/Extension/CommonMark/Delimiter/Processor/EmphasisDelimiterProcessor.php (modified) (1 diff)
-
vendor/league/commonmark/src/Extension/CommonMark/Parser/Block/FencedCodeParser.php (modified) (1 diff)
-
vendor/league/commonmark/src/Extension/CommonMark/Parser/Block/FencedCodeStartParser.php (modified) (1 diff)
-
vendor/league/commonmark/src/Extension/CommonMark/Parser/Inline/BacktickParser.php (modified) (3 diffs)
-
vendor/league/commonmark/src/Extension/CommonMark/Parser/Inline/CloseBracketParser.php (modified) (1 diff)
-
vendor/league/commonmark/src/Extension/DefaultAttributes/ApplyDefaultAttributesProcessor.php (modified) (4 diffs)
-
vendor/league/commonmark/src/Extension/DefaultAttributes/DefaultAttributesExtension.php (modified) (1 diff)
-
vendor/league/commonmark/src/Extension/DescriptionList/Parser/DescriptionStartParser.php (modified) (1 diff)
-
vendor/league/commonmark/src/Extension/Footnote/Event/GatherFootnotesListener.php (modified) (3 diffs)
-
vendor/league/commonmark/src/Extension/Footnote/Event/NumberFootnotesListener.php (modified) (3 diffs)
-
vendor/league/commonmark/src/Extension/Footnote/FootnoteExtension.php (modified) (3 diffs)
-
vendor/league/commonmark/src/Extension/FrontMatter/FrontMatterParser.php (modified) (3 diffs)
-
vendor/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalinkRenderer.php (modified) (1 diff)
-
vendor/league/commonmark/src/Extension/Highlight/MarkDelimiterProcessor.php (modified) (2 diffs)
-
vendor/league/commonmark/src/Extension/Mention/Generator/CallbackGenerator.php (modified) (1 diff)
-
vendor/league/commonmark/src/Extension/NormalizeHeadings (added)
-
vendor/league/commonmark/src/Extension/NormalizeHeadings/NormalizeHeadingsExtension.php (added)
-
vendor/league/commonmark/src/Extension/NormalizeHeadings/NormalizeHeadingsProcessor.php (added)
-
vendor/league/commonmark/src/Extension/Strikethrough/StrikethroughDelimiterProcessor.php (modified) (1 diff)
-
vendor/league/commonmark/src/Extension/Table/TableStartParser.php (modified) (1 diff)
-
vendor/league/commonmark/src/Extension/TableOfContents/Node/TableOfContentsReference.php (added)
-
vendor/league/commonmark/src/Extension/TableOfContents/TableOfContentsBuilder.php (modified) (3 diffs)
-
vendor/league/commonmark/src/Extension/TableOfContents/TableOfContentsExtension.php (modified) (5 diffs)
-
vendor/league/commonmark/src/Extension/TableOfContents/TableOfContentsGenerator.php (modified) (1 diff)
-
vendor/league/commonmark/src/Extension/TableOfContents/TableOfContentsPlaceholderParser.php (modified) (1 diff)
-
vendor/league/commonmark/src/Extension/TableOfContents/TableOfContentsReferenceRenderer.php (added)
-
vendor/league/commonmark/src/Extension/TableOfContents/TableOfContentsRenderCache.php (added)
-
vendor/league/commonmark/src/Node/Inline/AdjacentTextMerger.php (modified) (1 diff)
-
vendor/league/commonmark/src/Node/Node.php (modified) (3 diffs)
-
vendor/league/commonmark/src/Normalizer/UniqueSlugNormalizer.php (modified) (2 diffs)
-
vendor/league/commonmark/src/Parser/Cursor.php (modified) (15 diffs)
-
vendor/league/commonmark/src/Parser/InlineParserEngine.php (modified) (2 diffs)
-
vendor/league/commonmark/src/Util/HtmlElement.php (modified) (1 diff)
-
vendor/league/commonmark/src/Util/LinkParserHelper.php (modified) (7 diffs)
-
vendor/league/commonmark/src/Util/RegexHelper.php (modified) (3 diffs)
-
vendor/league/commonmark/src/Xml/XmlRenderer.php (modified) (5 diffs)
-
vendor/nette/utils/src/Utils/ArrayList.php (modified) (2 diffs)
-
vendor/nette/utils/src/Utils/Arrays.php (modified) (1 diff)
-
vendor/nette/utils/src/Utils/DateTimeImmutable.php (added)
-
vendor/nette/utils/src/Utils/FileSystem.php (modified) (2 diffs)
-
vendor/nette/utils/src/Utils/Finder.php (modified) (17 diffs)
-
vendor/nette/utils/src/Utils/Html.php (modified) (8 diffs)
-
vendor/nette/utils/src/Utils/Image.php (modified) (2 diffs)
-
vendor/nette/utils/src/Utils/Iterables.php (modified) (1 diff)
-
vendor/nette/utils/src/Utils/Json.php (modified) (2 diffs)
-
vendor/nette/utils/src/Utils/ObjectHelpers.php (modified) (1 diff)
-
vendor/nette/utils/src/Utils/Process.php (modified) (9 diffs)
-
vendor/nette/utils/src/Utils/Reflection.php (modified) (1 diff)
-
vendor/nette/utils/src/Utils/Strings.php (modified) (4 diffs)
-
vendor/nette/utils/src/Utils/Validators.php (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
markdown-renderer-for-github/trunk/assets/js/gfmr-main.js
r3644434 r3657956 330 330 ); 331 331 }, 332 333 // ----------------------------------------------------------------------- 334 // Prerendering API deferral (#1340) 335 // 336 // WordPress 6.8 Speculative Loading prerenders eligible links, which runs 337 // this script inside a hidden document the visitor may never activate. 338 // The dividing line is cost, not correctness: work that is pure local 339 // computation stays on the prerender path, because the result is already 340 // on screen the instant the page activates. Shiki highlighting and KaTeX 341 // math are in that group. Diagram work is not — Mermaid boots a layout 342 // engine, Chart.js paints canvases, and PlantUML performs an external 343 // server round-trip for a page the visitor may never open — so those are 344 // held until `prerenderingchange` fires. Anything heavy added later 345 // belongs on the held side. 346 // Browsers without the API leave `document.prerendering` undefined, which 347 // takes the same path as an already-activated document. 348 // ----------------------------------------------------------------------- 349 350 // Queued work, keyed for dedupe and drained in insertion order on 351 // activation. Keys are either a stage name ('charts', 'plantuml', …) or 352 // the element being held, so one Map carries both the whole-page tasks 353 // and the per-diagram ones. 354 prerenderDeferred: new Map(), 355 // True between binding the prerenderingchange listener and its firing. 356 prerenderActivationBound: false, 357 // Promise of the in-flight queue drain; tests await this after dispatching 358 // prerenderingchange. 359 prerenderFlushPromise: null, 360 361 /** 362 * Whether this document is still being prerendered (#1340). 363 * 364 * Distinct from isPrerendered(el), which asks whether an element sits in 365 * a *baked* container (#612). 366 * 367 * @return {boolean} True only when document.prerendering is exactly true. 368 */ 369 isPrerenderingDocument() { 370 return ( 371 typeof document !== 'undefined' && 372 document.prerendering === true 373 ); 374 }, 375 376 /** 377 * Run a diagram task now, or once the prerendered document is activated. 378 * 379 * @param {string|Element} key - Dedupe key. A second task with the same 380 * key is dropped while one is queued. 381 * @param {Function} task - Work to run. May return a Promise. 382 * @return {*} The task's return value when it ran immediately, otherwise 383 * undefined (callers `await` it either way). 384 */ 385 deferWhilePrerendering( key, task ) { 386 if ( ! this.isPrerenderingDocument() ) { 387 return task(); 388 } 389 390 if ( ! this.prerenderDeferred.has( key ) ) { 391 this.prerenderDeferred.set( key, task ); 392 if ( global.wpGfmConfig?.debug ) { 393 console.log( 394 '[WP GFM v2 Hotfix] Deferred until prerender activation:', 395 key 396 ); 397 } 398 } 399 400 this.bindPrerenderingChange(); 401 402 return undefined; 403 }, 404 405 /** 406 * Attach the one-shot prerenderingchange listener that drains the queue. 407 * 408 * @return {void} 409 */ 410 bindPrerenderingChange() { 411 if ( 412 this.prerenderActivationBound || 413 typeof document === 'undefined' 414 ) { 415 return; 416 } 417 this.prerenderActivationBound = true; 418 document.addEventListener( 419 'prerenderingchange', 420 () => { 421 this.prerenderActivationBound = false; 422 this.prerenderFlushPromise = 423 this.flushPrerenderDeferredTasks(); 424 }, 425 { once: true } 426 ); 427 }, 428 429 /** 430 * Drain the deferred-task queue in order, isolating failures. 431 * 432 * @return {Promise<void>} Resolves once every queued task settled. 433 */ 434 async flushPrerenderDeferredTasks() { 435 const tasks = Array.from( this.prerenderDeferred.values() ); 436 this.prerenderDeferred.clear(); 437 438 if ( global.wpGfmConfig?.debug ) { 439 console.log( 440 `[WP GFM v2 Hotfix] Prerender activated, flushing ${ tasks.length } deferred task(s)` 441 ); 442 } 443 444 for ( const task of tasks ) { 445 try { 446 await task(); 447 } catch ( error ) { 448 console.error( 449 '[WP GFM v2 Hotfix] Deferred prerender task failed:', 450 error 451 ); 452 } 453 } 454 }, 455 456 // Max wait for gfmr-worker-manager.js to define its global before a 457 // block falls back to the main-thread highlighter (#1336). Both scripts 458 // are deferred and execute back to back, so the healthy case settles in 459 // ~1ms; this only bounds the pathological case (manager script 404s or 460 // is stripped by an optimizer plugin), where code blocks stay hidden by 461 // the critical FOUC CSS until it elapses. Kept well inside the worker 462 // manager's own 10s INIT_TIMEOUT envelope. 463 WORKER_MANAGER_WAIT_MS: 2000, 464 // Memoized wait promise for the above. 465 workerManagerReadyPromise: null, 332 466 333 467 // Lazy loading threshold: blocks beyond this count use IntersectionObserver … … 515 649 516 650 /** 651 * Bring the main-thread Shiki highlighter up for one language (#621). 652 * 653 * Loads the bundle (once), registers the grammar, and resolves the 654 * approximate grammar for languages the bundle does not ship (#33), 655 * falling back to plaintext when none applies. Idempotent and cheap on 656 * repeat calls: ensureShikiLoaded() dedupes the fetch and 657 * ensureLanguageLoaded() memoizes per language. 658 * 659 * Callers should reach this only when the Worker cannot serve the block 660 * (#1336) — it is what injects the ~2.4MB bundle into the main thread. 661 * 662 * @param {string} language - Requested (alias-normalized) language id. 663 * @return {Promise<string>} The language id to highlight with. 664 */ 665 async prepareMainThreadHighlighter( language ) { 666 await this.ensureShikiLoaded(); 667 668 if ( await this.ensureLanguageLoaded( language ) ) { 669 return language; 670 } 671 672 const fallbackLang = this.resolveLanguageFallback( language ); 673 if ( 674 fallbackLang && 675 ( await this.ensureLanguageLoaded( fallbackLang ) ) 676 ) { 677 return fallbackLang; 678 } 679 680 return 'plaintext'; 681 }, 682 683 /** 684 * Wait until `getGFMRWorkerManager` exists, when one is expected (#1336). 685 * 686 * gfmr-main.js and gfmr-worker-manager.js are both deferred, and the 687 * first render pass starts as soon as gfmr-main.js executes — before the 688 * manager script has defined its global. Treating that instant as 689 * "workers unavailable" would send the very first blocks of every page 690 * down the main-thread path and inject the ~2.4MB bundle anyway, which 691 * is the regression #1336 exists to remove. 692 * 693 * `wpGfmWorkerConfig` is printed by wp_localize_script as a plain inline 694 * script, so it is set before any deferred script runs: its presence is 695 * a reliable "a manager is coming" signal. When it is absent (workers 696 * disabled server-side) or the environment has no Worker support, this 697 * resolves false immediately and never blocks the render. 698 * 699 * @return {Promise<boolean>} True when a worker manager can be obtained. 700 */ 701 whenWorkerManagerAvailable() { 702 if ( typeof global.getGFMRWorkerManager === 'function' ) { 703 return Promise.resolve( true ); 704 } 705 706 const config = global.wpGfmWorkerConfig; 707 if ( 708 ! config || 709 config.enabled === false || 710 typeof global.Worker === 'undefined' || 711 typeof document === 'undefined' 712 ) { 713 return Promise.resolve( false ); 714 } 715 716 if ( ! this.workerManagerReadyPromise ) { 717 this.workerManagerReadyPromise = new Promise( ( resolve ) => { 718 let timer = null; 719 const settle = () => { 720 document.removeEventListener( 721 'gfmrWorkerManagerReady', 722 settle 723 ); 724 if ( timer ) { 725 global.clearTimeout( timer ); 726 timer = null; 727 } 728 resolve( 729 typeof global.getGFMRWorkerManager === 'function' 730 ); 731 }; 732 733 document.addEventListener( 734 'gfmrWorkerManagerReady', 735 settle 736 ); 737 // Bounded so a manager script that never loads (404, CSP, 738 // blocked by an optimizer plugin) degrades to the 739 // main-thread highlighter instead of stalling the render. 740 timer = global.setTimeout( 741 settle, 742 this.WORKER_MANAGER_WAIT_MS 743 ); 744 } ); 745 } 746 747 return this.workerManagerReadyPromise; 748 }, 749 750 /** 751 * Decide whether a block can be highlighted by the Worker alone (#1336). 752 * 753 * Before this, highlightCodeBlock() called ensureShikiLoaded() 754 * unconditionally, so every page with a code block parsed and 755 * initialized the ~2.4MB Shiki bundle on the main thread *and* again 756 * inside the Worker — the exact main-thread cost #616 introduced the 757 * Worker to avoid. Language existence, alias normalization and the 758 * approximate-grammar fallback (#33) are all resolved worker-side from 759 * the maps injected at init, so nothing here needs a main-thread 760 * highlighter. 761 * 762 * Short blocks (below the worker threshold, #917) still prefer the main 763 * thread — but only when the highlighter is already in memory. When it 764 * is not, a postMessage round-trip is far cheaper than loading the 765 * bundle, so the block is forced onto the Worker instead. 766 * 767 * @param {string} code - Source of the block about to be highlighted. 768 * @return {Promise<{useWorker: boolean, forceWorker: boolean}>} Plan. 769 */ 770 async resolveWorkerPlan( code ) { 771 const mainThreadPlan = { useWorker: false, forceWorker: false }; 772 773 if ( ! ( await this.whenWorkerManagerAvailable() ) ) { 774 return mainThreadPlan; 775 } 776 777 let manager; 778 try { 779 manager = await global.getGFMRWorkerManager(); 780 } catch ( error ) { 781 return mainThreadPlan; 782 } 783 784 // No manager (workers unsupported/disabled/misconfigured) or a 785 // permanently failed init: the main thread is the only renderer. 786 if ( ! manager || manager.initFailed ) { 787 return mainThreadPlan; 788 } 789 790 const threshold = Number( manager.config?.threshold ) || 0; 791 if ( threshold > 0 ) { 792 const lineCount = ( code.match( /\n/g ) || [] ).length + 1; 793 if ( lineCount < threshold ) { 794 if ( this.shikiLoaded && global.wpGfmShikiHighlighter ) { 795 return mainThreadPlan; 796 } 797 return { useWorker: true, forceWorker: true }; 798 } 799 } 800 801 return { useWorker: true, forceWorker: false }; 802 }, 803 804 /** 517 805 * Scan the page for the languages used by visible code blocks (#621). 518 806 * … … 866 1154 } 867 1155 868 // On-demand grammar registration (#621). Mermaid is handled by 869 // its own renderer below, so leave it untouched; for every real 870 // code language ensure Shiki itself is loaded first (#617 — the 871 // upfront preload is gone, so the highlighter may not exist yet), 872 // then load the grammar lazily and fall back to plaintext when 873 // the bundle does not ship it. 1156 // Worker-first loading discipline (#1336). Mermaid is handled by 1157 // its own renderer below, so leave it untouched. For every real 1158 // code language, ask whether the Worker can serve this block; if 1159 // it can, the main-thread Shiki bundle is never injected and the 1160 // Worker resolves aliases/grammars/fallbacks itself. Only when 1161 // the Worker cannot serve it do we lazily load the main-thread 1162 // highlighter (#617) and resolve the grammar here — approximating 1163 // languages the bundle does not ship with a similar grammar 1164 // (Issue #33), e.g. vue/svelte/astro → html, and dropping to 1165 // plaintext only when no fallback grammar applies. 1166 // `language` stays the article's declared id on both paths so it 1167 // matches what data-gfmr-language stores below (#1388) — the 1168 // Worker never resolves an #33 fallback back into it, so the 1169 // main thread must not either. `renderLanguage` is the id 1170 // actually handed to the highlighter; it only diverges from 1171 // `language` on the main-thread path, when 1172 // prepareMainThreadHighlighter() substitutes an approximate 1173 // grammar (#33) for a language the bundle does not ship. 1174 let renderLanguage = language; 1175 let workerPlan = { useWorker: false, forceWorker: false }; 874 1176 if ( language !== 'mermaid' ) { 875 await this.ensureShikiLoaded(); 876 877 // Approximate languages the bundle does not ship with a 878 // similar grammar (Issue #33), e.g. vue/svelte/astro → html, 879 // instead of dropping straight to plaintext. Only when no 880 // fallback grammar is available do we fall back to plaintext. 881 if ( ! ( await this.ensureLanguageLoaded( language ) ) ) { 882 const fallbackLang = 883 this.resolveLanguageFallback( language ); 884 if ( 885 fallbackLang && 886 ( await this.ensureLanguageLoaded( fallbackLang ) ) 887 ) { 888 language = fallbackLang; 889 } else { 890 language = 'plaintext'; 891 } 892 } 893 } 1177 workerPlan = await this.resolveWorkerPlan( code ); 1178 if ( ! workerPlan.useWorker ) { 1179 renderLanguage = 1180 await this.prepareMainThreadHighlighter( language ); 1181 } 1182 } 1183 // Whether a highlighter (worker or main thread) can render this 1184 // block. Kept independent of `global.wpGfmShikiHighlighter` so 1185 // the worker path is not gated on a main-thread bundle that 1186 // deliberately never loads (#1336). 1187 const canHighlight = () => 1188 workerPlan.useWorker || !! global.wpGfmShikiHighlighter; 894 1189 895 1190 // Get saved theme from parent container's data attribute … … 997 1292 ); 998 1293 999 if ( global.wpGfmShikiHighlighter&& plainText.trim() ) {1294 if ( canHighlight() && plainText.trim() ) { 1000 1295 try { 1001 1296 if ( global.wpGfmConfig?.debug ) { … … 1005 1300 ); 1006 1301 } 1007 const highlighted = await this.highlightCodeToHtml( 1008 plainText, 1009 language, 1010 currentTheme 1011 ); 1302 const highlighted = 1303 await this.renderHighlightedHtml( 1304 plainText, 1305 renderLanguage, 1306 currentTheme, 1307 workerPlan 1308 ); 1012 1309 if ( ! highlighted ) { 1013 1310 throw new Error( … … 1066 1363 ); 1067 1364 1068 // Apply diff highlighting if language is diff 1069 if ( language === 'diff' ) { 1365 // Apply diff highlighting if language is diff. 1366 // Uses renderLanguage (the grammar actually 1367 // rendered), not language (the declared id): 1368 // this decides how to post-process Shiki's 1369 // output, not what identity to remember (#1388). 1370 if ( renderLanguage === 'diff' ) { 1070 1371 this.applyDiffHighlighting( container ); 1071 1372 } … … 1259 1560 } 1260 1561 1261 if ( global.wpGfmShikiHighlighter) {1562 if ( canHighlight() ) { 1262 1563 // Shiki highlighting with language support check 1263 1564 try { 1264 const highlighted = await this. highlightCodeToHtml(1565 const highlighted = await this.renderHighlightedHtml( 1265 1566 code, 1266 language, 1267 currentTheme 1567 renderLanguage, 1568 currentTheme, 1569 workerPlan 1268 1570 ); 1269 1571 if ( ! highlighted ) { … … 1375 1677 1376 1678 // Apply diff highlighting if language is diff 1377 if ( language === 'diff' ) { 1679 // (renderLanguage, not language — see the other 1680 // applyDiffHighlighting() call above, #1388). 1681 if ( renderLanguage === 'diff' ) { 1378 1682 this.applyDiffHighlighting( newPre ); 1379 1683 } … … 1473 1777 * (#616) 1474 1778 * 1475 * @param {string} code Source code to highlight. 1476 * @param {string} language Resolved language identifier. 1477 * @param {string} theme Resolved Shiki theme name. 1779 * @param {string} code Source code to highlight. 1780 * @param {string} language Resolved language identifier. 1781 * @param {string} theme Resolved Shiki theme name. 1782 * @param {Object} options Worker plan from resolveWorkerPlan() (#1336). 1783 * @param {boolean} options.forceWorker Bypass the worker line-count 1784 * threshold because the main-thread bundle is not loaded. 1478 1785 * @return {Promise<string|null>} Highlighted `<pre>` HTML, or null when 1479 1786 * no highlighter is available. 1480 1787 */ 1481 async highlightCodeToHtml( code, language, theme ) {1788 async highlightCodeToHtml( code, language, theme, options = {} ) { 1482 1789 // Worker-first: keep Shiki parsing off the main thread to improve 1483 1790 // TBT/INP. getGFMRWorkerManager() resolves to a shared manager (or … … 1490 1797 code, 1491 1798 language, 1492 theme 1799 theme, 1800 { forceWorker: !! options.forceWorker } 1493 1801 ); 1494 if ( result && ! result.fallback && result.html ) { 1495 return result.html; 1802 if ( result && result.html ) { 1803 // A `fallback: true` result that still carries HTML 1804 // is the Worker's own plaintext render (plaintext 1805 // fence, or a grammar with no approximate fallback). 1806 // That markup is already valid and escaped, so 1807 // re-doing it on the main thread is only worth it 1808 // when the highlighter is already in memory — never 1809 // worth injecting the ~2.4MB bundle for (#1336). 1810 // The manager's own `_fallbackResult` (threshold / 1811 // initFailed) carries no HTML and still falls 1812 // through to the main thread below. 1813 if ( 1814 ! result.fallback || 1815 ! global.wpGfmShikiHighlighter 1816 ) { 1817 return result.html; 1818 } 1496 1819 } 1497 1820 } … … 1505 1828 1506 1829 // Main-thread fallback (worker unavailable or signalled fallback). 1830 // This method never loads Shiki itself; a worker-first caller that 1831 // gets null here brings the bundle up via renderHighlightedHtml() 1832 // and retries (#1336). 1507 1833 if ( global.wpGfmShikiHighlighter ) { 1508 1834 return global.wpGfmShikiHighlighter.codeToHtml( code, { 1509 1835 lang: language, 1836 theme, 1837 } ); 1838 } 1839 1840 return null; 1841 }, 1842 1843 /** 1844 * Highlight a block, lazily loading main-thread Shiki only if needed. 1845 * 1846 * Worker-first (#1336): highlightCodeToHtml() returns null when the 1847 * Worker could not serve the block (unsupported grammar, plaintext 1848 * fallback, init failure) *and* no main-thread highlighter exists — 1849 * which is the normal state on a worker-first page, because the ~2.4MB 1850 * bundle is deliberately never injected. Only in that case do we load 1851 * it, register the grammar (with the #33 approximate fallback), and 1852 * retry once. 1853 * 1854 * @param {string} code Source code to highlight. 1855 * @param {string} language Resolved language identifier. 1856 * @param {string} theme Resolved Shiki theme name. 1857 * @param {Object} workerPlan Plan from resolveWorkerPlan(). 1858 * @return {Promise<string|null>} Highlighted `<pre>` HTML, or null. 1859 */ 1860 async renderHighlightedHtml( code, language, theme, workerPlan ) { 1861 const html = await this.highlightCodeToHtml( 1862 code, 1863 language, 1864 theme, 1865 workerPlan 1866 ); 1867 1868 if ( html || ! workerPlan?.useWorker ) { 1869 return html; 1870 } 1871 1872 const mainThreadLanguage = 1873 await this.prepareMainThreadHighlighter( language ); 1874 1875 if ( global.wpGfmShikiHighlighter ) { 1876 return global.wpGfmShikiHighlighter.codeToHtml( code, { 1877 lang: mainThreadLanguage, 1510 1878 theme, 1511 1879 } ); … … 1720 2088 1721 2089 async renderMermaidDiagram( element ) { 2090 // Issue #1340: Mermaid boots a layout engine. Every render path — 2091 // the initial pass, the lazy IntersectionObserver, the theme-mismatch 2092 // re-render inside highlightCodeBlock() — funnels through here, so 2093 // this is the single seam that holds diagrams while the document is 2094 // prerendered. The element itself is the dedupe key, so a block seen 2095 // by several passes is still rendered once on activation. 2096 if ( this.isPrerenderingDocument() ) { 2097 // Issue #1394: hold the render, but not the layout. A prerendered 2098 // document is the one chance to settle geometry before the 2099 // visitor ever looks at the page, so reserve the diagram box now 2100 // — otherwise every held block expands at once on activation, 2101 // which is the worst possible moment for a layout shift. The 2102 // observer that used to be the sole caller of this only runs on 2103 // pages past LAZY_LOAD_THRESHOLD, and even there skips the first 2104 // IMMEDIATE_PROCESS_COUNT blocks, so the diagrams a visitor sees 2105 // first got no reservation at all. Idempotent via 2106 // data-gfmr-lazy-styled, so the observer path may still hit the 2107 // same container later. 2108 this.reserveLazyPlaceholder( element, 'mermaid' ); 2109 this.deferWhilePrerendering( element, () => 2110 this.renderMermaidDiagram( element ) 2111 ); 2112 return undefined; 2113 } 2114 1722 2115 if ( global.wpGfmMermaidRenderer ) { 1723 2116 const result = … … 2659 3052 await this.processAllCodeBlocks(); 2660 3053 } 2661 await this.processAllMermaidDiagrams(); 3054 // Issue #1340: diagram work in freshly inserted content is held 3055 // until activation for the same reasons as the initial pass. 3056 await this.deferWhilePrerendering( 'new-content-mermaid', () => 3057 this.processAllMermaidDiagrams() 3058 ); 2662 3059 2663 3060 // Process PlantUML diagrams in new content 2664 await this.processPlantUMLDiagrams( 'new content' ); 3061 await this.deferWhilePrerendering( 'new-content-plantuml', () => 3062 this.processPlantUMLDiagrams( 'new content' ) 3063 ); 2665 3064 2666 3065 // Process math formulas in new content … … 2679 3078 // Process chart content in new content 2680 3079 if ( this.hasChartContent() ) { 2681 try { 2682 await this.loadGfmrCharts(); 2683 if ( global.wpGfmCharts ) { 2684 await global.wpGfmCharts.processAllCharts(); 3080 await this.deferWhilePrerendering( 3081 'new-content-charts', 3082 async () => { 3083 try { 3084 await this.loadGfmrCharts(); 3085 if ( global.wpGfmCharts ) { 3086 await global.wpGfmCharts.processAllCharts(); 3087 } 3088 } catch ( error ) { 3089 console.error( 3090 '[WP GFM v2 Hotfix] Chart processing in new content failed:', 3091 error 3092 ); 3093 } 2685 3094 } 2686 } catch ( error ) { 2687 console.error( 2688 '[WP GFM v2 Hotfix] Chart processing in new content failed:', 2689 error 2690 ); 2691 } 3095 ); 2692 3096 } 2693 3097 } finally { … … 2803 3207 } 2804 3208 2805 // Initialize and process charts if chart content exists 3209 // Initialize and process charts if chart content exists. 3210 // Issue #1340: Chart.js rendering is diagram work, so it waits for 3211 // prerender activation like Mermaid and PlantUML do. 2806 3212 if ( hasCharts ) { 2807 try { 2808 await this.loadGfmrCharts(); 2809 if ( global.wpGfmCharts ) { 2810 await global.wpGfmCharts.processAllCharts(); 3213 await this.deferWhilePrerendering( 'charts', async () => { 3214 try { 3215 await this.loadGfmrCharts(); 3216 if ( global.wpGfmCharts ) { 3217 await global.wpGfmCharts.processAllCharts(); 3218 } 3219 } catch ( error ) { 3220 console.error( 3221 '[WP GFM v2 Hotfix] Chart initialization failed:', 3222 error 3223 ); 2811 3224 } 2812 } catch ( error ) { 2813 console.error( 2814 '[WP GFM v2 Hotfix] Chart initialization failed:', 2815 error 2816 ); 2817 } 3225 } ); 2818 3226 } 2819 3227 … … 2821 3229 // before this main script ran (handler-first load order). 2822 3230 // For handler-after-main scenarios, gfmr-plantuml-handler.js auto-renders on init. 2823 await this.processPlantUMLDiagrams(); 3231 // Issue #1340: PlantUML rendering is an external-server round-trip, 3232 // which must not fire for a page the visitor may never open. 3233 await this.deferWhilePrerendering( 'plantuml', () => 3234 this.processPlantUMLDiagrams() 3235 ); 2824 3236 2825 3237 // Start monitoring new content -
markdown-renderer-for-github/trunk/assets/js/gfmr-main.min.js
r3644434 r3657956 1 (function(i){"use strict";if(i.gfmrMainInitialized)return;i.gfmrMainInitialized=!0,i.wpGfmConfig?.debug&&console.log("[GFMR Main] Initialization started");function G(e){let r=window.wpGfmConfig?.pluginUrl;if(!r){const o=document.currentScript;if(o&&o.src){const f=o.src.match(/(.+\/wp-content\/plugins\/[^/]+)/);r=f?f[1]+"/":"/wp-content/plugins/markdown-renderer-for-github/"}else r="/wp-content/plugins/markdown-renderer-for-github/";i.wpGfmConfig?.debug&&console.log("[WP GFM] Using fallback base URL:",r)}const t=r.replace(/\/+$/,""),s=e.replace(/^\/+/,"");return`${t}/${s}`}i.wpGfmBuildAssetUrl||(i.wpGfmBuildAssetUrl=G);function v(e){const r=i.wpGfmConfig?.assetSuffix||"";return G(r?e.replace(/\.(js|css)$/,`${r}.$1`):e)}let m=null,y=null;function S(){if(m&&m.isConnected)return m;if(!document.body)return null;const e=document.getElementById("gfmr-announcer");if(e)return m=e,m;const r=document.createElement("div");return r.id="gfmr-announcer",r.setAttribute("aria-live","polite"),r.setAttribute("aria-atomic","true"),r.className="gfmr-sr-only",document.body.appendChild(r),m=r,m}function x(e,r="polite"){if(!e)return!1;const t=S();return t?(t.setAttribute("aria-live",r),t.textContent=e,y&&clearTimeout(y),y=setTimeout(()=>{t.textContent="",y=null},1e3),!0):!1}i.wpGfmAnnounce||(i.wpGfmAnnounce=x);function E(){const e=["github","obsidian","vscode","technical-book"],r=i.wpGfmConfig&&typeof i.wpGfmConfig.markdownStylePreset=="string"?i.wpGfmConfig.markdownStylePreset:"github";return e.includes(r)?r:"github"}function A(){if(!document.body)return;const e=i.wpGfmConfig&&i.wpGfmConfig.theme;if(e){let r="light";e.system_auto?r="auto":e.current==="dark"?r="dark":e.current==="light"&&(r="light"),document.body.setAttribute("data-gfmr-theme",r)}document.body.setAttribute("data-gfmr-style-preset",E())}function L(e){typeof i.scheduler<"u"&&typeof i.scheduler.postTask=="function"?i.scheduler.postTask(e,{priority:"user-visible"}):typeof i.requestIdleCallback=="function"?i.requestIdleCallback(e,{timeout:200}):i.setTimeout(e,0)}const M={shikiLoaded:!1,shikiLoadPromise:null,processedElements:new WeakSet,isProcessing:!1,initialized:!1,languageLoadPromises:new Map,CODE_BLOCK_SELECTORS:['pre code:not([data-ssr="true"])','.wp-block-code code:not([data-ssr="true"])','[class^="language-"]:not([data-ssr="true"])','[class*=" language-"]:not([data-ssr="true"])'],CODE_CONTENT_DETECT_SELECTOR:'code, pre, [class^="language-"], [class*=" language-"]',PRERENDERED_CONTAINER_SELECTOR:'[data-gfmr-prerendered="true"]',isPrerendered(e){return!!(e&&typeof e.closest=="function"&&e.closest(this.PRERENDERED_CONTAINER_SELECTOR))},isFinalizedBlock(e){return!e||typeof e.closest!="function"?!1:!!(this.isPrerendered(e)||e.closest('[data-ssr="true"]')||e.closest(".gfmr-markdown-source"))},LAZY_LOAD_THRESHOLD:5,IMMEDIATE_PROCESS_COUNT:3,lazyLoadObserver:null,LAZY_CODE_LINE_HEIGHT_EM:1.45,LAZY_DIAGRAM_INTRINSIC_HEIGHT:"320px",async loadShiki(){if(i.shiki&&i.wpGfmShikiHighlighter){this.shikiLoaded=!0,i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Shiki already loaded");return}return i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Loading Shiki..."),new Promise((e,r)=>{const t=document.createElement("script");t.src=G("assets/libs/shiki/shiki.min.js"),t.onload=async()=>{try{let s;i.wpGfmThemeResolver?(s=i.wpGfmThemeResolver.resolveTheme(),i.wpGfmThemeResolver.applyThemeClasses()):(s=window.wpGfmConfig?.theme?.shiki_theme??(window.matchMedia?.("(prefers-color-scheme: dark)").matches?"github-dark":"github-light"),s==="auto"&&(s=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"github-dark":"github-light")),i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Using Shiki theme:",s),i.wpGfmShikiHighlighter=await i.shiki.createHighlighter({themes:["github-light","github-dark",...this._customThemeObjects()],langs:[]}),this.shikiLoaded=!0,await this.preloadPageLanguages(),i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Shiki loading completed"),e()}catch(s){console.error("[WP GFM v2 Hotfix] Shiki initialization error:",s),r(s)}},t.onerror=s=>{console.error("[WP GFM v2 Hotfix] Shiki loading failed:",s),console.error("Script URL:",t.src),e()},document.head.appendChild(t)})},_customThemeObjects(){const e=i.wpGfmConfig?.theme?.customThemes;return Array.isArray(e)?e.filter(r=>r&&r.theme&&typeof r.theme=="object").map(r=>r.theme):[]},ensureShikiLoaded(){return this.shikiLoaded&&i.wpGfmShikiHighlighter?Promise.resolve():(this.shikiLoadPromise||(this.shikiLoadPromise=this.loadShiki().catch(e=>{throw this.shikiLoadPromise=null,e})),this.shikiLoadPromise)},collectPageLanguages(){const e=window.wpGfmLanguageDetector,r=document.querySelectorAll(this.CODE_BLOCK_SELECTORS.join(", ")),t=new Set;for(const s of r){if(this.isPrerendered(s)||e?.isMermaidBlock?.(s)||e?.isPlantUMLBlock?.(s)||this.isChartBlock(s)||this.isMathBlock(s))continue;let o=this.detectLanguage(s);o=window.GFMR_LANG_ALIASES?.[o]||o,o=this.resolveLanguageFallback(o)||o,!(!o||o==="plaintext"||o==="text")&&t.add(o)}return Array.from(t)},async preloadPageLanguages(){const e=this.collectPageLanguages();e.length!==0&&(i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Initial-loading ${e.length} page language(s):`,e.join(", ")),await Promise.all(e.map(r=>this.ensureLanguageLoaded(r))))},ensureLanguageLoaded(e){const r=i.wpGfmShikiHighlighter;if(!r||!e||e==="plaintext"||e==="text")return Promise.resolve(!0);const t=this.languageLoadPromises.get(e);if(t)return t;const s=(async()=>{try{return await r.loadLanguage(e),!0}catch(o){return console.warn(`[WP GFM v2 Hotfix] Language "${e}" not available, falling back to plaintext:`,o?.message),!1}})();return this.languageLoadPromises.set(e,s),s},resolveLanguageFallback(e){return e&&(typeof window<"u"&&window.GFMR_LANG_FALLBACKS||{})[e.toLowerCase()]||null},detectLanguage(e){if(window.wpGfmLanguageDetector)return window.wpGfmLanguageDetector.detectLanguage(e);const t=(e.className||"").match(/language-(\w+)/);return t?t[1]:"plaintext"},isChartBlock(e){return!!(e&&e.classList&&(e.classList.contains("language-chart")||e.classList.contains("language-chart-pro")))},isMathBlock(e){return!!e?.closest?.("code.language-math, pre.language-math")},isAlreadyHighlighted(e){if(window.wpGfmLanguageDetector)return window.wpGfmLanguageDetector.isAlreadyHighlighted(e);const r=e.querySelector('span.line, span[style*="color:"]'),t=e.classList.contains("hljs")||e.classList.contains("shiki");return!!(r||t)},applyDiffHighlighting(e){const r=e.querySelector("code");if(!r)return;const t=r.querySelectorAll(".line");if(t.length===0)return;t.forEach(o=>{const a=(o.textContent||"").trim();if(!a){o.remove();return}a.startsWith("+")&&!a.startsWith("+++")?o.classList.add("diff","add"):a.startsWith("-")&&!a.startsWith("---")?o.classList.add("diff","remove"):a.startsWith("@@")&&o.classList.add("diff","hunk")}),Array.from(r.childNodes).forEach(o=>{o.nodeType===Node.TEXT_NODE&&o.remove()}),e.classList.add("has-diff")},replaceContainerContent(e,r){e.replaceChildren(...r.childNodes),e.className=r.className},async highlightCodeBlock(e){if(!this.processedElements.has(e))try{const r=e.textContent||"";let t=window.wpGfmLanguageDetector.detectLanguage(e);if(t==="patch"&&(t="diff"),t==="plantuml"||t==="puml"){i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Skipping ${t} block - handled by PlantUML handler`);return}if(t==="math"){i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Skipping math block - handled by KaTeX renderer");return}if(window.wpGfmLanguageDetector?.isPlantUMLBlock(e)){i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Skipping PlantUML block (content-based detection)");return}if(!r.trim())return;if(t!=="mermaid"&&(await this.ensureShikiLoaded(),!await this.ensureLanguageLoaded(t))){const f=this.resolveLanguageFallback(t);f&&await this.ensureLanguageLoaded(f)?t=f:t="plaintext"}const o=e.closest(".gfmr-markdown-rendered")?.getAttribute("data-shiki-theme")||"";let a;if(i.wpGfmThemeResolver?a=i.wpGfmThemeResolver.resolveTheme():(a=window.wpGfmConfig?.theme?.shiki_theme??(window.matchMedia?.("(prefers-color-scheme: dark)").matches?"github-dark":"github-light"),a==="auto"&&(a=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"github-dark":"github-light")),window.wpGfmLanguageDetector.isAlreadyHighlighted(e)&&t!=="plaintext"){const f=e.getAttribute("data-gfmr-language")||e.className.match(/language-(\w+)/)?.[1]||"";if(o&&o===a&&f===t){i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Theme and language match (${o}, ${t}), skipping re-render`),this.processedElements.add(e),e.setAttribute("data-gfmr-processed","true"),e.setAttribute("data-gfmr-language",t);const c=e.closest("pre")||e.parentElement;c&&(c.style.visibility="visible",c.style.opacity="1");return}if(i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Already highlighted, reprocessing (saved: ${o}, current: ${a}): ${t}`),t==="mermaid"){i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Adding Mermaid element to processing queue"),await this.renderMermaidDiagram(e);return}i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Executing re-highlighting: ${t}`);const n=window.wpGfmLanguageDetector.extractPlainTextFromHighlighted(e);if(i.wpGfmShikiHighlighter&&n.trim())try{i.wpGfmConfig?.debug&&console.log(`[DEBUG] Text sent to Shiki (${t}):`,n.substring(0,300)+"...");const c=await this.highlightCodeToHtml(n,t,a);if(!c)throw new Error("Highlighter returned no output");i.wpGfmConfig?.debug&&console.log(`[DEBUG] Re-highlighting successful: ${t}`),i.wpGfmConfig?.debug&&console.log("[DEBUG] Generated HTML:",c.substring(0,200)+"...");const h=document.createElement("div");h.innerHTML=c;const p=h.querySelector("pre");if(p&&e.parentElement){const d=e.closest("pre")||e.parentElement;if(i.wpGfmConfig?.debug&&console.log("[DEBUG] Container before update:",d.outerHTML.substring(0,200)+"..."),d.parentNode){const g=d.className.replace(/github-light/g,"").replace(/github-dark/g,"").replace(/shiki/g,"").trim();if(p.className=`shiki ${a} ${g}`.trim(),this.replaceContainerContent(d,p),t==="diff"&&this.applyDiffHighlighting(d),d.style.cssText=p.style.cssText||"",a.startsWith("custom:"))d.style.backgroundColor&&d.style.setProperty("background-color",d.style.backgroundColor,"important"),d.style.color&&d.style.setProperty("color",d.style.color,"important");else{const l=a.includes("light"),C=l?"#f6f8fa":"#24292e",T=l?"#24292f":"#e1e4e8";d.style.setProperty("background-color",C,"important"),d.style.setProperty("color",T,"important")}d.style.setProperty("font-size","14px","important"),d.style.setProperty("line-height","1.45","important"),d.style.setProperty("font-family","SFMono-Regular, Consolas, Liberation Mono, Menlo, Monaco, Courier New, monospace","important"),d.style.setProperty("border-radius","6px","important"),d.style.setProperty("padding","16px","important"),d.querySelectorAll("code, span").forEach(l=>{l.style.color&&l.style.setProperty("color",l.style.color,"important"),l.style.backgroundColor&&l.style.setProperty("background-color","transparent","important")}),i.wpGfmConfig?.debug&&console.log("[DEBUG] Container after update:",d.outerHTML.substring(0,200)+"...");const u=d.querySelector("code")||d;this.processedElements.add(u),u.setAttribute("data-gfmr-processed","true"),u.setAttribute("data-gfmr-language",t);const w=u.closest("pre")||u.parentElement;w&&(w.style.visibility="visible",w.style.opacity="1"),i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Re-highlighting completed: ${t}`),this.addCopyButton(d,n),d.querySelectorAll('span[style*="color"]').forEach(l=>{const C=l.style.color;C&&(l.style.setProperty("color",C,"important"),l.style.setProperty("font-weight","inherit","important"))});return}}}catch(c){console.warn(`[DEBUG] Re-highlighting failed (${t}):`,c)}this.processedElements.add(e),e.setAttribute("data-gfmr-processed","true"),e.setAttribute("data-gfmr-language",t);return}if(i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Highlighting process: ${t}`),i.wpGfmShikiHighlighter)try{const f=await this.highlightCodeToHtml(r,t,a);if(!f)throw new Error("Highlighter returned no output");i.wpGfmConfig?.debug&&console.log(`[DEBUG] Shiki highlighting successful: ${t}`);const n=document.createElement("div");n.innerHTML=f;const c=n.querySelector("pre");if(c&&e.parentElement){const h=e.closest("pre")||e.parentElement;if(h.parentNode){const p=h.className.replace(/github-light/g,"").replace(/github-dark/g,"").replace(/shiki/g,"").trim();if(c.className=`shiki ${a} ${p}`.trim(),a.startsWith("custom:"))c.style.backgroundColor&&c.style.setProperty("background-color",c.style.backgroundColor,"important"),c.style.color&&c.style.setProperty("color",c.style.color,"important");else{const k=a.includes("light"),u=k?"#f6f8fa":"#24292e",w=k?"#24292f":"#e1e4e8";c.style.setProperty("background-color",u,"important"),c.style.setProperty("color",w,"important")}c.style.setProperty("font-size","14px","important"),c.style.setProperty("line-height","1.45","important"),c.style.setProperty("font-family","SFMono-Regular, Consolas, Liberation Mono, Menlo, Monaco, Courier New, monospace","important"),c.style.setProperty("border-radius","6px","important"),c.style.setProperty("padding","16px","important"),h.parentNode.replaceChild(c,h),t==="diff"&&this.applyDiffHighlighting(c);const d=c.querySelector("code")||c;this.processedElements.add(d),d.setAttribute("data-gfmr-processed","true"),d.setAttribute("data-gfmr-language",t);const g=d.closest("pre")||d.parentElement;g&&(g.style.visibility="visible",g.style.opacity="1"),i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Highlighting completed: ${t}`),this.addCopyButton(c,r)}}}catch{console.debug(`[GFMR] Shiki: Language not supported: ${t}`),this.processedElements.add(e),e.setAttribute("data-gfmr-processed","true");const n=e.closest("pre")||e.parentElement;n&&(n.style.visibility="visible",n.style.opacity="1")}else{this.processedElements.add(e),e.setAttribute("data-gfmr-processed","true");const f=e.closest("pre")||e.parentElement;f&&(f.style.visibility="visible",f.style.opacity="1")}}catch(r){console.error("[WP GFM v2 Hotfix] Highlighting error:",r),this.processedElements.add(e),e.setAttribute("data-gfmr-processed","true");const t=e.closest("pre")||e.parentElement;t&&(t.style.visibility="visible",t.style.opacity="1")}},async highlightCodeToHtml(e,r,t){if(typeof i.getGFMRWorkerManager=="function")try{const s=await i.getGFMRWorkerManager();if(s){const o=await s.highlightCode(e,r,t);if(o&&!o.fallback&&o.html)return o.html}}catch(s){console.debug("[GFMR] Worker highlight failed, using main thread:",s)}return i.wpGfmShikiHighlighter?i.wpGfmShikiHighlighter.codeToHtml(e,{lang:r,theme:t}):null},revealFallbackElement(e,r="pipeline-fallback"){if(!e||typeof e.setAttribute!="function"||this.isPrerendered(e)||e.getAttribute("data-ssr")==="true"||e.closest?.(".gfmr-markdown-source"))return;this.processedElements.add(e),e.setAttribute("data-gfmr-processed","true"),e.setAttribute("data-gfmr-fallback",r),e.removeAttribute("data-gfmr-lazy"),e.removeAttribute("data-gfmr-lazy-type");const t=e.closest?.("pre")||e.parentElement;t&&(t.style.visibility="visible",t.style.opacity="1",t.style.contentVisibility="visible",t.removeAttribute("data-gfmr-lazy-styled"))},revealUnprocessedContent(e="pipeline-fallback",r=[this.CODE_BLOCK_SELECTORS.join(", "),'.gfmr-mermaid-container:not([data-ssr="true"])'].join(", ")){document.querySelectorAll(r).forEach(s=>{s.hasAttribute("data-gfmr-processed")||this.revealFallbackElement(s,e)})},collectScopedElements(e,r){const t=e||document,s=Array.from(t.querySelectorAll(r));return t.nodeType===Node.ELEMENT_NODE&&typeof t.matches=="function"&&t.matches(r)&&s.unshift(t),s},async processAllCodeBlocks(e=document){const r=this.collectScopedElements(e,this.CODE_BLOCK_SELECTORS.join(", "));i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Found ${r.length} code blocks (SSR-rendered excluded)`);for(const t of r){if(t.hasAttribute("data-gfmr-processed")||this.isPrerendered(t)||t.getAttribute("data-ssr")==="true")continue;if(t.closest('pre[data-ssr="false"]')&&i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Processing SSR fallback code block"),t.closest(".gfmr-markdown-source")){i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Skipping code blocks within Markdown source");continue}if(t.closest(".gfmr-markdown-container")&&!t.closest(".gfmr-markdown-rendered")){i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Within Markdown container but outside rendering element, skipping processing");continue}window.wpGfmLanguageDetector?.isMermaidBlock(t)||window.wpGfmLanguageDetector?.isPlantUMLBlock(t)||this.isChartBlock(t)||this.isMathBlock(t)||await this.highlightCodeBlock(t)}},async loadMermaid(){if(i.wpGfmMermaidRenderer)return i.wpGfmMermaidRenderer.loadMermaid();console.warn("[GFMR Main] wpGfmMermaidRenderer not available")},get mermaidLoaded(){return!!(i.wpGfmMermaidRenderer&&i.mermaid?.render)},async renderMermaidDiagram(e){if(i.wpGfmMermaidRenderer){const r=await i.wpGfmMermaidRenderer.renderMermaidDiagram(e,this.processedElements);return this.expandWideMermaidDiagrams(),r}console.warn("[GFMR Main] wpGfmMermaidRenderer not available for renderMermaidDiagram"),this.revealFallbackElement(e,"mermaid-renderer-unavailable")},async processAllMermaidDiagrams(){if(i.wpGfmMermaidRenderer){const e=await i.wpGfmMermaidRenderer.processAllMermaidDiagrams(this.processedElements);return this.expandWideMermaidDiagrams(),e}console.warn("[GFMR Main] wpGfmMermaidRenderer not available for processAllMermaidDiagrams"),this.revealUnprocessedContent("mermaid-renderer-unavailable",['.gfmr-mermaid-container:not([data-ssr="true"])','code.language-mermaid:not([data-ssr="true"])','pre.language-mermaid code:not([data-ssr="true"])','pre[class*="language-mermaid"] code:not([data-ssr="true"])'].join(", "))},isMermaidBlock(e){if(i.wpGfmMermaidRenderer)return i.wpGfmMermaidRenderer.isMermaidBlock(e);const r=e.className||"";return r.includes("language-mermaid")||r.includes("mermaid")},addLightboxTrigger(e,r){if(i.wpGfmMermaidRenderer)return i.wpGfmMermaidRenderer.addLightboxTrigger(e,r);console.warn("[GFMR Main] wpGfmMermaidRenderer not available for addLightboxTrigger")},async loadKaTeX(){if(i.wpGfmMath)return i.wpGfmMath.loadKaTeX();console.warn("[GFMR Main] wpGfmMath not available for loadKaTeX")},async loadKaTeXCSS(){if(i.wpGfmMath)return i.wpGfmMath.loadKaTeXCSS();console.warn("[GFMR Main] wpGfmMath not available for loadKaTeXCSS")},get katexLoaded(){return i.wpGfmMath?i.wpGfmMath.isKaTeXLoaded():!1},repairCorruptedSvgStyles(){document.querySelectorAll("svg style").forEach(e=>{e.querySelector(".gfmr-math, .katex, .katex-error")&&(e.textContent=e.textContent)})},isWideMermaidDiagram(e){return!!e.querySelector(".journey-section, .task-line, .taskText, .taskTextOutsideRight, .exclude-range")},getWideMermaidNaturalWidth(e){const r=e.style?.maxWidth||"",t=e.getAttribute("style")||"",s=`${r};${t}`.match(/max-width\s*:\s*([0-9.]+)px/i);if(s)return parseFloat(s[1]);const o=e.getAttribute("viewBox"),a=o?o.trim().split(/[\s,]+/):[];return a.length>=4?parseFloat(a[2]):0},expandWideMermaidDiagrams(){document.querySelectorAll(".gfmr-mermaid svg").forEach(e=>{if(!this.isWideMermaidDiagram(e))return;const r=this.getWideMermaidNaturalWidth(e);if(!Number.isFinite(r)||r<=0)return;const t=e.closest(".gfmr-mermaid"),s=e.closest(".gfmr-mermaid-container, .gfmr-mermaid-container-unified"),o=s?.clientWidth||t?.clientWidth||0;o&&r<=o*1.15||(e.dataset.gfmrWideFit="true",e.setAttribute("width","100%"),e.style.setProperty("width","100%","important"),e.style.setProperty("max-width","100%","important"),e.style.setProperty("height","auto","important"),e.style.setProperty("flex","1 1 auto","important"),t&&(t.style.setProperty("width","100%","important"),t.style.setProperty("max-width","100%","important"),t.style.setProperty("flex","1 1 auto","important")),s&&(s.dataset.gfmrWideMermaidFit="true",s.style.setProperty("justify-content","center","important"),s.style.setProperty("overflow-x","hidden","important"),s.style.setProperty("overflow-y","hidden","important")))})},hasMathContent(){return this.repairCorruptedSvgStyles(),i.wpGfmMath?i.wpGfmMath.hasMathContent():!1},async renderMathFormulas(){if(i.wpGfmMath)return i.wpGfmMath.renderMathFormulas();console.warn("[GFMR Main] wpGfmMath not available for renderMathFormulas")},renderBlockMath(){if(i.wpGfmMath)return i.wpGfmMath.renderBlockMath()},renderInlineMath(){if(i.wpGfmMath)return i.wpGfmMath.renderInlineMath()},renderLatexShortcodes(){if(i.wpGfmMath)return i.wpGfmMath.renderLatexShortcodes()},addCopyButton(e,r,t){if(i.wpGfmCopyButton)return i.wpGfmCopyButton.addCopyButton(e,r,t)},themeDependentProcessedElements(){return Array.from(document.querySelectorAll("[data-gfmr-processed]")).filter(e=>!this.isFinalizedBlock(e))},resetThemeDependentBlocks(){const e=this.themeDependentProcessedElements();for(const r of e)this.processedElements.delete(r),r.removeAttribute("data-gfmr-processed");return e},async reprocessForThemeChange(){this.resetThemeDependentBlocks(),await this.processAllElementsImmediately()},setupThemeChangeListener(){if(i.wpGfmThemeResolver){i.wpGfmThemeResolver.setupThemeChangeListener(async()=>{i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] OS theme changed, re-rendering theme-dependent code blocks"),await this.reprocessForThemeChange(),i.wpGfmMermaidRenderer&&await i.wpGfmMermaidRenderer.rerenderForThemeChange(this.processedElements)});return}const e=window.wpGfmConfig?.theme?.shiki_theme,r=window.wpGfmConfig?.mermaid?.theme||"auto";if(e!=="auto"&&r!=="auto")return;i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Setting up OS theme change listener for auto mode (fallback)");const t=window.matchMedia("(prefers-color-scheme: dark)"),s=async()=>{await this.reprocessForThemeChange(),i.wpGfmMermaidRenderer&&await i.wpGfmMermaidRenderer.rerenderForThemeChange(this.processedElements)};t.addEventListener?t.addEventListener("change",s):t.addListener&&t.addListener(s)},hasChartContent(){const e=document.querySelectorAll('code[class*="language-chart"], code.language-chart, code.language-chart-pro');return Array.from(e).some(r=>!this.isPrerendered(r))},async loadGfmrCharts(){if(i.wpGfmCharts){i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Charts module already loaded");return}return i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Loading Charts module..."),new Promise((e,r)=>{const t=document.createElement("script");t.src=v("assets/js/gfmr-charts.js"),t.onload=()=>{typeof i.wpGfmInitializeCharts=="function"?(i.wpGfmInitializeCharts(),i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Charts module loaded successfully"),e()):(console.error("[WP GFM v2 Hotfix] Charts module initialization function not found"),r(new Error("Charts initialization failed")))},t.onerror=s=>{console.error("[WP GFM v2 Hotfix] Charts module loading failed:",s),r(s)},document.head.appendChild(t)})},async processPlantUMLDiagrams(e=""){if(i.wpGfmPlantUML)try{await i.wpGfmPlantUML.renderAll({lazyLoad:!0})}catch(r){const t=e?`PlantUML processing in ${e} failed:`:"PlantUML processing failed:";console.error(`[WP GFM v2 Hotfix] ${t}`,r)}},yieldToMain(){return new Promise(e=>L(e))},async processBlocksChunked(e){for(let r=0;r<e.length;r++){const{element:t,type:s}=e[r];try{s==="mermaid"?await this.renderMermaidDiagram(t):await this.highlightCodeBlock(t)}catch(o){console.error("[WP GFM v2 Hotfix] Chunked block processing failed:",o),this.revealFallbackElement(t,"chunk-error")}r<e.length-1&&await this.yieldToMain()}},async processAllElementsImmediately(){const e=document.querySelectorAll(this.CODE_BLOCK_SELECTORS.join(", ")),r=document.querySelectorAll('[class^="language-mermaid"]:not([data-ssr="true"]), [class*=" language-mermaid"]:not([data-ssr="true"]), code.language-mermaid:not([data-ssr="true"]), pre.language-mermaid code:not([data-ssr="true"]), pre[class^="language-mermaid"] code:not([data-ssr="true"]), pre[class*=" language-mermaid"] code:not([data-ssr="true"])'),t=new Set(Array.from(r)),s=document.querySelectorAll('pre:not([data-ssr="true"]), .wp-block-code code:not([data-ssr="true"]), .wp-block-code div[class^="language-"]:not([data-ssr="true"]), .wp-block-code div[class*=" language-"]:not([data-ssr="true"])');for(const n of s)t.has(n)||n.hasAttribute("data-gfmr-processed")||this.isPrerendered(n)||n.getAttribute("data-ssr")!=="true"&&(this.isMathBlock(n)||n.querySelector?.("code.language-math")||window.wpGfmLanguageDetector.isMermaidBlock(n)&&t.add(n));const o=Array.from(e).filter(n=>n.hasAttribute("data-gfmr-processed")||this.isPrerendered(n)||n.getAttribute("data-ssr")==="true"||n.closest(".gfmr-markdown-source")||window.wpGfmLanguageDetector?.isMermaidBlock(n)?!1:window.wpGfmLanguageDetector?.isPlantUMLBlock(n)?(i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Filtered out PlantUML block from Shiki processing"),!1):this.isChartBlock(n)?(i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Filtered out Chart block from Shiki processing"),!1):this.isMathBlock(n)?(i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Filtered out math fence from Shiki processing"),!1):!0),a=Array.from(t).filter(n=>!(n.hasAttribute("data-gfmr-processed")||this.isPrerendered(n)||n.getAttribute("data-ssr")==="true"||n.closest(".gfmr-markdown-source"))),f=o.length+a.length;i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Total blocks to process: ${f} (code: ${o.length}, mermaid: ${a.length})`),f>this.LAZY_LOAD_THRESHOLD?(i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Using lazy loading (threshold: ${this.LAZY_LOAD_THRESHOLD})`),await this.processWithLazyLoading(o,a)):await this.processBlocksChunked([...o.map(n=>({element:n,type:"code"})),...a.map(n=>({element:n,type:"mermaid"}))]),i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Ultra-fast immediate processing completed")},async processWithLazyLoading(e,r){const t=[...e.map(a=>({element:a,type:"code"})),...r.map(a=>({element:a,type:"mermaid"}))],s=t.slice(0,this.IMMEDIATE_PROCESS_COUNT),o=t.slice(this.IMMEDIATE_PROCESS_COUNT);i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Processing ${s.length} blocks immediately, ${o.length} deferred`),await this.processBlocksChunked(s),o.length>0&&this.setupLazyLoadObserver(o)},setupLazyLoadObserver(e){this.lazyLoadObserver&&this.lazyLoadObserver.disconnect(),this.lazyLoadObserver=new IntersectionObserver(r=>{r.forEach(t=>{if(t.isIntersecting){const s=t.target,o=s.getAttribute("data-gfmr-lazy-type");this.lazyLoadObserver.unobserve(s),s.removeAttribute("data-gfmr-lazy-type"),s.removeAttribute("data-gfmr-lazy"),o==="mermaid"?this.renderMermaidDiagram(s):this.highlightCodeBlock(s),i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Lazy loaded ${o} block on viewport entry`)}})},{rootMargin:"600px 0px",threshold:0}),e.forEach(({element:r,type:t})=>{r.setAttribute("data-gfmr-lazy","true"),r.setAttribute("data-gfmr-lazy-type",t),this.reserveLazyPlaceholder(r,t),this.lazyLoadObserver.observe(r)}),i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] IntersectionObserver setup for ${e.length} blocks`)},estimateCodeLineCount(e){const t=(e&&e.textContent||"").replace(/\n$/,"");return t===""?1:t.split(`2 `).length},reserveLazyPlaceholder(e,r){const t=e.closest("pre")||e.parentElement;if(!t||t.hasAttribute("data-gfmr-lazy-styled"))return;if(t.setAttribute("data-gfmr-lazy-styled","true"),t.style.contentVisibility="auto",r==="mermaid"){t.style.containIntrinsicSize="auto "+this.LAZY_DIAGRAM_INTRINSIC_HEIGHT,t.style.minHeight="3em";return}const o=(this.estimateCodeLineCount(e)*this.LAZY_CODE_LINE_HEIGHT_EM).toFixed(2)+"em";t.style.containIntrinsicSize="auto "+o,t.style.minHeight=o},collectAddedContentRoots(e){const r=new Set,t=this.CODE_CONTENT_DETECT_SELECTOR;return e.forEach(s=>{s.type==="childList"&&s.addedNodes.forEach(o=>{if(o.nodeType!==Node.ELEMENT_NODE||o.classList?.contains("gfmr-mermaid-container")||o.hasAttribute?.("data-gfmr-processed")||o.closest?.(".gfmr-mermaid-container"))return;(o.querySelector(t)||o.matches(t))&&r.add(o)})}),r},startMutationObserver(){new MutationObserver(r=>{if(this.isProcessing)return;const t=this.collectAddedContentRoots(r);t.size>0&&(this.pendingContentRoots||(this.pendingContentRoots=new Set),t.forEach(s=>this.pendingContentRoots.add(s)),clearTimeout(this.processTimeout),this.processTimeout=setTimeout(()=>{const s=this.pendingContentRoots;this.pendingContentRoots=null,this.processNewContent(s)},500))}).observe(document.body,{childList:!0,subtree:!0})},async processNewContent(e=null){if(!this.isProcessing){this.isProcessing=!0;try{if(e&&e.size>0)for(const r of e)r.isConnected&&await this.processAllCodeBlocks(r);else await this.processAllCodeBlocks();if(await this.processAllMermaidDiagrams(),await this.processPlantUMLDiagrams("new content"),this.hasMathContent()&&(this.katexLoaded||await this.loadKaTeX(),this.katexLoaded?await this.renderMathFormulas():i.wpGfmMath&&i.wpGfmMath.revealMathCodeFences()),this.hasChartContent())try{await this.loadGfmrCharts(),i.wpGfmCharts&&await i.wpGfmCharts.processAllCharts()}catch(r){console.error("[WP GFM v2 Hotfix] Chart processing in new content failed:",r)}}finally{this.isProcessing=!1}}},async initialize(){i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Starting optimized initialization");try{A(),this.repairCorruptedSvgStyles(),this.expandWideMermaidDiagrams();const e=Array.from(document.querySelectorAll(this.CODE_BLOCK_SELECTORS.join(", "))).filter(o=>!this.isPrerendered(o)),r=this.hasMathContent();if(e.length===0&&!r){i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] No code elements or math content found (SSR-rendered excluded) - skipping initialization");return}i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Found ${e.length} code elements (SSR-rendered excluded), math content: ${r} - Starting library loading`);const t=[];r&&(i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Math content detected, adding KaTeX to load queue"),i.wpGfmMath&&t.push(i.wpGfmMath.loadKaTeX()));const s=this.hasChartContent();try{await Promise.all(t),i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Library loading completed")}catch(o){console.error("[WP GFM v2 Hotfix] Some libraries failed to load, continuing with available functionality:",o)}if(e.length>0&&await this.processAllElementsImmediately(),r&&(this.katexLoaded?await this.renderMathFormulas():i.wpGfmMath&&i.wpGfmMath.revealMathCodeFences()),s)try{await this.loadGfmrCharts(),i.wpGfmCharts&&await i.wpGfmCharts.processAllCharts()}catch(o){console.error("[WP GFM v2 Hotfix] Chart initialization failed:",o)}await this.processPlantUMLDiagrams(),this.startMutationObserver(),this.setupThemeChangeListener(),i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Initialization completed"),this.initialized=!0,document.dispatchEvent(new CustomEvent("wpGfmV2HotfixReady"))}catch(e){console.error("[WP GFM v2 Hotfix] Initialization error:",e),this.revealUnprocessedContent("initialization-error")}}},P=()=>L(()=>M.initialize());!document.body&&document.readyState==="loading"?(i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Waiting for DOMContentLoaded to initialize"),document.addEventListener("DOMContentLoaded",P)):(i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] DOM ready, scheduling initialization"),P()),i.wpGfmV2Hotfix=M,i.wpGfmMain=M})(typeof window<"u"?window:global);1 (function(i){"use strict";if(i.gfmrMainInitialized)return;i.gfmrMainInitialized=!0,i.wpGfmConfig?.debug&&console.log("[GFMR Main] Initialization started");function P(e){let r=window.wpGfmConfig?.pluginUrl;if(!r){const s=document.currentScript;if(s&&s.src){const g=s.src.match(/(.+\/wp-content\/plugins\/[^/]+)/);r=g?g[1]+"/":"/wp-content/plugins/markdown-renderer-for-github/"}else r="/wp-content/plugins/markdown-renderer-for-github/";i.wpGfmConfig?.debug&&console.log("[WP GFM] Using fallback base URL:",r)}const t=r.replace(/\/+$/,""),n=e.replace(/^\/+/,"");return`${t}/${n}`}i.wpGfmBuildAssetUrl||(i.wpGfmBuildAssetUrl=P);function x(e){const r=i.wpGfmConfig?.assetSuffix||"";return P(r?e.replace(/\.(js|css)$/,`${r}.$1`):e)}let m=null,G=null;function E(){if(m&&m.isConnected)return m;if(!document.body)return null;const e=document.getElementById("gfmr-announcer");if(e)return m=e,m;const r=document.createElement("div");return r.id="gfmr-announcer",r.setAttribute("aria-live","polite"),r.setAttribute("aria-atomic","true"),r.className="gfmr-sr-only",document.body.appendChild(r),m=r,m}function T(e,r="polite"){if(!e)return!1;const t=E();return t?(t.setAttribute("aria-live",r),t.textContent=e,G&&clearTimeout(G),G=setTimeout(()=>{t.textContent="",G=null},1e3),!0):!1}i.wpGfmAnnounce||(i.wpGfmAnnounce=T);function W(){const e=["github","obsidian","vscode","technical-book"],r=i.wpGfmConfig&&typeof i.wpGfmConfig.markdownStylePreset=="string"?i.wpGfmConfig.markdownStylePreset:"github";return e.includes(r)?r:"github"}function H(){if(!document.body)return;const e=i.wpGfmConfig&&i.wpGfmConfig.theme;if(e){let r="light";e.system_auto?r="auto":e.current==="dark"?r="dark":e.current==="light"&&(r="light"),document.body.setAttribute("data-gfmr-theme",r)}document.body.setAttribute("data-gfmr-style-preset",W())}function S(e){typeof i.scheduler<"u"&&typeof i.scheduler.postTask=="function"?i.scheduler.postTask(e,{priority:"user-visible"}):typeof i.requestIdleCallback=="function"?i.requestIdleCallback(e,{timeout:200}):i.setTimeout(e,0)}const L={shikiLoaded:!1,shikiLoadPromise:null,processedElements:new WeakSet,isProcessing:!1,initialized:!1,languageLoadPromises:new Map,CODE_BLOCK_SELECTORS:['pre code:not([data-ssr="true"])','.wp-block-code code:not([data-ssr="true"])','[class^="language-"]:not([data-ssr="true"])','[class*=" language-"]:not([data-ssr="true"])'],CODE_CONTENT_DETECT_SELECTOR:'code, pre, [class^="language-"], [class*=" language-"]',PRERENDERED_CONTAINER_SELECTOR:'[data-gfmr-prerendered="true"]',isPrerendered(e){return!!(e&&typeof e.closest=="function"&&e.closest(this.PRERENDERED_CONTAINER_SELECTOR))},isFinalizedBlock(e){return!e||typeof e.closest!="function"?!1:!!(this.isPrerendered(e)||e.closest('[data-ssr="true"]')||e.closest(".gfmr-markdown-source"))},prerenderDeferred:new Map,prerenderActivationBound:!1,prerenderFlushPromise:null,isPrerenderingDocument(){return typeof document<"u"&&document.prerendering===!0},deferWhilePrerendering(e,r){if(!this.isPrerenderingDocument())return r();this.prerenderDeferred.has(e)||(this.prerenderDeferred.set(e,r),i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Deferred until prerender activation:",e)),this.bindPrerenderingChange()},bindPrerenderingChange(){this.prerenderActivationBound||typeof document>"u"||(this.prerenderActivationBound=!0,document.addEventListener("prerenderingchange",()=>{this.prerenderActivationBound=!1,this.prerenderFlushPromise=this.flushPrerenderDeferredTasks()},{once:!0}))},async flushPrerenderDeferredTasks(){const e=Array.from(this.prerenderDeferred.values());this.prerenderDeferred.clear(),i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Prerender activated, flushing ${e.length} deferred task(s)`);for(const r of e)try{await r()}catch(t){console.error("[WP GFM v2 Hotfix] Deferred prerender task failed:",t)}},WORKER_MANAGER_WAIT_MS:2e3,workerManagerReadyPromise:null,LAZY_LOAD_THRESHOLD:5,IMMEDIATE_PROCESS_COUNT:3,lazyLoadObserver:null,LAZY_CODE_LINE_HEIGHT_EM:1.45,LAZY_DIAGRAM_INTRINSIC_HEIGHT:"320px",async loadShiki(){if(i.shiki&&i.wpGfmShikiHighlighter){this.shikiLoaded=!0,i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Shiki already loaded");return}return i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Loading Shiki..."),new Promise((e,r)=>{const t=document.createElement("script");t.src=P("assets/libs/shiki/shiki.min.js"),t.onload=async()=>{try{let n;i.wpGfmThemeResolver?(n=i.wpGfmThemeResolver.resolveTheme(),i.wpGfmThemeResolver.applyThemeClasses()):(n=window.wpGfmConfig?.theme?.shiki_theme??(window.matchMedia?.("(prefers-color-scheme: dark)").matches?"github-dark":"github-light"),n==="auto"&&(n=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"github-dark":"github-light")),i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Using Shiki theme:",n),i.wpGfmShikiHighlighter=await i.shiki.createHighlighter({themes:["github-light","github-dark",...this._customThemeObjects()],langs:[]}),this.shikiLoaded=!0,await this.preloadPageLanguages(),i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Shiki loading completed"),e()}catch(n){console.error("[WP GFM v2 Hotfix] Shiki initialization error:",n),r(n)}},t.onerror=n=>{console.error("[WP GFM v2 Hotfix] Shiki loading failed:",n),console.error("Script URL:",t.src),e()},document.head.appendChild(t)})},_customThemeObjects(){const e=i.wpGfmConfig?.theme?.customThemes;return Array.isArray(e)?e.filter(r=>r&&r.theme&&typeof r.theme=="object").map(r=>r.theme):[]},ensureShikiLoaded(){return this.shikiLoaded&&i.wpGfmShikiHighlighter?Promise.resolve():(this.shikiLoadPromise||(this.shikiLoadPromise=this.loadShiki().catch(e=>{throw this.shikiLoadPromise=null,e})),this.shikiLoadPromise)},async prepareMainThreadHighlighter(e){if(await this.ensureShikiLoaded(),await this.ensureLanguageLoaded(e))return e;const r=this.resolveLanguageFallback(e);return r&&await this.ensureLanguageLoaded(r)?r:"plaintext"},whenWorkerManagerAvailable(){if(typeof i.getGFMRWorkerManager=="function")return Promise.resolve(!0);const e=i.wpGfmWorkerConfig;return!e||e.enabled===!1||typeof i.Worker>"u"||typeof document>"u"?Promise.resolve(!1):(this.workerManagerReadyPromise||(this.workerManagerReadyPromise=new Promise(r=>{let t=null;const n=()=>{document.removeEventListener("gfmrWorkerManagerReady",n),t&&(i.clearTimeout(t),t=null),r(typeof i.getGFMRWorkerManager=="function")};document.addEventListener("gfmrWorkerManagerReady",n),t=i.setTimeout(n,this.WORKER_MANAGER_WAIT_MS)})),this.workerManagerReadyPromise)},async resolveWorkerPlan(e){const r={useWorker:!1,forceWorker:!1};if(!await this.whenWorkerManagerAvailable())return r;let t;try{t=await i.getGFMRWorkerManager()}catch{return r}if(!t||t.initFailed)return r;const n=Number(t.config?.threshold)||0;return n>0&&(e.match(/\n/g)||[]).length+1<n?this.shikiLoaded&&i.wpGfmShikiHighlighter?r:{useWorker:!0,forceWorker:!0}:{useWorker:!0,forceWorker:!1}},collectPageLanguages(){const e=window.wpGfmLanguageDetector,r=document.querySelectorAll(this.CODE_BLOCK_SELECTORS.join(", ")),t=new Set;for(const n of r){if(this.isPrerendered(n)||e?.isMermaidBlock?.(n)||e?.isPlantUMLBlock?.(n)||this.isChartBlock(n)||this.isMathBlock(n))continue;let s=this.detectLanguage(n);s=window.GFMR_LANG_ALIASES?.[s]||s,s=this.resolveLanguageFallback(s)||s,!(!s||s==="plaintext"||s==="text")&&t.add(s)}return Array.from(t)},async preloadPageLanguages(){const e=this.collectPageLanguages();e.length!==0&&(i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Initial-loading ${e.length} page language(s):`,e.join(", ")),await Promise.all(e.map(r=>this.ensureLanguageLoaded(r))))},ensureLanguageLoaded(e){const r=i.wpGfmShikiHighlighter;if(!r||!e||e==="plaintext"||e==="text")return Promise.resolve(!0);const t=this.languageLoadPromises.get(e);if(t)return t;const n=(async()=>{try{return await r.loadLanguage(e),!0}catch(s){return console.warn(`[WP GFM v2 Hotfix] Language "${e}" not available, falling back to plaintext:`,s?.message),!1}})();return this.languageLoadPromises.set(e,n),n},resolveLanguageFallback(e){return e&&(typeof window<"u"&&window.GFMR_LANG_FALLBACKS||{})[e.toLowerCase()]||null},detectLanguage(e){if(window.wpGfmLanguageDetector)return window.wpGfmLanguageDetector.detectLanguage(e);const t=(e.className||"").match(/language-(\w+)/);return t?t[1]:"plaintext"},isChartBlock(e){return!!(e&&e.classList&&(e.classList.contains("language-chart")||e.classList.contains("language-chart-pro")))},isMathBlock(e){return!!e?.closest?.("code.language-math, pre.language-math")},isAlreadyHighlighted(e){if(window.wpGfmLanguageDetector)return window.wpGfmLanguageDetector.isAlreadyHighlighted(e);const r=e.querySelector('span.line, span[style*="color:"]'),t=e.classList.contains("hljs")||e.classList.contains("shiki");return!!(r||t)},applyDiffHighlighting(e){const r=e.querySelector("code");if(!r)return;const t=r.querySelectorAll(".line");if(t.length===0)return;t.forEach(s=>{const o=(s.textContent||"").trim();if(!o){s.remove();return}o.startsWith("+")&&!o.startsWith("+++")?s.classList.add("diff","add"):o.startsWith("-")&&!o.startsWith("---")?s.classList.add("diff","remove"):o.startsWith("@@")&&s.classList.add("diff","hunk")}),Array.from(r.childNodes).forEach(s=>{s.nodeType===Node.TEXT_NODE&&s.remove()}),e.classList.add("has-diff")},replaceContainerContent(e,r){e.replaceChildren(...r.childNodes),e.className=r.className},async highlightCodeBlock(e){if(!this.processedElements.has(e))try{const r=e.textContent||"";let t=window.wpGfmLanguageDetector.detectLanguage(e);if(t==="patch"&&(t="diff"),t==="plantuml"||t==="puml"){i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Skipping ${t} block - handled by PlantUML handler`);return}if(t==="math"){i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Skipping math block - handled by KaTeX renderer");return}if(window.wpGfmLanguageDetector?.isPlantUMLBlock(e)){i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Skipping PlantUML block (content-based detection)");return}if(!r.trim())return;let n=t,s={useWorker:!1,forceWorker:!1};t!=="mermaid"&&(s=await this.resolveWorkerPlan(r),s.useWorker||(n=await this.prepareMainThreadHighlighter(t)));const o=()=>s.useWorker||!!i.wpGfmShikiHighlighter,a=e.closest(".gfmr-markdown-rendered")?.getAttribute("data-shiki-theme")||"";let f;if(i.wpGfmThemeResolver?f=i.wpGfmThemeResolver.resolveTheme():(f=window.wpGfmConfig?.theme?.shiki_theme??(window.matchMedia?.("(prefers-color-scheme: dark)").matches?"github-dark":"github-light"),f==="auto"&&(f=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"github-dark":"github-light")),window.wpGfmLanguageDetector.isAlreadyHighlighted(e)&&t!=="plaintext"){const u=e.getAttribute("data-gfmr-language")||e.className.match(/language-(\w+)/)?.[1]||"";if(a&&a===f&&u===t){i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Theme and language match (${a}, ${t}), skipping re-render`),this.processedElements.add(e),e.setAttribute("data-gfmr-processed","true"),e.setAttribute("data-gfmr-language",t);const c=e.closest("pre")||e.parentElement;c&&(c.style.visibility="visible",c.style.opacity="1");return}if(i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Already highlighted, reprocessing (saved: ${a}, current: ${f}): ${t}`),t==="mermaid"){i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Adding Mermaid element to processing queue"),await this.renderMermaidDiagram(e);return}i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Executing re-highlighting: ${t}`);const h=window.wpGfmLanguageDetector.extractPlainTextFromHighlighted(e);if(o()&&h.trim())try{i.wpGfmConfig?.debug&&console.log(`[DEBUG] Text sent to Shiki (${t}):`,h.substring(0,300)+"...");const c=await this.renderHighlightedHtml(h,n,f,s);if(!c)throw new Error("Highlighter returned no output");i.wpGfmConfig?.debug&&console.log(`[DEBUG] Re-highlighting successful: ${t}`),i.wpGfmConfig?.debug&&console.log("[DEBUG] Generated HTML:",c.substring(0,200)+"...");const p=document.createElement("div");p.innerHTML=c;const y=p.querySelector("pre");if(y&&e.parentElement){const d=e.closest("pre")||e.parentElement;if(i.wpGfmConfig?.debug&&console.log("[DEBUG] Container before update:",d.outerHTML.substring(0,200)+"..."),d.parentNode){const M=d.className.replace(/github-light/g,"").replace(/github-dark/g,"").replace(/shiki/g,"").trim();if(y.className=`shiki ${f} ${M}`.trim(),this.replaceContainerContent(d,y),n==="diff"&&this.applyDiffHighlighting(d),d.style.cssText=y.style.cssText||"",f.startsWith("custom:"))d.style.backgroundColor&&d.style.setProperty("background-color",d.style.backgroundColor,"important"),d.style.color&&d.style.setProperty("color",d.style.color,"important");else{const l=f.includes("light"),k=l?"#f6f8fa":"#24292e",F=l?"#24292f":"#e1e4e8";d.style.setProperty("background-color",k,"important"),d.style.setProperty("color",F,"important")}d.style.setProperty("font-size","14px","important"),d.style.setProperty("line-height","1.45","important"),d.style.setProperty("font-family","SFMono-Regular, Consolas, Liberation Mono, Menlo, Monaco, Courier New, monospace","important"),d.style.setProperty("border-radius","6px","important"),d.style.setProperty("padding","16px","important"),d.querySelectorAll("code, span").forEach(l=>{l.style.color&&l.style.setProperty("color",l.style.color,"important"),l.style.backgroundColor&&l.style.setProperty("background-color","transparent","important")}),i.wpGfmConfig?.debug&&console.log("[DEBUG] Container after update:",d.outerHTML.substring(0,200)+"...");const w=d.querySelector("code")||d;this.processedElements.add(w),w.setAttribute("data-gfmr-processed","true"),w.setAttribute("data-gfmr-language",t);const C=w.closest("pre")||w.parentElement;C&&(C.style.visibility="visible",C.style.opacity="1"),i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Re-highlighting completed: ${t}`),this.addCopyButton(d,h),d.querySelectorAll('span[style*="color"]').forEach(l=>{const k=l.style.color;k&&(l.style.setProperty("color",k,"important"),l.style.setProperty("font-weight","inherit","important"))});return}}}catch(c){console.warn(`[DEBUG] Re-highlighting failed (${t}):`,c)}this.processedElements.add(e),e.setAttribute("data-gfmr-processed","true"),e.setAttribute("data-gfmr-language",t);return}if(i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Highlighting process: ${t}`),o())try{const u=await this.renderHighlightedHtml(r,n,f,s);if(!u)throw new Error("Highlighter returned no output");i.wpGfmConfig?.debug&&console.log(`[DEBUG] Shiki highlighting successful: ${t}`);const h=document.createElement("div");h.innerHTML=u;const c=h.querySelector("pre");if(c&&e.parentElement){const p=e.closest("pre")||e.parentElement;if(p.parentNode){const y=p.className.replace(/github-light/g,"").replace(/github-dark/g,"").replace(/shiki/g,"").trim();if(c.className=`shiki ${f} ${y}`.trim(),f.startsWith("custom:"))c.style.backgroundColor&&c.style.setProperty("background-color",c.style.backgroundColor,"important"),c.style.color&&c.style.setProperty("color",c.style.color,"important");else{const v=f.includes("light"),w=v?"#f6f8fa":"#24292e",C=v?"#24292f":"#e1e4e8";c.style.setProperty("background-color",w,"important"),c.style.setProperty("color",C,"important")}c.style.setProperty("font-size","14px","important"),c.style.setProperty("line-height","1.45","important"),c.style.setProperty("font-family","SFMono-Regular, Consolas, Liberation Mono, Menlo, Monaco, Courier New, monospace","important"),c.style.setProperty("border-radius","6px","important"),c.style.setProperty("padding","16px","important"),p.parentNode.replaceChild(c,p),n==="diff"&&this.applyDiffHighlighting(c);const d=c.querySelector("code")||c;this.processedElements.add(d),d.setAttribute("data-gfmr-processed","true"),d.setAttribute("data-gfmr-language",t);const M=d.closest("pre")||d.parentElement;M&&(M.style.visibility="visible",M.style.opacity="1"),i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Highlighting completed: ${t}`),this.addCopyButton(c,r)}}}catch{console.debug(`[GFMR] Shiki: Language not supported: ${t}`),this.processedElements.add(e),e.setAttribute("data-gfmr-processed","true");const h=e.closest("pre")||e.parentElement;h&&(h.style.visibility="visible",h.style.opacity="1")}else{this.processedElements.add(e),e.setAttribute("data-gfmr-processed","true");const u=e.closest("pre")||e.parentElement;u&&(u.style.visibility="visible",u.style.opacity="1")}}catch(r){console.error("[WP GFM v2 Hotfix] Highlighting error:",r),this.processedElements.add(e),e.setAttribute("data-gfmr-processed","true");const t=e.closest("pre")||e.parentElement;t&&(t.style.visibility="visible",t.style.opacity="1")}},async highlightCodeToHtml(e,r,t,n={}){if(typeof i.getGFMRWorkerManager=="function")try{const s=await i.getGFMRWorkerManager();if(s){const o=await s.highlightCode(e,r,t,{forceWorker:!!n.forceWorker});if(o&&o.html&&(!o.fallback||!i.wpGfmShikiHighlighter))return o.html}}catch(s){console.debug("[GFMR] Worker highlight failed, using main thread:",s)}return i.wpGfmShikiHighlighter?i.wpGfmShikiHighlighter.codeToHtml(e,{lang:r,theme:t}):null},async renderHighlightedHtml(e,r,t,n){const s=await this.highlightCodeToHtml(e,r,t,n);if(s||!n?.useWorker)return s;const o=await this.prepareMainThreadHighlighter(r);return i.wpGfmShikiHighlighter?i.wpGfmShikiHighlighter.codeToHtml(e,{lang:o,theme:t}):null},revealFallbackElement(e,r="pipeline-fallback"){if(!e||typeof e.setAttribute!="function"||this.isPrerendered(e)||e.getAttribute("data-ssr")==="true"||e.closest?.(".gfmr-markdown-source"))return;this.processedElements.add(e),e.setAttribute("data-gfmr-processed","true"),e.setAttribute("data-gfmr-fallback",r),e.removeAttribute("data-gfmr-lazy"),e.removeAttribute("data-gfmr-lazy-type");const t=e.closest?.("pre")||e.parentElement;t&&(t.style.visibility="visible",t.style.opacity="1",t.style.contentVisibility="visible",t.removeAttribute("data-gfmr-lazy-styled"))},revealUnprocessedContent(e="pipeline-fallback",r=[this.CODE_BLOCK_SELECTORS.join(", "),'.gfmr-mermaid-container:not([data-ssr="true"])'].join(", ")){document.querySelectorAll(r).forEach(n=>{n.hasAttribute("data-gfmr-processed")||this.revealFallbackElement(n,e)})},collectScopedElements(e,r){const t=e||document,n=Array.from(t.querySelectorAll(r));return t.nodeType===Node.ELEMENT_NODE&&typeof t.matches=="function"&&t.matches(r)&&n.unshift(t),n},async processAllCodeBlocks(e=document){const r=this.collectScopedElements(e,this.CODE_BLOCK_SELECTORS.join(", "));i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Found ${r.length} code blocks (SSR-rendered excluded)`);for(const t of r){if(t.hasAttribute("data-gfmr-processed")||this.isPrerendered(t)||t.getAttribute("data-ssr")==="true")continue;if(t.closest('pre[data-ssr="false"]')&&i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Processing SSR fallback code block"),t.closest(".gfmr-markdown-source")){i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Skipping code blocks within Markdown source");continue}if(t.closest(".gfmr-markdown-container")&&!t.closest(".gfmr-markdown-rendered")){i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Within Markdown container but outside rendering element, skipping processing");continue}window.wpGfmLanguageDetector?.isMermaidBlock(t)||window.wpGfmLanguageDetector?.isPlantUMLBlock(t)||this.isChartBlock(t)||this.isMathBlock(t)||await this.highlightCodeBlock(t)}},async loadMermaid(){if(i.wpGfmMermaidRenderer)return i.wpGfmMermaidRenderer.loadMermaid();console.warn("[GFMR Main] wpGfmMermaidRenderer not available")},get mermaidLoaded(){return!!(i.wpGfmMermaidRenderer&&i.mermaid?.render)},async renderMermaidDiagram(e){if(this.isPrerenderingDocument()){this.reserveLazyPlaceholder(e,"mermaid"),this.deferWhilePrerendering(e,()=>this.renderMermaidDiagram(e));return}if(i.wpGfmMermaidRenderer){const r=await i.wpGfmMermaidRenderer.renderMermaidDiagram(e,this.processedElements);return this.expandWideMermaidDiagrams(),r}console.warn("[GFMR Main] wpGfmMermaidRenderer not available for renderMermaidDiagram"),this.revealFallbackElement(e,"mermaid-renderer-unavailable")},async processAllMermaidDiagrams(){if(i.wpGfmMermaidRenderer){const e=await i.wpGfmMermaidRenderer.processAllMermaidDiagrams(this.processedElements);return this.expandWideMermaidDiagrams(),e}console.warn("[GFMR Main] wpGfmMermaidRenderer not available for processAllMermaidDiagrams"),this.revealUnprocessedContent("mermaid-renderer-unavailable",['.gfmr-mermaid-container:not([data-ssr="true"])','code.language-mermaid:not([data-ssr="true"])','pre.language-mermaid code:not([data-ssr="true"])','pre[class*="language-mermaid"] code:not([data-ssr="true"])'].join(", "))},isMermaidBlock(e){if(i.wpGfmMermaidRenderer)return i.wpGfmMermaidRenderer.isMermaidBlock(e);const r=e.className||"";return r.includes("language-mermaid")||r.includes("mermaid")},addLightboxTrigger(e,r){if(i.wpGfmMermaidRenderer)return i.wpGfmMermaidRenderer.addLightboxTrigger(e,r);console.warn("[GFMR Main] wpGfmMermaidRenderer not available for addLightboxTrigger")},async loadKaTeX(){if(i.wpGfmMath)return i.wpGfmMath.loadKaTeX();console.warn("[GFMR Main] wpGfmMath not available for loadKaTeX")},async loadKaTeXCSS(){if(i.wpGfmMath)return i.wpGfmMath.loadKaTeXCSS();console.warn("[GFMR Main] wpGfmMath not available for loadKaTeXCSS")},get katexLoaded(){return i.wpGfmMath?i.wpGfmMath.isKaTeXLoaded():!1},repairCorruptedSvgStyles(){document.querySelectorAll("svg style").forEach(e=>{e.querySelector(".gfmr-math, .katex, .katex-error")&&(e.textContent=e.textContent)})},isWideMermaidDiagram(e){return!!e.querySelector(".journey-section, .task-line, .taskText, .taskTextOutsideRight, .exclude-range")},getWideMermaidNaturalWidth(e){const r=e.style?.maxWidth||"",t=e.getAttribute("style")||"",n=`${r};${t}`.match(/max-width\s*:\s*([0-9.]+)px/i);if(n)return parseFloat(n[1]);const s=e.getAttribute("viewBox"),o=s?s.trim().split(/[\s,]+/):[];return o.length>=4?parseFloat(o[2]):0},expandWideMermaidDiagrams(){document.querySelectorAll(".gfmr-mermaid svg").forEach(e=>{if(!this.isWideMermaidDiagram(e))return;const r=this.getWideMermaidNaturalWidth(e);if(!Number.isFinite(r)||r<=0)return;const t=e.closest(".gfmr-mermaid"),n=e.closest(".gfmr-mermaid-container, .gfmr-mermaid-container-unified"),s=n?.clientWidth||t?.clientWidth||0;s&&r<=s*1.15||(e.dataset.gfmrWideFit="true",e.setAttribute("width","100%"),e.style.setProperty("width","100%","important"),e.style.setProperty("max-width","100%","important"),e.style.setProperty("height","auto","important"),e.style.setProperty("flex","1 1 auto","important"),t&&(t.style.setProperty("width","100%","important"),t.style.setProperty("max-width","100%","important"),t.style.setProperty("flex","1 1 auto","important")),n&&(n.dataset.gfmrWideMermaidFit="true",n.style.setProperty("justify-content","center","important"),n.style.setProperty("overflow-x","hidden","important"),n.style.setProperty("overflow-y","hidden","important")))})},hasMathContent(){return this.repairCorruptedSvgStyles(),i.wpGfmMath?i.wpGfmMath.hasMathContent():!1},async renderMathFormulas(){if(i.wpGfmMath)return i.wpGfmMath.renderMathFormulas();console.warn("[GFMR Main] wpGfmMath not available for renderMathFormulas")},renderBlockMath(){if(i.wpGfmMath)return i.wpGfmMath.renderBlockMath()},renderInlineMath(){if(i.wpGfmMath)return i.wpGfmMath.renderInlineMath()},renderLatexShortcodes(){if(i.wpGfmMath)return i.wpGfmMath.renderLatexShortcodes()},addCopyButton(e,r,t){if(i.wpGfmCopyButton)return i.wpGfmCopyButton.addCopyButton(e,r,t)},themeDependentProcessedElements(){return Array.from(document.querySelectorAll("[data-gfmr-processed]")).filter(e=>!this.isFinalizedBlock(e))},resetThemeDependentBlocks(){const e=this.themeDependentProcessedElements();for(const r of e)this.processedElements.delete(r),r.removeAttribute("data-gfmr-processed");return e},async reprocessForThemeChange(){this.resetThemeDependentBlocks(),await this.processAllElementsImmediately()},setupThemeChangeListener(){if(i.wpGfmThemeResolver){i.wpGfmThemeResolver.setupThemeChangeListener(async()=>{i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] OS theme changed, re-rendering theme-dependent code blocks"),await this.reprocessForThemeChange(),i.wpGfmMermaidRenderer&&await i.wpGfmMermaidRenderer.rerenderForThemeChange(this.processedElements)});return}const e=window.wpGfmConfig?.theme?.shiki_theme,r=window.wpGfmConfig?.mermaid?.theme||"auto";if(e!=="auto"&&r!=="auto")return;i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Setting up OS theme change listener for auto mode (fallback)");const t=window.matchMedia("(prefers-color-scheme: dark)"),n=async()=>{await this.reprocessForThemeChange(),i.wpGfmMermaidRenderer&&await i.wpGfmMermaidRenderer.rerenderForThemeChange(this.processedElements)};t.addEventListener?t.addEventListener("change",n):t.addListener&&t.addListener(n)},hasChartContent(){const e=document.querySelectorAll('code[class*="language-chart"], code.language-chart, code.language-chart-pro');return Array.from(e).some(r=>!this.isPrerendered(r))},async loadGfmrCharts(){if(i.wpGfmCharts){i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Charts module already loaded");return}return i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Loading Charts module..."),new Promise((e,r)=>{const t=document.createElement("script");t.src=x("assets/js/gfmr-charts.js"),t.onload=()=>{typeof i.wpGfmInitializeCharts=="function"?(i.wpGfmInitializeCharts(),i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Charts module loaded successfully"),e()):(console.error("[WP GFM v2 Hotfix] Charts module initialization function not found"),r(new Error("Charts initialization failed")))},t.onerror=n=>{console.error("[WP GFM v2 Hotfix] Charts module loading failed:",n),r(n)},document.head.appendChild(t)})},async processPlantUMLDiagrams(e=""){if(i.wpGfmPlantUML)try{await i.wpGfmPlantUML.renderAll({lazyLoad:!0})}catch(r){const t=e?`PlantUML processing in ${e} failed:`:"PlantUML processing failed:";console.error(`[WP GFM v2 Hotfix] ${t}`,r)}},yieldToMain(){return new Promise(e=>S(e))},async processBlocksChunked(e){for(let r=0;r<e.length;r++){const{element:t,type:n}=e[r];try{n==="mermaid"?await this.renderMermaidDiagram(t):await this.highlightCodeBlock(t)}catch(s){console.error("[WP GFM v2 Hotfix] Chunked block processing failed:",s),this.revealFallbackElement(t,"chunk-error")}r<e.length-1&&await this.yieldToMain()}},async processAllElementsImmediately(){const e=document.querySelectorAll(this.CODE_BLOCK_SELECTORS.join(", ")),r=document.querySelectorAll('[class^="language-mermaid"]:not([data-ssr="true"]), [class*=" language-mermaid"]:not([data-ssr="true"]), code.language-mermaid:not([data-ssr="true"]), pre.language-mermaid code:not([data-ssr="true"]), pre[class^="language-mermaid"] code:not([data-ssr="true"]), pre[class*=" language-mermaid"] code:not([data-ssr="true"])'),t=new Set(Array.from(r)),n=document.querySelectorAll('pre:not([data-ssr="true"]), .wp-block-code code:not([data-ssr="true"]), .wp-block-code div[class^="language-"]:not([data-ssr="true"]), .wp-block-code div[class*=" language-"]:not([data-ssr="true"])');for(const a of n)t.has(a)||a.hasAttribute("data-gfmr-processed")||this.isPrerendered(a)||a.getAttribute("data-ssr")!=="true"&&(this.isMathBlock(a)||a.querySelector?.("code.language-math")||window.wpGfmLanguageDetector.isMermaidBlock(a)&&t.add(a));const s=Array.from(e).filter(a=>a.hasAttribute("data-gfmr-processed")||this.isPrerendered(a)||a.getAttribute("data-ssr")==="true"||a.closest(".gfmr-markdown-source")||window.wpGfmLanguageDetector?.isMermaidBlock(a)?!1:window.wpGfmLanguageDetector?.isPlantUMLBlock(a)?(i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Filtered out PlantUML block from Shiki processing"),!1):this.isChartBlock(a)?(i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Filtered out Chart block from Shiki processing"),!1):this.isMathBlock(a)?(i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Filtered out math fence from Shiki processing"),!1):!0),o=Array.from(t).filter(a=>!(a.hasAttribute("data-gfmr-processed")||this.isPrerendered(a)||a.getAttribute("data-ssr")==="true"||a.closest(".gfmr-markdown-source"))),g=s.length+o.length;i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Total blocks to process: ${g} (code: ${s.length}, mermaid: ${o.length})`),g>this.LAZY_LOAD_THRESHOLD?(i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Using lazy loading (threshold: ${this.LAZY_LOAD_THRESHOLD})`),await this.processWithLazyLoading(s,o)):await this.processBlocksChunked([...s.map(a=>({element:a,type:"code"})),...o.map(a=>({element:a,type:"mermaid"}))]),i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Ultra-fast immediate processing completed")},async processWithLazyLoading(e,r){const t=[...e.map(o=>({element:o,type:"code"})),...r.map(o=>({element:o,type:"mermaid"}))],n=t.slice(0,this.IMMEDIATE_PROCESS_COUNT),s=t.slice(this.IMMEDIATE_PROCESS_COUNT);i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Processing ${n.length} blocks immediately, ${s.length} deferred`),await this.processBlocksChunked(n),s.length>0&&this.setupLazyLoadObserver(s)},setupLazyLoadObserver(e){this.lazyLoadObserver&&this.lazyLoadObserver.disconnect(),this.lazyLoadObserver=new IntersectionObserver(r=>{r.forEach(t=>{if(t.isIntersecting){const n=t.target,s=n.getAttribute("data-gfmr-lazy-type");this.lazyLoadObserver.unobserve(n),n.removeAttribute("data-gfmr-lazy-type"),n.removeAttribute("data-gfmr-lazy"),s==="mermaid"?this.renderMermaidDiagram(n):this.highlightCodeBlock(n),i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Lazy loaded ${s} block on viewport entry`)}})},{rootMargin:"600px 0px",threshold:0}),e.forEach(({element:r,type:t})=>{r.setAttribute("data-gfmr-lazy","true"),r.setAttribute("data-gfmr-lazy-type",t),this.reserveLazyPlaceholder(r,t),this.lazyLoadObserver.observe(r)}),i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] IntersectionObserver setup for ${e.length} blocks`)},estimateCodeLineCount(e){const t=(e&&e.textContent||"").replace(/\n$/,"");return t===""?1:t.split(` 2 `).length},reserveLazyPlaceholder(e,r){const t=e.closest("pre")||e.parentElement;if(!t||t.hasAttribute("data-gfmr-lazy-styled"))return;if(t.setAttribute("data-gfmr-lazy-styled","true"),t.style.contentVisibility="auto",r==="mermaid"){t.style.containIntrinsicSize="auto "+this.LAZY_DIAGRAM_INTRINSIC_HEIGHT,t.style.minHeight="3em";return}const s=(this.estimateCodeLineCount(e)*this.LAZY_CODE_LINE_HEIGHT_EM).toFixed(2)+"em";t.style.containIntrinsicSize="auto "+s,t.style.minHeight=s},collectAddedContentRoots(e){const r=new Set,t=this.CODE_CONTENT_DETECT_SELECTOR;return e.forEach(n=>{n.type==="childList"&&n.addedNodes.forEach(s=>{if(s.nodeType!==Node.ELEMENT_NODE||s.classList?.contains("gfmr-mermaid-container")||s.hasAttribute?.("data-gfmr-processed")||s.closest?.(".gfmr-mermaid-container"))return;(s.querySelector(t)||s.matches(t))&&r.add(s)})}),r},startMutationObserver(){new MutationObserver(r=>{if(this.isProcessing)return;const t=this.collectAddedContentRoots(r);t.size>0&&(this.pendingContentRoots||(this.pendingContentRoots=new Set),t.forEach(n=>this.pendingContentRoots.add(n)),clearTimeout(this.processTimeout),this.processTimeout=setTimeout(()=>{const n=this.pendingContentRoots;this.pendingContentRoots=null,this.processNewContent(n)},500))}).observe(document.body,{childList:!0,subtree:!0})},async processNewContent(e=null){if(!this.isProcessing){this.isProcessing=!0;try{if(e&&e.size>0)for(const r of e)r.isConnected&&await this.processAllCodeBlocks(r);else await this.processAllCodeBlocks();await this.deferWhilePrerendering("new-content-mermaid",()=>this.processAllMermaidDiagrams()),await this.deferWhilePrerendering("new-content-plantuml",()=>this.processPlantUMLDiagrams("new content")),this.hasMathContent()&&(this.katexLoaded||await this.loadKaTeX(),this.katexLoaded?await this.renderMathFormulas():i.wpGfmMath&&i.wpGfmMath.revealMathCodeFences()),this.hasChartContent()&&await this.deferWhilePrerendering("new-content-charts",async()=>{try{await this.loadGfmrCharts(),i.wpGfmCharts&&await i.wpGfmCharts.processAllCharts()}catch(r){console.error("[WP GFM v2 Hotfix] Chart processing in new content failed:",r)}})}finally{this.isProcessing=!1}}},async initialize(){i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Starting optimized initialization");try{H(),this.repairCorruptedSvgStyles(),this.expandWideMermaidDiagrams();const e=Array.from(document.querySelectorAll(this.CODE_BLOCK_SELECTORS.join(", "))).filter(s=>!this.isPrerendered(s)),r=this.hasMathContent();if(e.length===0&&!r){i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] No code elements or math content found (SSR-rendered excluded) - skipping initialization");return}i.wpGfmConfig?.debug&&console.log(`[WP GFM v2 Hotfix] Found ${e.length} code elements (SSR-rendered excluded), math content: ${r} - Starting library loading`);const t=[];r&&(i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Math content detected, adding KaTeX to load queue"),i.wpGfmMath&&t.push(i.wpGfmMath.loadKaTeX()));const n=this.hasChartContent();try{await Promise.all(t),i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Library loading completed")}catch(s){console.error("[WP GFM v2 Hotfix] Some libraries failed to load, continuing with available functionality:",s)}e.length>0&&await this.processAllElementsImmediately(),r&&(this.katexLoaded?await this.renderMathFormulas():i.wpGfmMath&&i.wpGfmMath.revealMathCodeFences()),n&&await this.deferWhilePrerendering("charts",async()=>{try{await this.loadGfmrCharts(),i.wpGfmCharts&&await i.wpGfmCharts.processAllCharts()}catch(s){console.error("[WP GFM v2 Hotfix] Chart initialization failed:",s)}}),await this.deferWhilePrerendering("plantuml",()=>this.processPlantUMLDiagrams()),this.startMutationObserver(),this.setupThemeChangeListener(),i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Initialization completed"),this.initialized=!0,document.dispatchEvent(new CustomEvent("wpGfmV2HotfixReady"))}catch(e){console.error("[WP GFM v2 Hotfix] Initialization error:",e),this.revealUnprocessedContent("initialization-error")}}},A=()=>S(()=>L.initialize());!document.body&&document.readyState==="loading"?(i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] Waiting for DOMContentLoaded to initialize"),document.addEventListener("DOMContentLoaded",A)):(i.wpGfmConfig?.debug&&console.log("[WP GFM v2 Hotfix] DOM ready, scheduling initialization"),A()),i.wpGfmV2Hotfix=L,i.wpGfmMain=L})(typeof window<"u"?window:global); -
markdown-renderer-for-github/trunk/assets/js/gfmr-plantuml-handler.js
r3644434 r3657956 1390 1390 // Fixes race condition: gfmr-main.js runs processPlantUMLDiagrams() 1391 1391 // before this handler is initialized, resulting in a no-op. 1392 wpGfmPlantUML.renderAll( { lazyLoad: true } ).catch( function ( err ) { 1393 wpGfmPlantUML.debug( 'Auto-render failed:', err.message || err ); 1394 } ); 1392 const autoRender = function () { 1393 wpGfmPlantUML 1394 .renderAll( { lazyLoad: true } ) 1395 .catch( function ( err ) { 1396 wpGfmPlantUML.debug( 1397 'Auto-render failed:', 1398 err.message || err 1399 ); 1400 } ); 1401 }; 1402 1403 // Issue #1340: rendering reaches an external PlantUML server. A 1404 // prerendered document is a page the visitor may never open, so that 1405 // round-trip waits for activation. Browsers without the Prerendering API 1406 // leave document.prerendering undefined and render straight away. 1407 if ( global.document && global.document.prerendering === true ) { 1408 global.document.addEventListener( 1409 'prerenderingchange', 1410 autoRender, 1411 { once: true } 1412 ); 1413 } else { 1414 autoRender(); 1415 } 1395 1416 1396 1417 return wpGfmPlantUML; -
markdown-renderer-for-github/trunk/assets/js/gfmr-plantuml-handler.min.js
r3644434 r3657956 1 (function(i){"use strict";if(i.gfmrPlantumlHandlerInitialized&&typeof module>"u")return;i.gfmrPlantumlHandlerInitialized=!0;class y{constructor(e=null){this.utils=e||i.wpGfmUtils,this.utils||console.warn("[GFMR PlantUML] WPGFMUtils not found, using limited functionality");const t=i.wpGfmConstants||{},s=t.PLANTUML_CONFIG||{};this.config={serverUrl:s.serverUrl||"https://www.plantuml.com/plantuml",format:s.format||"svg",timeout:s.timeout||1e4,retryAttempts:s.retryAttempts||1,retryDelay:s.retryDelay||1e3,cacheTtl:s.cacheTtl||604800};const r=i.wpGfmPlantUMLConfig||{};this.cacheVersion=r.cacheVersion||3;const n=t.PLANTUML_TYPES||{};this.startPatterns=n.startPatterns||["@startuml","@startmindmap","@startwbs","@startgantt","@startsalt","@startjson","@startyaml","@startditaa","@startdot","@startnwdiag","@startrackdiag","@startpacketdiag","@startactdiag","@startblockdiag","@startseqdiag"],this.blockdiagFamily=["nwdiag","rackdiag","packetdiag","actdiag","blockdiag","seqdiag"],this.blockdiagFamilyRegex=new RegExp("(?:^|[\\r\\n])[ \\t]*("+this.blockdiagFamily.join("|")+")\\b[ \\t]*\\{"),this.processedDiagrams=new WeakSet,this.renderCache=new Map,this.inflightRequests=new Map,this.encode64Table="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_",this.requestQueue=[],this.activeRequests=0,this.maxConcurrentRequests=s.maxConcurrentRequests||3,this.requestDelay=s.requestDelay||200,this.isProcessingQueue=!1,this.recentResults=[],this.debug("PlantUML handler initialized",{config:this.config})}isPlantUMLContent(e){return!e||typeof e!="string"?!1:this.startPatterns.some(t=>e.includes(t))}detectDiagramType(e){const t={"@startmindmap":"mindmap","@startwbs":"wbs","@startgantt":"gantt","@startsalt":"salt","@startjson":"json","@startyaml":"yaml","@startditaa":"ditaa","@startdot":"dot","@startnwdiag":"nwdiag","@startrackdiag":"rackdiag","@startpacketdiag":"packetdiag","@startactdiag":"actdiag","@startblockdiag":"blockdiag","@startseqdiag":"seqdiag"};for(const[s,r]of Object.entries(t))if(e.includes(s))return r;if(e.includes("@startuml")){const s=this.matchBlockdiagFamily(e);return s||this.detectUmlSubType(e)}return"unknown"}matchBlockdiagFamily(e){const t=this.blockdiagFamilyRegex.exec(e);return t?t[1]:null}normalizeContent(e){if(typeof e!="string"||!/@startuml/i.test(e))return e;const t=this.matchBlockdiagFamily(e);return t?e.replace(/(^|\r\n|\r|\n)@startuml/i,"$1@start"+t).replace(/(^|\r\n|\r|\n)@enduml/i,"$1@end"+t):e}detectUmlSubType(e){return(e.includes("->")||e.includes("-->")||e.includes("->>"))&&(e.includes("participant")||e.includes("actor"))?"sequence":e.includes("class ")||e.includes("{")||e.includes("extends")?"class":/\bstart\b/.test(e)&&/\bstop\b/.test(e)?"activity":e.includes("usecase")||e.includes("actor")?"usecase":"sequence"}encode(e){const t=this.encodeUtf8(e);if(i.pako&&i.pako.deflateRaw){const r=i.pako.deflateRaw(t,{level:9});return this.encode64(r)}const s="~h"+this.encodeHex(t);return s.length>4e3&&this.debug("Warning: Hex-encoded URL is long ("+s.length+" chars), large diagrams may fail"),s}encodeUtf8(e){return new TextEncoder().encode(e)}encodeHex(e){let t="";for(let s=0;s<e.length;s++)t+=e[s].toString(16).padStart(2,"0");return t}encode64(e){let t="";const s=e.length;for(let r=0;r<s;r+=3){const n=e[r],a=r+1<s?e[r+1]:0,l=r+2<s?e[r+2]:0;t+=this.append3bytes(n,a,l)}return t}append3bytes(e,t,s){const r=e>>2,n=(e&3)<<4|t>>4,a=(t&15)<<2|s>>6,l=s&63;return this.encode64Table.charAt(r&63)+this.encode64Table.charAt(n&63)+this.encode64Table.charAt(a&63)+this.encode64Table.charAt(l&63)}async render(e,t,s={}){if(!e||!this.isPlantUMLContent(e))return this.debug("Not PlantUML content"),null;if(e=this.normalizeContent(e),!t||!t.nodeType)throw new Error("Invalid target element");if(this.processedDiagrams.has(t))return this.debug("Diagram already processed"),null;this.debug("Rendering PlantUML diagram",{contentLength:e.length,type:this.detectDiagramType(e)}),this.showLoading(t);try{const r=this.generateCacheKey(e);if(this.renderCache.has(r)){const c=this.renderCache.get(r);return this.applySvg(t,c,s),this.processedDiagrams.add(t),this.debug("Using cached SVG (Map)"),{success:!0,cached:!0}}const n=this.getLocalCache(r);if(n)return this.renderCache.set(r,n),this.applySvg(t,n,s),this.processedDiagrams.add(t),this.debug("Using cached SVG (localStorage)"),{success:!0,cached:!0};let a;if(this.inflightRequests.has(r))a=this.inflightRequests.get(r);else{if((i.wpGfmPlantUMLConfig||{}).useProxy)a=this.enqueueRequest(()=>this.fetchViaProxy(e)).catch(u=>{this.debug("Proxy failed, falling back to direct mode:",u.message);const o=this.encode(e),d=this.buildRenderUrl(o);return this.fetchSvg(d,s)});else{const u=this.encode(e),o=this.buildRenderUrl(u);a=this.fetchSvg(o,s)}this.inflightRequests.set(r,a)}let l;try{l=await a}finally{this.inflightRequests.delete(r)}if(this.isSuppressedResult(l))return this.applySvg(t,this.buildSuppressedNoticeHtml(),s),this.processedDiagrams.add(t),this.debug("PlantUML feature suppressed by server"),{success:!0,suppressed:!0};if(this.isValidRenderResult(l)){const c=this.renderCache.has(r)?this.renderCache.get(r):this.sanitizeSvg(l);return this.applySvg(t,c,s),this.renderCache.has(r)||(this.renderCache.set(r,c),this.setLocalCache(r,c)),this.processedDiagrams.add(t),this.recentResults.push(!0),this.debug("PlantUML rendered successfully"),{success:!0,cached:!1}}throw new Error("Empty SVG response from server")}catch(r){return this.recentResults.push(!1),this.debug("Render error:",r),this.handleRenderError(r,e,t)}}buildRenderUrl(e){return`${this.config.serverUrl}/${this.config.format}/${e}`}isValidRenderResult(e){return!!(e&&(e.includes("<svg")||e.includes("<img ")||this.isSuppressedResult(e)))}isSuppressedResult(e){return!e||typeof e!="string"?!1:/has been suppressed/i.test(e)||e.includes("gfmr-plantuml-suppressed")}buildSuppressedNoticeHtml(){const e=i.wpGfmConfig?.translations||{},t=e.plantuml_suppressed_title||"Graphviz/DOT diagrams are not supported by the PlantUML server.",s=e.plantuml_suppressed_message||"Please use a self-hosted PlantUML server or an alternative diagram format.";return'<div class="gfmr-plantuml-error gfmr-plantuml-suppressed" role="note"><div class="gfmr-plantuml-error-header"><strong>\u26A0\uFE0F '+this.escapeHtml(t)+'</strong></div><div class="gfmr-plantuml-error-message">'+this.escapeHtml(s)+"</div></div>"}async fetchViaProxy(e){const t=i.wpGfmPlantUMLConfig||{};if(!t.ajaxUrl||!t.nonce)throw new Error("Proxy configuration not available");const s=new AbortController,r=setTimeout(()=>s.abort(),this.config.timeout);try{const n=await fetch(t.ajaxUrl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({action:"gfmr_render_plantuml",nonce:t.nonce,content:e}),signal:s.signal});if(clearTimeout(r),!n.ok){let c=`HTTP ${n.status}: ${n.statusText}`;try{const u=await n.json();u?.data?.message&&(c=u.data.message)}catch{}throw new Error(c)}const a=await n.json();if(a.success&&a.data&&a.data.svg&&this.isValidRenderResult(a.data.svg))return a.data.svg;const l=a?.data?.message??"Failed to render via proxy";throw new Error(l)}catch(n){throw clearTimeout(r),n}}async fetchSvg(e,t={}){return this.enqueueRequest(()=>this.executeFetch(e,t))}enqueueRequest(e){return new Promise((t,s)=>{this.requestQueue.push({fetchFn:e,resolve:t,reject:s}),this.processQueue()})}async processQueue(){if(!this.isProcessingQueue){for(this.isProcessingQueue=!0;this.requestQueue.length>0;){for(;this.activeRequests>=this.maxConcurrentRequests;)await this.delay(50);const e=this.requestQueue.shift();if(!e)break;this.activeRequests++,e.fetchFn().then(t=>{this.activeRequests--,e.resolve(t)}).catch(t=>{this.activeRequests--,e.reject(t)}),this.requestQueue.length>0&&await this.delay(this.getAdaptiveDelay())}this.isProcessingQueue=!1}}delay(e){return new Promise(t=>setTimeout(t,e))}async executeFetch(e,t={}){const s=t.timeout||this.config.timeout,r=t.retryAttempts||this.config.retryAttempts,n=t.retryDelay||this.config.retryDelay;let a;for(let l=0;l<=r;l++)try{const c=new AbortController,u=setTimeout(()=>c.abort(),s),o=await fetch(e,{method:"GET",signal:c.signal,headers:{Accept:"image/svg+xml, image/png, image/*"}});if(clearTimeout(u),!o.ok){if(o.status===429){const m=o.headers.get("Retry-After"),g=m?parseInt(m,10)*1e3:n*(l+1);this.debug(`Rate limited, waiting ${g}ms before retry`),await this.delay(g);continue}throw new Error(`HTTP ${o.status}: ${o.statusText}`)}if((o.headers&&o.headers.get("Content-Type")||"").includes("image/png")){const m=await o.arrayBuffer(),g=new Uint8Array(m);let v="";const C=8192;for(let p=0;p<g.length;p+=C)v+=String.fromCharCode(...g.subarray(p,p+C));return`<img src="data:image/png;base64,${btoa(v)}" alt="PlantUML diagram" class="gfmr-plantuml-png" />`}return await o.text()}catch(c){a=c,c.name==="AbortError"&&(a=new Error("Request timeout")),l<r&&(this.debug(`Retry attempt ${l+1}/${r} after error:`,c.message),await this.delay(n*(l+1)))}throw a}getQueueStatus(){return{queued:this.requestQueue.length,active:this.activeRequests,maxConcurrent:this.maxConcurrentRequests}}generateCacheKey(e){const t=e.trim().replace(/\r\n|\r/g,`2 `);let s=0;for(let r=0;r<t.length;r++){const n=t.charCodeAt(r);s=(s<<5)-s+n,s=s&s}return`plantuml_${Math.abs(s).toString(16)}_${this.config.format}`}getLocalCache(e){try{const t=localStorage.getItem(`gfmr_puml_${e}`);if(!t)return null;const s=JSON.parse(t);return Date.now()/1e3-s.ts>604800?(localStorage.removeItem(`gfmr_puml_${e}`),null):s.v!==this.cacheVersion?(localStorage.removeItem(`gfmr_puml_${e}`),null):s.svg}catch{return null}}setLocalCache(e,t){try{if(t.length>200*1024)return;localStorage.setItem(`gfmr_puml_${e}`,JSON.stringify({svg:t,ts:Math.floor(Date.now()/1e3),v:this.cacheVersion}))}catch(s){s&&s.name==="QuotaExceededError"&&this.clearAllLocalCache()}}clearAllLocalCache(){try{for(let e=localStorage.length-1;e>=0;e--){const t=localStorage.key(e);t&&t.startsWith("gfmr_puml_")&&localStorage.removeItem(t)}}catch{}}getAdaptiveDelay(){const e=this.recentResults.slice(-5);if(e.length<2)return 200;const t=e.filter(s=>!s).length;return t===0?50:t===1?200:500}sanitizeSvg(e){return typeof e=="string"&&e.indexOf("<svg")===-1?e:i.wpGfmSvgSanitizer.sanitize(e,i.wpGfmSvgSanitizer.getPlantUmlAllowedTags())}applySvg(e,t,s={}){const r=document.createElement("div"),n=i.wpGfmConstants?.CLASSES||{};r.className=n.plantUmlContainer||"gfmr-plantuml-container",r.setAttribute("data-ssr","true"),r.setAttribute("data-diagram-type",this.detectDiagramType(t));const a=document.createElement("div");if(a.className=n.plantUmlRendered||"gfmr-plantuml-rendered",a.innerHTML=t,r.appendChild(a),s.preserveSource){const l=document.createElement("div");l.className=n.plantUmlSource||"gfmr-plantuml-source",l.style.display="none",l.textContent=s.originalContent||"",r.appendChild(l)}this._replaceElement(e,r)}showLoading(e){const s=(i.wpGfmConstants?.CLASSES||{}).plantUmlLoading||"gfmr-plantuml-loading";e.classList.add(s),e.setAttribute("data-ssr","pending")}handleRenderError(e,t,s){return this.showError(s,e.message,t),{success:!1,error:e.message}}showError(e,t,s=""){const r=i.wpGfmConstants?.CLASSES||{},n=i.wpGfmConfig?.translations||{},a=n.plantuml_render_error||"PlantUML Render Error",l=n.plantuml_original_content||"Original Content",c=document.createElement("div");c.className=r.plantUmlError||"gfmr-plantuml-error",c.innerHTML=`1 (function(i){"use strict";if(i.gfmrPlantumlHandlerInitialized&&typeof module>"u")return;i.gfmrPlantumlHandlerInitialized=!0;class p{constructor(e=null){this.utils=e||i.wpGfmUtils,this.utils||console.warn("[GFMR PlantUML] WPGFMUtils not found, using limited functionality");const t=i.wpGfmConstants||{},s=t.PLANTUML_CONFIG||{};this.config={serverUrl:s.serverUrl||"https://www.plantuml.com/plantuml",format:s.format||"svg",timeout:s.timeout||1e4,retryAttempts:s.retryAttempts||1,retryDelay:s.retryDelay||1e3,cacheTtl:s.cacheTtl||604800};const r=i.wpGfmPlantUMLConfig||{};this.cacheVersion=r.cacheVersion||3;const n=t.PLANTUML_TYPES||{};this.startPatterns=n.startPatterns||["@startuml","@startmindmap","@startwbs","@startgantt","@startsalt","@startjson","@startyaml","@startditaa","@startdot","@startnwdiag","@startrackdiag","@startpacketdiag","@startactdiag","@startblockdiag","@startseqdiag"],this.blockdiagFamily=["nwdiag","rackdiag","packetdiag","actdiag","blockdiag","seqdiag"],this.blockdiagFamilyRegex=new RegExp("(?:^|[\\r\\n])[ \\t]*("+this.blockdiagFamily.join("|")+")\\b[ \\t]*\\{"),this.processedDiagrams=new WeakSet,this.renderCache=new Map,this.inflightRequests=new Map,this.encode64Table="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_",this.requestQueue=[],this.activeRequests=0,this.maxConcurrentRequests=s.maxConcurrentRequests||3,this.requestDelay=s.requestDelay||200,this.isProcessingQueue=!1,this.recentResults=[],this.debug("PlantUML handler initialized",{config:this.config})}isPlantUMLContent(e){return!e||typeof e!="string"?!1:this.startPatterns.some(t=>e.includes(t))}detectDiagramType(e){const t={"@startmindmap":"mindmap","@startwbs":"wbs","@startgantt":"gantt","@startsalt":"salt","@startjson":"json","@startyaml":"yaml","@startditaa":"ditaa","@startdot":"dot","@startnwdiag":"nwdiag","@startrackdiag":"rackdiag","@startpacketdiag":"packetdiag","@startactdiag":"actdiag","@startblockdiag":"blockdiag","@startseqdiag":"seqdiag"};for(const[s,r]of Object.entries(t))if(e.includes(s))return r;if(e.includes("@startuml")){const s=this.matchBlockdiagFamily(e);return s||this.detectUmlSubType(e)}return"unknown"}matchBlockdiagFamily(e){const t=this.blockdiagFamilyRegex.exec(e);return t?t[1]:null}normalizeContent(e){if(typeof e!="string"||!/@startuml/i.test(e))return e;const t=this.matchBlockdiagFamily(e);return t?e.replace(/(^|\r\n|\r|\n)@startuml/i,"$1@start"+t).replace(/(^|\r\n|\r|\n)@enduml/i,"$1@end"+t):e}detectUmlSubType(e){return(e.includes("->")||e.includes("-->")||e.includes("->>"))&&(e.includes("participant")||e.includes("actor"))?"sequence":e.includes("class ")||e.includes("{")||e.includes("extends")?"class":/\bstart\b/.test(e)&&/\bstop\b/.test(e)?"activity":e.includes("usecase")||e.includes("actor")?"usecase":"sequence"}encode(e){const t=this.encodeUtf8(e);if(i.pako&&i.pako.deflateRaw){const r=i.pako.deflateRaw(t,{level:9});return this.encode64(r)}const s="~h"+this.encodeHex(t);return s.length>4e3&&this.debug("Warning: Hex-encoded URL is long ("+s.length+" chars), large diagrams may fail"),s}encodeUtf8(e){return new TextEncoder().encode(e)}encodeHex(e){let t="";for(let s=0;s<e.length;s++)t+=e[s].toString(16).padStart(2,"0");return t}encode64(e){let t="";const s=e.length;for(let r=0;r<s;r+=3){const n=e[r],a=r+1<s?e[r+1]:0,c=r+2<s?e[r+2]:0;t+=this.append3bytes(n,a,c)}return t}append3bytes(e,t,s){const r=e>>2,n=(e&3)<<4|t>>4,a=(t&15)<<2|s>>6,c=s&63;return this.encode64Table.charAt(r&63)+this.encode64Table.charAt(n&63)+this.encode64Table.charAt(a&63)+this.encode64Table.charAt(c&63)}async render(e,t,s={}){if(!e||!this.isPlantUMLContent(e))return this.debug("Not PlantUML content"),null;if(e=this.normalizeContent(e),!t||!t.nodeType)throw new Error("Invalid target element");if(this.processedDiagrams.has(t))return this.debug("Diagram already processed"),null;this.debug("Rendering PlantUML diagram",{contentLength:e.length,type:this.detectDiagramType(e)}),this.showLoading(t);try{const r=this.generateCacheKey(e);if(this.renderCache.has(r)){const o=this.renderCache.get(r);return this.applySvg(t,o,s),this.processedDiagrams.add(t),this.debug("Using cached SVG (Map)"),{success:!0,cached:!0}}const n=this.getLocalCache(r);if(n)return this.renderCache.set(r,n),this.applySvg(t,n,s),this.processedDiagrams.add(t),this.debug("Using cached SVG (localStorage)"),{success:!0,cached:!0};let a;if(this.inflightRequests.has(r))a=this.inflightRequests.get(r);else{if((i.wpGfmPlantUMLConfig||{}).useProxy)a=this.enqueueRequest(()=>this.fetchViaProxy(e)).catch(u=>{this.debug("Proxy failed, falling back to direct mode:",u.message);const l=this.encode(e),d=this.buildRenderUrl(l);return this.fetchSvg(d,s)});else{const u=this.encode(e),l=this.buildRenderUrl(u);a=this.fetchSvg(l,s)}this.inflightRequests.set(r,a)}let c;try{c=await a}finally{this.inflightRequests.delete(r)}if(this.isSuppressedResult(c))return this.applySvg(t,this.buildSuppressedNoticeHtml(),s),this.processedDiagrams.add(t),this.debug("PlantUML feature suppressed by server"),{success:!0,suppressed:!0};if(this.isValidRenderResult(c)){const o=this.renderCache.has(r)?this.renderCache.get(r):this.sanitizeSvg(c);return this.applySvg(t,o,s),this.renderCache.has(r)||(this.renderCache.set(r,o),this.setLocalCache(r,o)),this.processedDiagrams.add(t),this.recentResults.push(!0),this.debug("PlantUML rendered successfully"),{success:!0,cached:!1}}throw new Error("Empty SVG response from server")}catch(r){return this.recentResults.push(!1),this.debug("Render error:",r),this.handleRenderError(r,e,t)}}buildRenderUrl(e){return`${this.config.serverUrl}/${this.config.format}/${e}`}isValidRenderResult(e){return!!(e&&(e.includes("<svg")||e.includes("<img ")||this.isSuppressedResult(e)))}isSuppressedResult(e){return!e||typeof e!="string"?!1:/has been suppressed/i.test(e)||e.includes("gfmr-plantuml-suppressed")}buildSuppressedNoticeHtml(){const e=i.wpGfmConfig?.translations||{},t=e.plantuml_suppressed_title||"Graphviz/DOT diagrams are not supported by the PlantUML server.",s=e.plantuml_suppressed_message||"Please use a self-hosted PlantUML server or an alternative diagram format.";return'<div class="gfmr-plantuml-error gfmr-plantuml-suppressed" role="note"><div class="gfmr-plantuml-error-header"><strong>\u26A0\uFE0F '+this.escapeHtml(t)+'</strong></div><div class="gfmr-plantuml-error-message">'+this.escapeHtml(s)+"</div></div>"}async fetchViaProxy(e){const t=i.wpGfmPlantUMLConfig||{};if(!t.ajaxUrl||!t.nonce)throw new Error("Proxy configuration not available");const s=new AbortController,r=setTimeout(()=>s.abort(),this.config.timeout);try{const n=await fetch(t.ajaxUrl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({action:"gfmr_render_plantuml",nonce:t.nonce,content:e}),signal:s.signal});if(clearTimeout(r),!n.ok){let o=`HTTP ${n.status}: ${n.statusText}`;try{const u=await n.json();u?.data?.message&&(o=u.data.message)}catch{}throw new Error(o)}const a=await n.json();if(a.success&&a.data&&a.data.svg&&this.isValidRenderResult(a.data.svg))return a.data.svg;const c=a?.data?.message??"Failed to render via proxy";throw new Error(c)}catch(n){throw clearTimeout(r),n}}async fetchSvg(e,t={}){return this.enqueueRequest(()=>this.executeFetch(e,t))}enqueueRequest(e){return new Promise((t,s)=>{this.requestQueue.push({fetchFn:e,resolve:t,reject:s}),this.processQueue()})}async processQueue(){if(!this.isProcessingQueue){for(this.isProcessingQueue=!0;this.requestQueue.length>0;){for(;this.activeRequests>=this.maxConcurrentRequests;)await this.delay(50);const e=this.requestQueue.shift();if(!e)break;this.activeRequests++,e.fetchFn().then(t=>{this.activeRequests--,e.resolve(t)}).catch(t=>{this.activeRequests--,e.reject(t)}),this.requestQueue.length>0&&await this.delay(this.getAdaptiveDelay())}this.isProcessingQueue=!1}}delay(e){return new Promise(t=>setTimeout(t,e))}async executeFetch(e,t={}){const s=t.timeout||this.config.timeout,r=t.retryAttempts||this.config.retryAttempts,n=t.retryDelay||this.config.retryDelay;let a;for(let c=0;c<=r;c++)try{const o=new AbortController,u=setTimeout(()=>o.abort(),s),l=await fetch(e,{method:"GET",signal:o.signal,headers:{Accept:"image/svg+xml, image/png, image/*"}});if(clearTimeout(u),!l.ok){if(l.status===429){const m=l.headers.get("Retry-After"),g=m?parseInt(m,10)*1e3:n*(c+1);this.debug(`Rate limited, waiting ${g}ms before retry`),await this.delay(g);continue}throw new Error(`HTTP ${l.status}: ${l.statusText}`)}if((l.headers&&l.headers.get("Content-Type")||"").includes("image/png")){const m=await l.arrayBuffer(),g=new Uint8Array(m);let v="";const C=8192;for(let f=0;f<g.length;f+=C)v+=String.fromCharCode(...g.subarray(f,f+C));return`<img src="data:image/png;base64,${btoa(v)}" alt="PlantUML diagram" class="gfmr-plantuml-png" />`}return await l.text()}catch(o){a=o,o.name==="AbortError"&&(a=new Error("Request timeout")),c<r&&(this.debug(`Retry attempt ${c+1}/${r} after error:`,o.message),await this.delay(n*(c+1)))}throw a}getQueueStatus(){return{queued:this.requestQueue.length,active:this.activeRequests,maxConcurrent:this.maxConcurrentRequests}}generateCacheKey(e){const t=e.trim().replace(/\r\n|\r/g,` 2 `);let s=0;for(let r=0;r<t.length;r++){const n=t.charCodeAt(r);s=(s<<5)-s+n,s=s&s}return`plantuml_${Math.abs(s).toString(16)}_${this.config.format}`}getLocalCache(e){try{const t=localStorage.getItem(`gfmr_puml_${e}`);if(!t)return null;const s=JSON.parse(t);return Date.now()/1e3-s.ts>604800?(localStorage.removeItem(`gfmr_puml_${e}`),null):s.v!==this.cacheVersion?(localStorage.removeItem(`gfmr_puml_${e}`),null):s.svg}catch{return null}}setLocalCache(e,t){try{if(t.length>200*1024)return;localStorage.setItem(`gfmr_puml_${e}`,JSON.stringify({svg:t,ts:Math.floor(Date.now()/1e3),v:this.cacheVersion}))}catch(s){s&&s.name==="QuotaExceededError"&&this.clearAllLocalCache()}}clearAllLocalCache(){try{for(let e=localStorage.length-1;e>=0;e--){const t=localStorage.key(e);t&&t.startsWith("gfmr_puml_")&&localStorage.removeItem(t)}}catch{}}getAdaptiveDelay(){const e=this.recentResults.slice(-5);if(e.length<2)return 200;const t=e.filter(s=>!s).length;return t===0?50:t===1?200:500}sanitizeSvg(e){return typeof e=="string"&&e.indexOf("<svg")===-1?e:i.wpGfmSvgSanitizer.sanitize(e,i.wpGfmSvgSanitizer.getPlantUmlAllowedTags())}applySvg(e,t,s={}){const r=document.createElement("div"),n=i.wpGfmConstants?.CLASSES||{};r.className=n.plantUmlContainer||"gfmr-plantuml-container",r.setAttribute("data-ssr","true"),r.setAttribute("data-diagram-type",this.detectDiagramType(t));const a=document.createElement("div");if(a.className=n.plantUmlRendered||"gfmr-plantuml-rendered",a.innerHTML=t,r.appendChild(a),s.preserveSource){const c=document.createElement("div");c.className=n.plantUmlSource||"gfmr-plantuml-source",c.style.display="none",c.textContent=s.originalContent||"",r.appendChild(c)}this._replaceElement(e,r)}showLoading(e){const s=(i.wpGfmConstants?.CLASSES||{}).plantUmlLoading||"gfmr-plantuml-loading";e.classList.add(s),e.setAttribute("data-ssr","pending")}handleRenderError(e,t,s){return this.showError(s,e.message,t),{success:!1,error:e.message}}showError(e,t,s=""){const r=i.wpGfmConstants?.CLASSES||{},n=i.wpGfmConfig?.translations||{},a=n.plantuml_render_error||"PlantUML Render Error",c=n.plantuml_original_content||"Original Content",o=document.createElement("div");o.className=r.plantUmlError||"gfmr-plantuml-error",o.innerHTML=` 3 3 <div class="gfmr-plantuml-error-header"> 4 4 <strong>${this.escapeHtml(a)}</strong> … … 7 7 ${s?` 8 8 <details class="gfmr-plantuml-error-details"> 9 <summary>${this.escapeHtml( l)}</summary>9 <summary>${this.escapeHtml(c)}</summary> 10 10 <pre><code>${this.escapeHtml(s)}</code></pre> 11 11 </details> 12 12 `:""} 13 `,this._replaceElement(e, c)}findUnprocessedElements(){const t=(i.wpGfmConstants?.SELECTORS?.plantUmlBlocks||["pre code.language-plantuml","pre code.language-puml",'[data-language="plantuml"]']).join(", "),s=Array.from(document.querySelectorAll(t)).filter(a=>!this.processedDiagrams.has(a)),r=document.querySelectorAll('pre code:not([class*="language-"]):not([data-gfmr-processed]), pre > code:not([class*="language-"]):not([data-gfmr-processed])'),n=Array.from(r).filter(a=>{if(this.processedDiagrams.has(a)||a.closest('[data-ssr="true"]'))return!1;const l=(a.textContent||"").trim();return/^@start(uml|mindmap|wbs|gantt|salt|json|yaml|ditaa|dot|nwdiag|rackdiag|packetdiag|actdiag|blockdiag|seqdiag)\b/i.test(l)});return[...new Set([...s,...n])]}renderElement(e){const t=e.textContent||e.innerText||"";return this.render(t,e,{preserveSource:!0,originalContent:t})}async renderBatch(e){if(e.length===0)return[];const t=e.map(r=>this.renderElement(r));return(await Promise.allSettled(t)).map(r=>r.status==="fulfilled"?r.value:(this.debug("Batch render error:",r.reason),{success:!1,error:r.reason?.message||"Unknown error"}))}async renderAll({lazyLoad:e=!1,threshold:t=5,immediateCount:s=3,rootMargin:r="400px 0px"}={}){const a=this.findUnprocessedElements().filter(d=>!d.closest('[data-ssr="true"]'));if(a.length===0)return this.debug("No PlantUML blocks found"),[];if(this.debug(`Processing ${a.length} PlantUML blocks`),!e||a.length<t)return this.renderBatch(a);const l=a.slice(0,s),c=a.slice(s),u=await this.renderBatch(l);return this.observeForLazyLoad(c,r),(i.requestIdleCallback||(d=>setTimeout(d,2e3)))(()=>{let d=0;const m=()=>{for(;d<c.length&&this.processedDiagrams.has(c[d]);)d++;if(d<c.length){const g=c[d++];this.renderElement(g).then(()=>{setTimeout(m,this.getAdaptiveDelay())})}};m()},{timeout:3e4}),u}observeForLazyLoad(e,t){if(typeof IntersectionObserver>"u"||e.length===0){this.renderBatch(e);return}const s=new IntersectionObserver(r=>{r.forEach(n=>{if(n.isIntersecting){const a=n.target;s.unobserve(a),this.renderElement(a)}})},{rootMargin:t,threshold:0});e.forEach(r=>{r.setAttribute("data-gfmr-lazy","true");const n=r.parentElement;n&&!n.hasAttribute("data-gfmr-lazy-styled")&&(n.setAttribute("data-gfmr-lazy-styled","true"),n.style.minHeight="3em"),s.observe(r)}),this.debug(`IntersectionObserver setup for ${e.length} PlantUML blocks`)}debug(...e){this.utils&&this.utils.debug?this.utils.debug("[PlantUML]",...e):i.console&&i.wpGfmConstants?.LOG_PREFIXES&&console.log("[GFMR PlantUML]",...e)}escapeHtml(e){return i.wpGfmUtils.escapeHtml(e)}_replaceElement(e,t){const s=e.parentNode&&e.parentNode.tagName?.toUpperCase()==="PRE"?e.parentNode:e;s.parentNode&&s.parentNode.replaceChild(t,s)}healthCheck(){return{status:"ok",serverUrl:this.config.serverUrl,format:this.config.format,cacheSize:this.renderCache.size,supportedPatterns:this.startPatterns}}}let h=null;function w(){return h||(h=new y,i.wpGfmPlantUML=h,i.WPGFMPlantUML=y,i.wpGfmRenderPlantUML=(f,e,t)=>h.render(f,e,t),i.document&&i.document.dispatchEvent(new CustomEvent("wpGfmPlantUMLReady",{detail:{plantUML:h}})),h.renderAll({lazyLoad:!0}).catch(function(f){h.debug("Auto-render failed:",f.message||f)}),h)}i.document&&i.document.readyState==="loading"?i.document.addEventListener("DOMContentLoaded",w):setTimeout(w,0),i.document&&i.document.addEventListener("wpGfmUtilsReady",w),typeof module<"u"&&module.exports&&(module.exports=y)})(typeof window<"u"?window:global);13 `,this._replaceElement(e,o)}findUnprocessedElements(){const t=(i.wpGfmConstants?.SELECTORS?.plantUmlBlocks||["pre code.language-plantuml","pre code.language-puml",'[data-language="plantuml"]']).join(", "),s=Array.from(document.querySelectorAll(t)).filter(a=>!this.processedDiagrams.has(a)),r=document.querySelectorAll('pre code:not([class*="language-"]):not([data-gfmr-processed]), pre > code:not([class*="language-"]):not([data-gfmr-processed])'),n=Array.from(r).filter(a=>{if(this.processedDiagrams.has(a)||a.closest('[data-ssr="true"]'))return!1;const c=(a.textContent||"").trim();return/^@start(uml|mindmap|wbs|gantt|salt|json|yaml|ditaa|dot|nwdiag|rackdiag|packetdiag|actdiag|blockdiag|seqdiag)\b/i.test(c)});return[...new Set([...s,...n])]}renderElement(e){const t=e.textContent||e.innerText||"";return this.render(t,e,{preserveSource:!0,originalContent:t})}async renderBatch(e){if(e.length===0)return[];const t=e.map(r=>this.renderElement(r));return(await Promise.allSettled(t)).map(r=>r.status==="fulfilled"?r.value:(this.debug("Batch render error:",r.reason),{success:!1,error:r.reason?.message||"Unknown error"}))}async renderAll({lazyLoad:e=!1,threshold:t=5,immediateCount:s=3,rootMargin:r="400px 0px"}={}){const a=this.findUnprocessedElements().filter(d=>!d.closest('[data-ssr="true"]'));if(a.length===0)return this.debug("No PlantUML blocks found"),[];if(this.debug(`Processing ${a.length} PlantUML blocks`),!e||a.length<t)return this.renderBatch(a);const c=a.slice(0,s),o=a.slice(s),u=await this.renderBatch(c);return this.observeForLazyLoad(o,r),(i.requestIdleCallback||(d=>setTimeout(d,2e3)))(()=>{let d=0;const m=()=>{for(;d<o.length&&this.processedDiagrams.has(o[d]);)d++;if(d<o.length){const g=o[d++];this.renderElement(g).then(()=>{setTimeout(m,this.getAdaptiveDelay())})}};m()},{timeout:3e4}),u}observeForLazyLoad(e,t){if(typeof IntersectionObserver>"u"||e.length===0){this.renderBatch(e);return}const s=new IntersectionObserver(r=>{r.forEach(n=>{if(n.isIntersecting){const a=n.target;s.unobserve(a),this.renderElement(a)}})},{rootMargin:t,threshold:0});e.forEach(r=>{r.setAttribute("data-gfmr-lazy","true");const n=r.parentElement;n&&!n.hasAttribute("data-gfmr-lazy-styled")&&(n.setAttribute("data-gfmr-lazy-styled","true"),n.style.minHeight="3em"),s.observe(r)}),this.debug(`IntersectionObserver setup for ${e.length} PlantUML blocks`)}debug(...e){this.utils&&this.utils.debug?this.utils.debug("[PlantUML]",...e):i.console&&i.wpGfmConstants?.LOG_PREFIXES&&console.log("[GFMR PlantUML]",...e)}escapeHtml(e){return i.wpGfmUtils.escapeHtml(e)}_replaceElement(e,t){const s=e.parentNode&&e.parentNode.tagName?.toUpperCase()==="PRE"?e.parentNode:e;s.parentNode&&s.parentNode.replaceChild(t,s)}healthCheck(){return{status:"ok",serverUrl:this.config.serverUrl,format:this.config.format,cacheSize:this.renderCache.size,supportedPatterns:this.startPatterns}}}let h=null;function y(){if(h)return h;h=new p,i.wpGfmPlantUML=h,i.WPGFMPlantUML=p,i.wpGfmRenderPlantUML=(e,t,s)=>h.render(e,t,s),i.document&&i.document.dispatchEvent(new CustomEvent("wpGfmPlantUMLReady",{detail:{plantUML:h}}));const w=function(){h.renderAll({lazyLoad:!0}).catch(function(e){h.debug("Auto-render failed:",e.message||e)})};return i.document&&i.document.prerendering===!0?i.document.addEventListener("prerenderingchange",w,{once:!0}):w(),h}i.document&&i.document.readyState==="loading"?i.document.addEventListener("DOMContentLoaded",y):setTimeout(y,0),i.document&&i.document.addEventListener("wpGfmUtilsReady",y),typeof module<"u"&&module.exports&&(module.exports=p)})(typeof window<"u"?window:global); -
markdown-renderer-for-github/trunk/assets/js/gfmr-worker-manager.js
r3620678 r3657956 544 544 /** 545 545 * Highlight code using worker 546 * @param {string} code - Code to highlight 547 * @param {string} language - Language identifier 548 * @param {string} theme - Optional theme override 546 * @param {string} code - Code to highlight 547 * @param {string} language - Language identifier 548 * @param {string} theme - Optional theme override 549 * @param {Object} options - Optional per-request overrides. 550 * @param {boolean} options.forceWorker - Skip the line-count threshold and 551 * use the worker regardless of block size (#1336). The caller 552 * sets this when the main-thread highlighter is not loaded, so 553 * "short block" would otherwise mean parsing the ~2.4MB Shiki 554 * bundle on the main thread just to render a few lines. 549 555 * @return {Promise<Object>} 550 556 */ 551 async highlightCode( code, language, theme ) {557 async highlightCode( code, language, theme, options = {} ) { 552 558 // Worker init permanently failed (e.g. an unbundled language or a 553 559 // worker load error). Bypass the worker so this request resolves to … … 559 565 560 566 // Check if should use fallback based on threshold 561 if ( this.config.threshold > 0 ) {567 if ( this.config.threshold > 0 && ! options.forceWorker ) { 562 568 const lineCount = ( code.match( /\n/g ) || [] ).length + 1; 563 569 if ( lineCount < this.config.threshold ) { … … 752 758 // Create singleton instance when config is available 753 759 let workerManagerInstance = null; 760 // In-flight creation, shared by concurrent callers. create() is async, so 761 // without this every caller that arrives before the first one resolves 762 // passes the `workerManagerInstance` guard and builds its own manager — 763 // spawning a second Worker and orphaning whichever instance loses the 764 // assignment race (its metrics and pending queue included). #1336 made this 765 // observable by asking for the manager once per block in two places. 766 let workerManagerPromise = null; 754 767 755 768 /** … … 757 770 * @return {Promise<GFMRWorkerManager|null>} 758 771 */ 759 asyncfunction getWorkerManager() {772 function getWorkerManager() { 760 773 if ( workerManagerInstance ) { 761 return workerManagerInstance;774 return Promise.resolve( workerManagerInstance ); 762 775 } 763 776 764 777 // Wait for config if not available yet 765 778 if ( ! global.wpGfmWorkerConfig ) { 766 return null; 767 } 768 769 workerManagerInstance = await GFMRWorkerManager.create( 770 global.wpGfmWorkerConfig 771 ); 772 773 // Auto-initialize if created 774 if ( 775 workerManagerInstance && 776 global.wpGfmWorkerConfig.autoInit !== false 777 ) { 778 workerManagerInstance.initialize().catch( ( err ) => { 779 console.warn( '[GFMR WorkerManager] Auto-init failed:', err ); 780 } ); 781 } 782 783 return workerManagerInstance; 779 return Promise.resolve( null ); 780 } 781 782 if ( ! workerManagerPromise ) { 783 workerManagerPromise = GFMRWorkerManager.create( 784 global.wpGfmWorkerConfig 785 ) 786 .then( ( manager ) => { 787 workerManagerInstance = manager; 788 789 // Auto-initialize if created 790 if ( 791 manager && 792 global.wpGfmWorkerConfig.autoInit !== false 793 ) { 794 manager.initialize().catch( ( err ) => { 795 console.warn( 796 '[GFMR WorkerManager] Auto-init failed:', 797 err 798 ); 799 } ); 800 } 801 802 if ( ! manager ) { 803 // Nothing cached: let a later caller retry. 804 workerManagerPromise = null; 805 } 806 807 return manager; 808 } ) 809 .catch( ( error ) => { 810 workerManagerPromise = null; 811 throw error; 812 } ); 813 } 814 815 return workerManagerPromise; 784 816 } 785 817 -
markdown-renderer-for-github/trunk/assets/js/gfmr-worker-manager.min.js
r3632612 r3657956 1 (function( s){"use strict";if(s.gfmrWorkerManagerInitialized&&typeof module>"u")return;s.gfmrWorkerManagerInitialized=!0;const m=3e4,d=1e4,f=1e4,g=5e3,w=6e4,T=3e3,p=10;class a{constructor(e={}){this._coreLanguagesExplicit=Array.isArray(e.coreLanguages),this.config={enabled:e.enabled!==!1,workerPath:e.workerPath||"",shikiPath:e.shikiPath||"",defaultTheme:e.defaultTheme||"github-light",customThemes:Array.isArray(e.customThemes)?e.customThemes:[],coreLanguages:e.coreLanguages||["javascript","typescript","python","php","html","css","json","bash"],aliases:e.aliases||typeof s<"u"&&s.GFMR_LANG_ALIASES||typeof window<"u"&&window.GFMR_LANG_ALIASES||{},fallbacks:e.fallbacks||typeof s<"u"&&s.GFMR_LANG_FALLBACKS||typeof window<"u"&&window.GFMR_LANG_FALLBACKS||{},threshold:e.threshold||0,requestTimeout:e.requestTimeout||f,dynamicTimeout:e.dynamicTimeout!==!1,...e},this.worker=null,this.isReady=!1,this.isInitializing=!1,this.initFailed=!1,this.requestIdCounter=0,this.pendingRequests=new Map,this.pendingQueue=[],this.idleTimer=null,this._initTimer=null,this.initPromise=null,this.metrics={requestCount:0,successCount:0,errorCount:0,fallbackCount:0,totalProcessingTime:0},this.debug=this.config.debug||typeof s.wpGfmConfig<"u"&&s.wpGfmConfig.debug===!0,this.log("WorkerManager created",this.config)}static isSupported(){return typeof Worker<"u"}static async create(e={}){return!e.workerPath&&s.wpGfmWorkerConfig&&(e={...s.wpGfmWorkerConfig,...e}),a.isSupported()?e.enabled===!1?((e.debug||typeof s.wpGfmConfig<"u"&&s.wpGfmConfig.debug===!0)&&console.log("[GFMR WorkerManager] Workers disabled by configuration"),null):!e.workerPath||!e.shikiPath?(console.warn("[GFMR WorkerManager] Missing required paths"),null):new a(e):(console.warn("[GFMR WorkerManager] Web Workers not supported"),null)}async initialize(){if(this.isReady)return!0;if(this.initPromise)return this.initPromise;this.isInitializing=!0,this.initPromise=new Promise((e,t)=>{const r=performance.now();try{this.log("Creating worker..."),this.worker=new Worker(this.config.workerPath),this.worker.onmessage=i=>{this._handleMessage(i.data,e,r)},this.worker.onerror=i=>{this.log("Worker error:",i),this._markInitFailed(),t(new Error(`Worker error: ${i.message}`))},this._initTimer=setTimeout(()=>{this.isReady||(this.log(`Worker init timed out after ${d}ms`),this._markInitFailed(),e(!1))},d)}catch(i){this.log("Failed to create worker:",i),this._markInitFailed(),t(i)}});try{return await this.initPromise}catch(e){throw this.initPromise=null,e}}_handleMessage(e,t,r){const{type:i,id:n,...o}=e;if(this.log("Received message:",i,n),i==="workerReady"){this.log("Worker script loaded, sending init..."),this._sendInit();return}if(i==="ready"){this._clearInitTimer();const l=performance.now()-r;this.log(`Worker initialized in ${l.toFixed(2)}ms`),this.isReady=!0,this.isInitializing=!1,this._processQueue(),this._resetIdleTimer(),t&&t(!0);return}if(i==="initError"){this.log("Worker init error:",o.message),this._markInitFailed(),t&&t(!1);return}const u=this.pendingRequests.get(n);u&&(clearTimeout(u.timeoutId),this.pendingRequests.delete(n),i==="error"?u.reject(new Error(o.message)):u.resolve({type:i,...o})),this._resetIdleTimer()}_sendInit(){this.worker.postMessage({type:"init",id:++this.requestIdCounter,config:{shikiPath:this.config.shikiPath,defaultTheme:this.config.defaultTheme,customThemes:this.config.customThemes,coreLanguages:this._resolveInitialLanguages(),aliases:this.config.aliases,fallbacks:this.config.fallbacks}})}_resolveInitialLanguages(){if(this._coreLanguagesExplicit)return this.config.coreLanguages;const e=typeof window<"u"&&typeof window.wpGfmMain?.collectPageLanguages=="function"?window.wpGfmMain.collectPageLanguages():null;return Array.isArray(e)&&e.length>0?e:this.config.coreLanguages}_processQueue(){for(this.log(`Processing ${this.pendingQueue.length} queued requests`);this.pendingQueue.length>0;){const e=this.pendingQueue.shift();this._sendRequest(e.messageType,e.data).then(e.resolve).catch(e.reject)}}_fallbackResult(e,t){return this.metrics.fallbackCount++,{fallback:!0,code:e,language:t}}_clearInitTimer(){this._initTimer&&(clearTimeout(this._initTimer),this._initTimer=null)}_markInitFailed(){this._clearInitTimer(),this.isInitializing=!1,this.initFailed=!0,this._failQueue()}_failQueue(){for(this.pendingQueue.length>0&&this.log(`Init failed: routing ${this.pendingQueue.length} queued request(s) to the main thread`);this.pendingQueue.length>0;){const e=this.pendingQueue.shift();e.resolve(this._fallbackResult(e.data?.code,e.data?.language))}}_calculateTimeout(e){if(!this.config.dynamicTimeout||!e)return this.config.requestTimeout;const t=(e.match(/\n/g)||[]).length+1,r=this.config.requestTimeout+t*p;return Math.max(g,Math.min(r,w))}_sendRequest(e,t,r){return new Promise((i,n)=>{const o=++this.requestIdCounter,u=r||(e==="highlight"?this._calculateTimeout(t.code):this.config.requestTimeout),l=setTimeout(()=>{this.pendingRequests.delete(o),n(new Error(`Request timeout for ${e} (${u}ms)`))},u);this.pendingRequests.set(o,{resolve:i,reject:n,timeoutId:l}),this.worker.postMessage({type:e,id:o,...t}),this.metrics.requestCount++})}async highlightCode(e,t,r){if(this.initFailed)return this._fallbackResult(e,t);if(this.config.threshold>0&&(e.match(/\n/g)||[]).length+1<this.config.threshold)return this._fallbackResult(e,t);if(!this.isReady)return this.isInitializing||this.initialize().catch(i=>{this.log("Initialization failed:",i)}),new Promise((i,n)=>{this.pendingQueue.push({messageType:"highlight",data:{code:e,language:t,theme:r},resolve:i,reject:n})});try{const i=await this._sendRequest("highlight",{code:e,language:t,theme:r||this.config.defaultTheme});return this.metrics.successCount++,this.metrics.totalProcessingTime+=i.processingTime||0,i}catch(i){throw this.metrics.errorCount++,i}}async loadLanguage(e){if(!this.isReady)throw new Error("Worker not ready");return this._sendRequest("loadLanguage",{language:e})}async switchTheme(e){if(!this.isReady)throw new Error("Worker not ready");return this.config.defaultTheme=e,this._sendRequest("switchTheme",{theme:e})}async getStatus(){if(!this.worker)return{available:!1,isReady:!1,metrics:this.metrics};if(!this.isReady)return{available:!0,isReady:!1,isInitializing:this.isInitializing,queueLength:this.pendingQueue.length,metrics:this.metrics};try{return{available:!0,isReady:!0,...await this._sendRequest("getStatus",{},T),metrics:this.metrics}}catch(e){return{available:!0,isReady:this.isReady,error:e.message,metrics:this.metrics}}}_resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=setTimeout(()=>{this.log("Idle timeout reached, terminating worker"),this.terminate()},m)}terminate(){this._clearInitTimer(),this.idleTimer&&(clearTimeout(this.idleTimer),this.idleTimer=null);for(const[e,t]of this.pendingRequests)clearTimeout(t.timeoutId),t.reject(new Error("Worker terminated"));this.pendingRequests.clear();for(const e of this.pendingQueue)e.reject(new Error("Worker terminated"));this.pendingQueue=[],this.worker&&(this.worker.onmessage=null,this.worker.onerror=null),this.worker&&this.worker.terminate(),this.worker=null,this.isReady=!1,this.isInitializing=!1,this.initFailed=!1,this.initPromise=null,this.log("Worker terminated")}log(...e){this.debug&&console.log("[GFMR WorkerManager]",...e)}}s.GFMRWorkerManager=a;let h=null;async function c(){return h||(s.wpGfmWorkerConfig?(h=await a.create(s.wpGfmWorkerConfig),h&&s.wpGfmWorkerConfig.autoInit!==!1&&h.initialize().catch(k=>{console.warn("[GFMR WorkerManager] Auto-init failed:",k)}),h):null)}s.getGFMRWorkerManager=c,s.document&&s.document.dispatchEvent(new CustomEvent("gfmrWorkerManagerReady",{detail:{GFMRWorkerManager:a,getWorkerManager:c}})),typeof module<"u"&&module.exports&&(module.exports=a)})(typeof window<"u"?window:global);1 (function(t){"use strict";if(t.gfmrWorkerManagerInitialized&&typeof module>"u")return;t.gfmrWorkerManagerInitialized=!0;const g=3e4,m=1e4,w=1e4,T=5e3,k=6e4,p=3e3,_=10;class o{constructor(e={}){this._coreLanguagesExplicit=Array.isArray(e.coreLanguages),this.config={enabled:e.enabled!==!1,workerPath:e.workerPath||"",shikiPath:e.shikiPath||"",defaultTheme:e.defaultTheme||"github-light",customThemes:Array.isArray(e.customThemes)?e.customThemes:[],coreLanguages:e.coreLanguages||["javascript","typescript","python","php","html","css","json","bash"],aliases:e.aliases||typeof t<"u"&&t.GFMR_LANG_ALIASES||typeof window<"u"&&window.GFMR_LANG_ALIASES||{},fallbacks:e.fallbacks||typeof t<"u"&&t.GFMR_LANG_FALLBACKS||typeof window<"u"&&window.GFMR_LANG_FALLBACKS||{},threshold:e.threshold||0,requestTimeout:e.requestTimeout||w,dynamicTimeout:e.dynamicTimeout!==!1,...e},this.worker=null,this.isReady=!1,this.isInitializing=!1,this.initFailed=!1,this.requestIdCounter=0,this.pendingRequests=new Map,this.pendingQueue=[],this.idleTimer=null,this._initTimer=null,this.initPromise=null,this.metrics={requestCount:0,successCount:0,errorCount:0,fallbackCount:0,totalProcessingTime:0},this.debug=this.config.debug||typeof t.wpGfmConfig<"u"&&t.wpGfmConfig.debug===!0,this.log("WorkerManager created",this.config)}static isSupported(){return typeof Worker<"u"}static async create(e={}){return!e.workerPath&&t.wpGfmWorkerConfig&&(e={...t.wpGfmWorkerConfig,...e}),o.isSupported()?e.enabled===!1?((e.debug||typeof t.wpGfmConfig<"u"&&t.wpGfmConfig.debug===!0)&&console.log("[GFMR WorkerManager] Workers disabled by configuration"),null):!e.workerPath||!e.shikiPath?(console.warn("[GFMR WorkerManager] Missing required paths"),null):new o(e):(console.warn("[GFMR WorkerManager] Web Workers not supported"),null)}async initialize(){if(this.isReady)return!0;if(this.initPromise)return this.initPromise;this.isInitializing=!0,this.initPromise=new Promise((e,i)=>{const n=performance.now();try{this.log("Creating worker..."),this.worker=new Worker(this.config.workerPath),this.worker.onmessage=s=>{this._handleMessage(s.data,e,n)},this.worker.onerror=s=>{this.log("Worker error:",s),this._markInitFailed(),i(new Error(`Worker error: ${s.message}`))},this._initTimer=setTimeout(()=>{this.isReady||(this.log(`Worker init timed out after ${m}ms`),this._markInitFailed(),e(!1))},m)}catch(s){this.log("Failed to create worker:",s),this._markInitFailed(),i(s)}});try{return await this.initPromise}catch(e){throw this.initPromise=null,e}}_handleMessage(e,i,n){const{type:s,id:r,...a}=e;if(this.log("Received message:",s,r),s==="workerReady"){this.log("Worker script loaded, sending init..."),this._sendInit();return}if(s==="ready"){this._clearInitTimer();const c=performance.now()-n;this.log(`Worker initialized in ${c.toFixed(2)}ms`),this.isReady=!0,this.isInitializing=!1,this._processQueue(),this._resetIdleTimer(),i&&i(!0);return}if(s==="initError"){this.log("Worker init error:",a.message),this._markInitFailed(),i&&i(!1);return}const h=this.pendingRequests.get(r);h&&(clearTimeout(h.timeoutId),this.pendingRequests.delete(r),s==="error"?h.reject(new Error(a.message)):h.resolve({type:s,...a})),this._resetIdleTimer()}_sendInit(){this.worker.postMessage({type:"init",id:++this.requestIdCounter,config:{shikiPath:this.config.shikiPath,defaultTheme:this.config.defaultTheme,customThemes:this.config.customThemes,coreLanguages:this._resolveInitialLanguages(),aliases:this.config.aliases,fallbacks:this.config.fallbacks}})}_resolveInitialLanguages(){if(this._coreLanguagesExplicit)return this.config.coreLanguages;const e=typeof window<"u"&&typeof window.wpGfmMain?.collectPageLanguages=="function"?window.wpGfmMain.collectPageLanguages():null;return Array.isArray(e)&&e.length>0?e:this.config.coreLanguages}_processQueue(){for(this.log(`Processing ${this.pendingQueue.length} queued requests`);this.pendingQueue.length>0;){const e=this.pendingQueue.shift();this._sendRequest(e.messageType,e.data).then(e.resolve).catch(e.reject)}}_fallbackResult(e,i){return this.metrics.fallbackCount++,{fallback:!0,code:e,language:i}}_clearInitTimer(){this._initTimer&&(clearTimeout(this._initTimer),this._initTimer=null)}_markInitFailed(){this._clearInitTimer(),this.isInitializing=!1,this.initFailed=!0,this._failQueue()}_failQueue(){for(this.pendingQueue.length>0&&this.log(`Init failed: routing ${this.pendingQueue.length} queued request(s) to the main thread`);this.pendingQueue.length>0;){const e=this.pendingQueue.shift();e.resolve(this._fallbackResult(e.data?.code,e.data?.language))}}_calculateTimeout(e){if(!this.config.dynamicTimeout||!e)return this.config.requestTimeout;const i=(e.match(/\n/g)||[]).length+1,n=this.config.requestTimeout+i*_;return Math.max(T,Math.min(n,k))}_sendRequest(e,i,n){return new Promise((s,r)=>{const a=++this.requestIdCounter,h=n||(e==="highlight"?this._calculateTimeout(i.code):this.config.requestTimeout),c=setTimeout(()=>{this.pendingRequests.delete(a),r(new Error(`Request timeout for ${e} (${h}ms)`))},h);this.pendingRequests.set(a,{resolve:s,reject:r,timeoutId:c}),this.worker.postMessage({type:e,id:a,...i}),this.metrics.requestCount++})}async highlightCode(e,i,n,s={}){if(this.initFailed)return this._fallbackResult(e,i);if(this.config.threshold>0&&!s.forceWorker&&(e.match(/\n/g)||[]).length+1<this.config.threshold)return this._fallbackResult(e,i);if(!this.isReady)return this.isInitializing||this.initialize().catch(r=>{this.log("Initialization failed:",r)}),new Promise((r,a)=>{this.pendingQueue.push({messageType:"highlight",data:{code:e,language:i,theme:n},resolve:r,reject:a})});try{const r=await this._sendRequest("highlight",{code:e,language:i,theme:n||this.config.defaultTheme});return this.metrics.successCount++,this.metrics.totalProcessingTime+=r.processingTime||0,r}catch(r){throw this.metrics.errorCount++,r}}async loadLanguage(e){if(!this.isReady)throw new Error("Worker not ready");return this._sendRequest("loadLanguage",{language:e})}async switchTheme(e){if(!this.isReady)throw new Error("Worker not ready");return this.config.defaultTheme=e,this._sendRequest("switchTheme",{theme:e})}async getStatus(){if(!this.worker)return{available:!1,isReady:!1,metrics:this.metrics};if(!this.isReady)return{available:!0,isReady:!1,isInitializing:this.isInitializing,queueLength:this.pendingQueue.length,metrics:this.metrics};try{return{available:!0,isReady:!0,...await this._sendRequest("getStatus",{},p),metrics:this.metrics}}catch(e){return{available:!0,isReady:this.isReady,error:e.message,metrics:this.metrics}}}_resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=setTimeout(()=>{this.log("Idle timeout reached, terminating worker"),this.terminate()},g)}terminate(){this._clearInitTimer(),this.idleTimer&&(clearTimeout(this.idleTimer),this.idleTimer=null);for(const[e,i]of this.pendingRequests)clearTimeout(i.timeoutId),i.reject(new Error("Worker terminated"));this.pendingRequests.clear();for(const e of this.pendingQueue)e.reject(new Error("Worker terminated"));this.pendingQueue=[],this.worker&&(this.worker.onmessage=null,this.worker.onerror=null),this.worker&&this.worker.terminate(),this.worker=null,this.isReady=!1,this.isInitializing=!1,this.initFailed=!1,this.initPromise=null,this.log("Worker terminated")}log(...e){this.debug&&console.log("[GFMR WorkerManager]",...e)}}t.GFMRWorkerManager=o;let d=null,l=null;function f(){return d?Promise.resolve(d):t.wpGfmWorkerConfig?(l||(l=o.create(t.wpGfmWorkerConfig).then(u=>(d=u,u&&t.wpGfmWorkerConfig.autoInit!==!1&&u.initialize().catch(e=>{console.warn("[GFMR WorkerManager] Auto-init failed:",e)}),u||(l=null),u)).catch(u=>{throw l=null,u})),l):Promise.resolve(null)}t.getGFMRWorkerManager=f,t.document&&t.document.dispatchEvent(new CustomEvent("gfmrWorkerManagerReady",{detail:{GFMRWorkerManager:o,getWorkerManager:f}})),typeof module<"u"&&module.exports&&(module.exports=o)})(typeof window<"u"?window:global); -
markdown-renderer-for-github/trunk/blocks/markdown/constants.js
r3620678 r3657956 2 2 * Constants and utility functions for the Markdown block editor 3 3 * 4 * @package WpGfmRenderer4 * @package 5 5 */ 6 6 … … 30 30 * Validate language code format 31 31 * @param {string} code - Language code to validate 32 * @return s{boolean}32 * @return {boolean} 33 33 */ 34 34 export const isValidLanguageCode = ( code ) => { 35 if ( ! code || typeof code !== 'string' ) return false; 35 if ( ! code || typeof code !== 'string' ) { 36 return false; 37 } 36 38 // Normalize to lowercase for validation 37 39 const normalized = code.toLowerCase().trim(); … … 42 44 * Sanitize language code 43 45 * @param {string} code - Language code to sanitize 44 * @return s{string|null}46 * @return {string|null} 45 47 */ 46 48 export const sanitizeLangCode = ( code ) => { 47 if ( ! code ) return null; 49 if ( ! code ) { 50 return null; 51 } 48 52 const sanitized = code.toLowerCase().trim().slice( 0, 5 ); 49 53 return isValidLanguageCode( sanitized ) ? sanitized : null; … … 56 60 // Mermaid diagram type patterns (content must start with one of these) 57 61 export const MERMAID_START_PATTERNS = [ 58 'graph', 'flowchart', 'sequenceDiagram', 'classDiagram', 59 'pie', 'gantt', 'stateDiagram', 'erDiagram', 'gitGraph', 'gitgraph', 60 'journey' 62 'graph', 63 'flowchart', 64 'sequenceDiagram', 65 'classDiagram', 66 'pie', 67 'gantt', 68 'stateDiagram', 69 'erDiagram', 70 'gitGraph', 71 'gitgraph', 72 'journey', 61 73 ]; 62 74 … … 65 77 66 78 // Patterns that indicate already-rendered SVG (not Mermaid source) 67 export const SVG_EXCLUSION_PATTERNS = [ '#gfmr-mermaid-', 'font-family:', '<svg', '</svg>' ]; 79 export const SVG_EXCLUSION_PATTERNS = [ 80 '#gfmr-mermaid-', 81 'font-family:', 82 '<svg', 83 '</svg>', 84 ]; 68 85 69 86 // Class-based Mermaid selectors (Phase 1 detection) … … 74 91 '.shiki .language-mermaid', 75 92 '[data-language="mermaid"]', 76 'pre[class*="language-mermaid"]' 93 'pre[class*="language-mermaid"]', 77 94 ]; 78 95 … … 85 102 'pre code', 86 103 '.gfmr-markdown-rendered-preview pre code', 87 '.gfmr-markdown-rendered-preview code' 104 '.gfmr-markdown-rendered-preview code', 88 105 ]; 89 106 … … 94 111 // PlantUML @start* patterns 95 112 export const PLANTUML_START_PATTERNS = [ 96 '@startuml', '@startmindmap', '@startwbs', '@startgantt', 97 '@startsalt', '@startjson', '@startyaml', '@startditaa', '@startdot', 113 '@startuml', 114 '@startmindmap', 115 '@startwbs', 116 '@startgantt', 117 '@startsalt', 118 '@startjson', 119 '@startyaml', 120 '@startditaa', 121 '@startdot', 98 122 ]; 99 123 … … 102 126 // before paying for an AJAX round-trip (Issue #628 / catalog C5). 103 127 export const PLANTUML_END_PATTERNS = [ 104 '@enduml', '@endmindmap', '@endwbs', '@endgantt', 105 '@endsalt', '@endjson', '@endyaml', '@endditaa', '@enddot', 128 '@enduml', 129 '@endmindmap', 130 '@endwbs', 131 '@endgantt', 132 '@endsalt', 133 '@endjson', 134 '@endyaml', 135 '@endditaa', 136 '@enddot', 106 137 ]; 107 138 … … 139 170 // language class is the only signal. Reuses PlantUML's processed-marker so the 140 171 // two passes cannot double-process the same element. 141 export const C4_BLOCK_SELECTOR = C4_FENCE_LANGUAGES 142 .map( ( lang ) => `code.language-${ lang }:not([data-gfmr-plantuml-processed])` )143 .join( ', ' );172 export const C4_BLOCK_SELECTOR = C4_FENCE_LANGUAGES.map( 173 ( lang ) => `code.language-${ lang }:not([data-gfmr-plantuml-processed])` 174 ).join( ', ' ); 144 175 145 176 // Resolve a C4 fence token from an element's class list, or null when absent. … … 158 189 159 190 // Detect AbortSignal.any() support once at module load (available in Chrome 116+, FF 115+, Safari 17.4+) 160 export const HAS_ABORT_SIGNAL_ANY = typeof AbortSignal !== 'undefined' && typeof AbortSignal.any === 'function'; 191 export const HAS_ABORT_SIGNAL_ANY = 192 typeof AbortSignal !== 'undefined' && typeof AbortSignal.any === 'function'; 161 193 162 194 // ============================================ … … 166 198 /** 167 199 * Check if debug mode is enabled via config or URL parameter 168 * @return s{boolean} True if debug mode is enabled200 * @return {boolean} True if debug mode is enabled 169 201 */ 170 202 export const isDebugEnabled = () => { 171 return window.wpGfmConfig?.debug || 203 return ( 204 window.wpGfmConfig?.debug || 172 205 window.location.search.includes( 'debug=true' ) || 173 206 window.location.search.includes( 'gfmr-debug=1' ) || 174 207 window.location.search.includes( 'debug=1' ) || 175 false; 208 false 209 ); 176 210 }; 177 211 … … 204 238 * 205 239 * @param {string} text - Text to escape 206 * @return s{string} Escaped text240 * @return {string} Escaped text 207 241 */ 208 242 export const escapeMarkdownAlt = ( text ) => { … … 218 252 * 219 253 * @param {string} url - URL to encode 220 * @return s{string} Encoded URL wrapped in angle brackets if needed254 * @return {string} Encoded URL wrapped in angle brackets if needed 221 255 */ 222 256 export const encodeMarkdownUrl = ( url ) => { … … 234 268 * Validate image URL format 235 269 * @param {string} url - URL to validate 236 * @return s{boolean} - True if valid image URL270 * @return {boolean} - True if valid image URL 237 271 */ 238 272 export const isValidImageUrl = ( url ) => { … … 256 290 * Check if content is Mermaid diagram source (not rendered SVG) 257 291 * @param {string} content - Content to check 258 * @return s{boolean} True if content is Mermaid source292 * @return {boolean} True if content is Mermaid source 259 293 */ 260 294 export const isMermaidContent = ( content ) => { 261 if ( ! content ) return false; 262 const hasPattern = MERMAID_START_PATTERNS.some( p => content.startsWith( p ) ) || 263 MERMAID_INCLUDE_PATTERNS.some( p => content.includes( p ) ); 264 const isRenderedSvg = SVG_EXCLUSION_PATTERNS.some( e => content.includes( e ) ); 295 if ( ! content ) { 296 return false; 297 } 298 const hasPattern = 299 MERMAID_START_PATTERNS.some( ( p ) => content.startsWith( p ) ) || 300 MERMAID_INCLUDE_PATTERNS.some( ( p ) => content.includes( p ) ); 301 const isRenderedSvg = SVG_EXCLUSION_PATTERNS.some( ( e ) => 302 content.includes( e ) 303 ); 265 304 return hasPattern && ! isRenderedSvg; 266 305 }; … … 284 323 * 285 324 * @param {string} bgColor - Background color (used as the CSS variable fallback) 286 * @return s{string} CSS style string325 * @return {string} CSS style string 287 326 */ 288 327 export const getMermaidContainerStyle = ( bgColor = 'transparent' ) => 289 `text-align: center; margin: 20px 0; padding: 15px; background: var(--gfmr-mermaid-block-bg, ${ bgColor}); border-radius: 6px; overflow-x: auto; border: none;`;328 `text-align: center; margin: 20px 0; padding: 15px; background: var(--gfmr-mermaid-block-bg, ${ bgColor }); border-radius: 6px; overflow-x: auto; border: none;`; 290 329 291 330 /** 292 331 * Build Mermaid error HTML template 293 332 * @param {string} errorMessage - Error message 294 * @param {string} code - Original Mermaid code295 * @return s{string} Error HTML333 * @param {string} code - Original Mermaid code 334 * @return {string} Error HTML 296 335 */ 297 336 export const buildMermaidErrorHTML = ( errorMessage, code ) => ` 298 337 <div class="gfmr-mermaid-error-unified" style="color: #d1242f; background: #fff8f8; border: 1px solid #ffcdd2; border-radius: 6px; padding: 15px; margin: 10px 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; font-size: 14px; line-height: 1.5;"> 299 338 <div style="font-weight: 600; margin-bottom: 8px;">🚨 Mermaid Rendering Error (editor)</div> 300 <div style="margin-bottom: 12px; font-size: 13px;">${errorMessage || 'Unknown error occurred'}</div> 339 <div style="margin-bottom: 12px; font-size: 13px;">${ 340 errorMessage || 'Unknown error occurred' 341 }</div> 301 342 <details style="margin-top: 10px;"> 302 343 <summary style="cursor: pointer; font-size: 13px; margin-bottom: 8px;">View Original Code</summary> 303 <pre style="background: #f6f8fa; border: 1px solid #d1d9e0; border-radius: 4px; padding: 10px; margin: 5px 0; overflow-x: auto; font-size: 12px; font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, monospace; white-space: pre-wrap; word-wrap: break-word;">${ code}</pre>344 <pre style="background: #f6f8fa; border: 1px solid #d1d9e0; border-radius: 4px; padding: 10px; margin: 5px 0; overflow-x: auto; font-size: 12px; font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, monospace; white-space: pre-wrap; word-wrap: break-word;">${ code }</pre> 304 345 </details> 305 346 </div> … … 309 350 * Check if text content looks like PlantUML source 310 351 * @param {string} text - Text to check 311 * @return s{boolean}352 * @return {boolean} 312 353 */ 313 354 export const isPlantUMLContent = ( text ) => { 314 355 const trimmed = ( text || '' ).trim(); 315 return PLANTUML_START_PATTERNS.some( ( pattern ) => trimmed.startsWith( pattern ) ); 356 return PLANTUML_START_PATTERNS.some( ( pattern ) => 357 trimmed.startsWith( pattern ) 358 ); 316 359 }; 317 360 … … 327 370 * 328 371 * @param {string} text - Text to check 329 * @return s{boolean} True when the diagram has both opener and matching closer372 * @return {boolean} True when the diagram has both opener and matching closer 330 373 */ 331 374 export const isPlantUMLComplete = ( text ) => { 332 375 const trimmed = ( text || '' ).trim(); 333 const start = PLANTUML_START_PATTERNS.find( ( pattern ) => trimmed.startsWith( pattern ) ); 376 const start = PLANTUML_START_PATTERNS.find( ( pattern ) => 377 trimmed.startsWith( pattern ) 378 ); 334 379 if ( ! start ) { 335 380 return false; … … 337 382 // Pair @startX with @endX (e.g. @startmindmap -> @endmindmap). 338 383 const correspondingEnd = start.replace( '@start', '@end' ); 339 return PLANTUML_END_PATTERNS.includes( correspondingEnd ) && 340 trimmed.includes( correspondingEnd ); 384 return ( 385 PLANTUML_END_PATTERNS.includes( correspondingEnd ) && 386 trimmed.includes( correspondingEnd ) 387 ); 341 388 }; 342 389 … … 364 411 * 365 412 * @param {DataTransfer} dataTransfer - event.dataTransfer or event.clipboardData 366 * @return s{File[]} Image files in clipboard order (possibly empty)413 * @return {File[]} Image files in clipboard order (possibly empty) 367 414 */ 368 415 export const extractImageFilesFromDataTransfer = ( dataTransfer ) => { 369 416 const droppedFiles = dataTransfer?.files; 370 417 if ( droppedFiles?.length ) { 371 return Array.from( droppedFiles ).filter( 372 ( file ) =>file?.type?.startsWith( 'image/' )418 return Array.from( droppedFiles ).filter( ( file ) => 419 file?.type?.startsWith( 'image/' ) 373 420 ); 374 421 } … … 399 446 * 400 447 * @param {DataTransfer} clipboardData - event.clipboardData 401 * @return s{File[]} Image files in clipboard order (possibly empty)448 * @return {File[]} Image files in clipboard order (possibly empty) 402 449 */ 403 450 export const extractImageFilesFromClipboard = ( clipboardData ) => … … 413 460 * @param {string} token - Unique token, e.g. 'gfmr-upload-1' 414 461 * @param {string} label - Localised "uploading" label 415 * @return s{string} Placeholder Markdown, e.g. '![Uploading image… (gfmr-upload-1)]()'462 * @return {string} Placeholder Markdown, e.g. '![Uploading image… (gfmr-upload-1)]()' 416 463 */ 417 464 export const buildUploadPlaceholder = ( token, label ) => … … 431 478 * @param {string} token - Token to locate 432 479 * @param {string} replacement - Markdown to insert, or '' to remove 433 * @return s{string|null} Updated content, or null if token not found480 * @return {string|null} Updated content, or null if token not found 434 481 */ 435 482 export const replaceUploadPlaceholder = ( content, token, replacement ) => { … … 458 505 * saved attachment once the server responds. 459 506 * 507 * Only a `blob:` URL is treated as a not-ready signal: it is unambiguously a 508 * local object URL a browser hands out before a real upload exists, never a 509 * legitimate final WordPress media URL. A call that already carries an id is 510 * otherwise treated as ready even if its URL later turns out to be unusable 511 * (e.g. a misconfigured site URL) — that case is a genuine final failure, and 512 * is reported through buildImageMarkdownFromMedia()'s own URL validation and 513 * the caller's existing "Image upload failed" notice, not silently dropped 514 * here. Field priority (source_url before url) matches 515 * buildImageMarkdownFromMedia() so the two functions agree on which field 516 * describes a given media object. 517 * 460 518 * @param {Object} media - Candidate media object 461 * @returns {boolean} True once the attachment has an id and a usable URL 462 */ 463 export const isUploadedMediaReady = ( media ) => 464 !! media && !! media.id && !! ( media.url || media.source_url ); 519 * @return {boolean} True once the attachment has an id and a non-blob URL 520 */ 521 export const isUploadedMediaReady = ( media ) => { 522 if ( ! media || ! media.id ) { 523 return false; 524 } 525 const url = media.source_url || media.url; 526 return !! url && ! /^blob:/i.test( url ); 527 }; 465 528 466 529 /** … … 471 534 * 472 535 * @param {Object} media - WordPress media object ({ id, url|source_url, alt, title }) 473 * @return s{string|null} '' or null when the URL is missing/invalid536 * @return {string|null} '' or null when the URL is missing/invalid 474 537 */ 475 538 export const buildImageMarkdownFromMedia = ( media ) => { … … 486 549 altText = media.title; 487 550 } 488 return ` })`; 489 }; 551 return ` })`; 554 }; -
markdown-renderer-for-github/trunk/build/index.asset.php
r3644434 r3657956 1 <?php return array('dependencies' => array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-media-utils'), 'version' => ' 0e97ae8cfd011a4a7f33');1 <?php return array('dependencies' => array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-media-utils'), 'version' => '60bf3ee0456b9fe22b9e'); -
markdown-renderer-for-github/trunk/build/index.js
r3644434 r3657956 1 1 (()=>{var e={341(e,t,n){function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}e=n.nmd(e),function(t){"use strict";var n=function(){var e={note:{label:"Note",icon:"M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"},tip:{label:"Tip",icon:"M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z"},important:{label:"Important",icon:"M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"},warning:{label:"Warning",icon:"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"},caution:{label:"Caution",icon:"M4.47.22A.749.749 0 0 1 5 0h6c.199 0 .389.079.53.22l4.25 4.25c.141.14.22.331.22.53v6a.749.749 0 0 1-.22.53l-4.25 4.25A.749.749 0 0 1 11 16H5a.749.749 0 0 1-.53-.22L.22 11.53A.749.749 0 0 1 0 11V5c0-.199.079-.389.22-.53Zm.84 1.28L1.5 5.31v5.38l3.81 3.81h5.38l3.81-3.81V5.31L10.69 1.5ZM8 4a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"}},t=/^\[!(NOTE|TIP|IMPORTANT|WARNING|CAUTION)\][ \t]*(?:\n|$)/i;function n(t){var n=e[t];return n?'<p class="gfmr-alert-title"><svg class="gfmr-alert-icon" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path fill="currentColor" d="'+n.icon+'"></path></svg>'+n.label+"</p>":""}function r(e,t){var n,r=0;for(n=t;n<e.length;n++)if("blockquote_open"===e[n].type)r++;else if("blockquote_close"===e[n].type&&0===--r)return n;return-1}return{GFMR_ALERT_TYPES:e,MARKER_PATTERN:t,renderAlertTitleHtml:n,markdownItGfmrAlerts:function(e){e.core.ruler.after("block","gfmr_alerts",function(e){var o,a=e.tokens;for(o=0;o<a.length;o++)if("blockquote_open"===a[o].type){var i=a[o+1],u=a[o+2],s=a[o+3];if(i&&"paragraph_open"===i.type&&u&&"inline"===u.type&&s&&"paragraph_close"===s.type){var l=t.exec(u.content);if(l){var c=r(a,o);if(-1!==c){var f=l[1].toLowerCase();a[o].tag="div",a[o].attrJoin("class","gfmr-alert gfmr-alert-"+f),a[c].tag="div";var p=new e.Token("html_block","",0);p.block=!0,p.level=i.level,p.content=n(f)+"\n";var d=u.content.slice(l[0].length);""===d?a.splice(o+1,3,p):(u.content=d,a.splice(o+1,0,p))}}}}})}}}();"object"===r(e)&&e.exports&&(e.exports=n),t.gfmrAlerts=n}("undefined"!=typeof window?window:globalThis)},286(e,t,n){function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}e=n.nmd(e),function(t){"use strict";var n=function(){var e="Permalink to this heading";function t(e){return String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function n(e){var t="";return(e||[]).forEach(function(e){t+=e.content||""}),t}function r(e){return e.trim().toLowerCase().replace(/[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+/g,"-").replace(/(?:[\0-,\.\/:-@\[-`\{-\xA9\xAB-\xB1\xB4\xB6-\xB8\xBB\xBF\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0378\u0379\u037E\u0380-\u0385\u0387\u038B\u038D\u03A2\u03F6\u0482\u0530\u0557\u0558\u055A-\u055F\u0589-\u0590\u05BE\u05C0\u05C3\u05C6\u05C8-\u05CF\u05EB-\u05EE\u05F3-\u060F\u061B-\u061F\u066A-\u066D\u06D4\u06DD\u06DE\u06E9\u06FD\u06FE\u0700-\u070F\u074B\u074C\u07B2-\u07BF\u07F6-\u07F9\u07FB\u07FC\u07FE\u07FF\u082E-\u083F\u085C-\u085F\u086B-\u086F\u0888\u0890-\u0896\u08E2\u0964\u0965\u0970\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09F2\u09F3\u09FA\u09FB\u09FD\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF0-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B70\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BF3-\u0BFF\u0C0D\u0C11\u0C29\u0C3A\u0C3B\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B\u0C5E\u0C5F\u0C64\u0C65\u0C70-\u0C77\u0C7F\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDB\u0CDF\u0CE4\u0CE5\u0CF0\u0CF4-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D4F-\u0D53\u0D64\u0D65\u0D79\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF4-\u0E00\u0E3B-\u0E3F\u0E4F\u0E5A-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F01-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0F3A-\u0F3D\u0F48\u0F6D-\u0F70\u0F85\u0F98\u0FBD-\u0FC5\u0FC7-\u0FFF\u104A-\u104F\u109E\u109F\u10C6\u10C8-\u10CC\u10CE\u10CF\u10FB\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u1360-\u1368\u137D-\u137F\u1390-\u139F\u13F6\u13F7\u13FE-\u1400\u166D\u166E\u1680\u169B-\u169F\u16EB-\u16ED\u16F9-\u16FF\u1716-\u171E\u1735-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17D4-\u17D6\u17D8-\u17DB\u17DE\u17DF\u17EA-\u17EF\u17FA-\u180A\u180E\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u1945\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19FF\u1A1C-\u1A1F\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1AA6\u1AA8-\u1AAF\u1ADE\u1ADF\u1AEC-\u1AFF\u1B4D-\u1B4F\u1B5A-\u1B6A\u1B74-\u1B7F\u1BF4-\u1BFF\u1C38-\u1C3F\u1C4A-\u1C4C\u1C7E\u1C7F\u1C8B-\u1C8F\u1CBB\u1CBC\u1CC0-\u1CCF\u1CD3\u1CFB-\u1CFF\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FBD\u1FBF-\u1FC1\u1FC5\u1FCD-\u1FCF\u1FD4\u1FD5\u1FDC-\u1FDF\u1FED-\u1FF1\u1FF5\u1FFD-\u206F\u2072\u2073\u207A-\u207E\u208A-\u208F\u209D-\u20CF\u20F1-\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A-\u245F\u249C-\u24E9\u2500-\u2775\u2794-\u2BFF\u2CE5-\u2CEA\u2CF4-\u2CFC\u2CFE\u2CFF\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D70-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E00-\u2E2E\u2E30-\u3004\u3008-\u3020\u3030\u3036\u3037\u303D-\u3040\u3097\u3098\u309B\u309C\u30A0\u30FB\u3100-\u3104\u3130\u318F-\u3191\u3196-\u319F\u31C0-\u31EF\u3200-\u321F\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA48D-\uA4CF\uA4FE\uA4FF\uA60D-\uA60F\uA62C-\uA63F\uA673\uA67E\uA6F2-\uA716\uA720\uA721\uA789\uA78A\uA7DD-\uA7F0\uA828-\uA82B\uA82D-\uA82F\uA836-\uA83F\uA874-\uA87F\uA8C6-\uA8CF\uA8DA-\uA8DF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA954-\uA95F\uA97D-\uA97F\uA9C1-\uA9CE\uA9DA-\uA9DF\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A-\uAA5F\uAA77-\uAA79\uAAC3-\uAADA\uAADE\uAADF\uAAF0\uAAF1\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB5B\uAB6A-\uAB6F\uABEB\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uE000-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB29\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBB2-\uFBD2\uFD3E-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFC-\uFDFF\uFE10-\uFE1F\uFE30-\uFE6F\uFE75\uFEFD-\uFF0F\uFF1A-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFFF]|\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDD06\uDD34-\uDD3F\uDD79-\uDD89\uDD8C-\uDDFC\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDF9F\uDFC4-\uDFC7\uDFD0\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6F\uDD7B\uDD8B\uDD93\uDD96\uDDA2\uDDB2\uDDBA\uDDBD-\uDDBF\uDDF4-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDF7F\uDF86\uDFB1\uDFBB-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC57\uDC77\uDC78\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1F\uDD3A-\uDD3F\uDD5A-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE49-\uDE5F\uDE7F\uDEA0-\uDEBF\uDEC8\uDEE7-\uDEEA\uDEF0-\uDEFF\uDF36-\uDF3F\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD28-\uDD2F\uDD3A-\uDD3F\uDD66-\uDD68\uDD6E\uDD86-\uDE5F\uDE7F\uDEAA\uDEAD-\uDEAF\uDEB2-\uDEC1\uDEC8-\uDEF9\uDF28-\uDF2F\uDF55-\uDF6F\uDF86-\uDFAF\uDFCC-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC47-\uDC51\uDC76-\uDC7E\uDCBB-\uDCC1\uDCC3-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD40-\uDD43\uDD48-\uDD4F\uDD74\uDD75\uDD77-\uDD7F\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDE0\uDDF5-\uDDFF\uDE12\uDE38-\uDE3D\uDE42-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEA9-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDF7F\uDF8A\uDF8C\uDF8D\uDF8F\uDFB6\uDFC1\uDFC3\uDFC4\uDFC6\uDFCB\uDFD4-\uDFE0\uDFE3-\uDFFF]|\uD805[\uDC4B-\uDC4F\uDC5A-\uDC5D\uDC62-\uDC7F\uDCC6\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDC1-\uDDD7\uDDDE-\uDDFF\uDE41-\uDE43\uDE45-\uDE4F\uDE5A-\uDE7F\uDEB9-\uDEBF\uDECA-\uDECF\uDEE4-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF3C-\uDF3F\uDF47-\uDFFF]|\uD806[\uDC3B-\uDC9F\uDCF3-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD44-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE2\uDDE5-\uDDFF\uDE3F-\uDE46\uDE48-\uDE4F\uDE9A-\uDE9C\uDE9E-\uDEAF\uDEF9-\uDF5F\uDF68-\uDFBF\uDFE1-\uDFEF\uDFFA-\uDFFF]|\uD807[\uDC09\uDC37\uDC41-\uDC4F\uDC6D-\uDC71\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDDAF\uDDDC-\uDDDF\uDDEA-\uDEDF\uDEF7-\uDEFF\uDF11\uDF3B-\uDF3D\uDF43-\uDF4F\uDF5B-\uDFAF\uDFB1-\uDFBF\uDFD5-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD812-\uD817\uD819\uD824-\uD82A\uD82D\uD82E\uD830-\uD832\uD83D\uD83F\uD87C\uD87D\uD87F\uD88E-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD80B[\uDC00-\uDF8F\uDFF1-\uDFFF]|\uD80D[\uDC30-\uDC3F\uDC56-\uDC5F]|\uD810[\uDFFB-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD818[\uDC00-\uDCFF\uDD3A-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6F\uDEBF\uDECA-\uDECF\uDEEE\uDEEF\uDEF5-\uDEFF\uDF37-\uDF3F\uDF44-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDD3F\uDD6D-\uDD6F\uDD7A-\uDE3F\uDE97-\uDE9F\uDEB9\uDEBA\uDED4-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE2\uDFE5-\uDFEF\uDFF7-\uDFFF]|\uD823[\uDCD6-\uDCFE\uDD1F-\uDD7F\uDDF3-\uDFFF]|\uD82B[\uDC00-\uDFEF\uDFF4\uDFFC\uDFFF]|\uD82C[\uDD23-\uDD31\uDD33-\uDD4F\uDD53\uDD54\uDD56-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A-\uDC9C\uDC9F-\uDFFF]|\uD833[\uDC00-\uDCEF\uDCFA-\uDEFF\uDF2E\uDF2F\uDF47-\uDFFF]|\uD834[\uDC00-\uDD64\uDD6A-\uDD6C\uDD73-\uDD7A\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDE41\uDE45-\uDEBF\uDED4-\uDEDF\uDEF4-\uDF5F\uDF79-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3\uDFCC\uDFCD]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD837[\uDC00-\uDEFF\uDF1F-\uDF24\uDF2B-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDC2F\uDC6E-\uDC8E\uDC90-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD4F-\uDE8F\uDEAF-\uDEBF\uDEFA-\uDFFF]|\uD839[\uDC00-\uDCCF\uDCFA-\uDDCF\uDDFB-\uDEBF\uDEDF\uDEF6-\uDEFD\uDF00-\uDFDF\uDFE7\uDFEC\uDFEF\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDFFF]|\uD83B[\uDC00-\uDC70\uDCAC\uDCB0\uDCB5-\uDD00\uDD2E\uDD3E-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDFFF]|\uD83C[\uDC00-\uDCFF\uDD0D-\uDFFF]|\uD83E[\uDC00-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEE0-\uDEFF]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEAE\uDEAF]|\uD87A[\uDFE1-\uDFEF]|\uD87B[\uDE5E-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDF4F]|\uD88D[\uDC7A-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+/g,"")}return{DEFAULT_TITLE:e,generateHeadingSlug:r,markdownItGfmrHeadingAnchor:function(o,a){o.core.ruler.push("gfmr_heading_anchor",function(o){!function(o,a){for(var i=new Map,u="undefined"!=typeof window&&window.wpGfmConfig||{},s=Boolean(u.headingAnchor&&u.headingAnchor.visible),l=a&&a.title||e,c=0;c<o.tokens.length;c++){var f=o.tokens[c];if("heading_open"===f.type){var p=o.tokens[c+1];if(p&&"inline"===p.type){var d=r(n(p.children));if(i.has(d)){var h,m=i.get(d);do{h=d+"-"+(m+=1)}while(i.has(h));i.set(d,m),d=h}if(i.set(d,0),f.attrSet("id",d),s){var g=new o.Token("html_inline","",0);g.content='<a href="#'+t(d)+'" class="gfmr-heading-anchor" aria-hidden="true" title="'+t(l)+'">#</a>',p.children.push(g)}}}}}(o,a)})}}}();"object"===r(e)&&e.exports&&(e.exports=n),t.gfmrHeadingAnchor=n}("undefined"!=typeof window?window:globalThis)},859(e,t,n){function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}e=n.nmd(e),function(t){"use strict";var n={js:"javascript",jsx:"javascript",node:"javascript",ts:"typescript",tsx:"typescript",py:"python",python3:"python",rb:"ruby",sh:"bash",shell:"bash",zsh:"bash",yml:"yaml",md:"markdown",htm:"html",cs:"csharp","c#":"csharp","c++":"cpp",patch:"diff",kt:"kotlin",dockerfile:"docker",gql:"graphql"};"object"===r(e)&&e.exports&&(e.exports=n),t.GFMR_LANG_ALIASES=n}("undefined"!=typeof window?window:globalThis)},304(e,t,n){function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}e=n.nmd(e),function(t){"use strict";var n={vue:"html",svelte:"html",astro:"html",handlebars:"html",hbs:"html",mustache:"html",mdx:"markdown"};"object"===r(e)&&e.exports&&(e.exports=n),t.GFMR_LANG_FALLBACKS=n}("undefined"!=typeof window?window:globalThis)},366(e){"use strict";e.exports=function(e){e.inline.ruler.before("emphasis","strikethrough_alt_plugin",function(e,t){var n,r,o,a=e.pos,i=e.src.charCodeAt(a);return!t&&45===i&&(n=function(e,t,n){for(var r=n,o=t,a=e.charCodeAt(n);r<o&&e.charCodeAt(r)===a;)r++;return{can_open:!0,can_close:!0,length:r-n}}(e.src,e.posMax,e.pos),r=n.length,o=String.fromCharCode(i),2===r&&(e.push("text","",0).content=o+o,e.delimiters.push({marker:i,jump:0,token:e.tokens.length-1,level:e.level,end:-1,open:n.can_open,close:n.can_close}),e.pos+=n.length,!0))}),e.inline.ruler2.before("emphasis","strikethrough_alt_plugin",function(e){var t,n,r,o,a=e.delimiters,i=e.delimiters.length;for(t=0;t<i;t++)45===(n=a[t]).marker&&-1!==n.end&&(r=a[n.end],(o=e.tokens[n.token]).type="s_open",o.tag="s",o.nesting=1,o.markup="--",o.content="",(o=e.tokens[r.token]).type="s_close",o.tag="s",o.nesting=-1,o.markup="--",o.content="")})}},428(e){var t=!0,n=!1,r=!1;function o(e,t,n){var r=e.attrIndex(t),o=[t,n];r<0?e.attrPush(o):e.attrs[r]=o}function a(e,t){for(var n=e[t].level-1,r=t-1;r>=0;r--)if(e[r].level===n)return r;return-1}function i(e,t){return"inline"===e[t].type&&"paragraph_open"===e[t-1].type&&function(e){return"list_item_open"===e.type}(e[t-2])&&function(e){return 0===e.content.indexOf("[ ] ")||0===e.content.indexOf("[x] ")||0===e.content.indexOf("[X] ")}(e[t])}function u(e,o){if(e.children.unshift(function(e,n){var r=new n("html_inline","",0),o=t?' disabled="" ':"";return 0===e.content.indexOf("[ ] ")?r.content='<input class="task-list-item-checkbox"'+o+'type="checkbox">':0!==e.content.indexOf("[x] ")&&0!==e.content.indexOf("[X] ")||(r.content='<input class="task-list-item-checkbox" checked=""'+o+'type="checkbox">'),r}(e,o)),e.children[1].content=e.children[1].content.slice(3),e.content=e.content.slice(3),n)if(r){e.children.pop();var a="task-item-"+Math.ceil(1e7*Math.random()-1e3);e.children[0].content=e.children[0].content.slice(0,-1)+' id="'+a+'">',e.children.push(function(e,t,n){var r=new n("html_inline","",0);return r.content='<label class="task-list-item-label" for="'+t+'">'+e+"</label>",r.attrs=[{for:t}],r}(e.content,a,o))}else e.children.unshift(function(e){var t=new e("html_inline","",0);return t.content="<label>",t}(o)),e.children.push(function(e){var t=new e("html_inline","",0);return t.content="</label>",t}(o))}e.exports=function(e,s){s&&(t=!s.enabled,n=!!s.label,r=!!s.labelAfter),e.core.ruler.after("inline","github-task-lists",function(e){for(var n=e.tokens,r=2;r<n.length;r++)i(n,r)&&(u(n[r],e.Token),o(n[r-2],"class","task-list-item"+(t?"":" enabled")),o(n[a(n,r-2)],"class","contains-task-list"))})}}};const t={};function n(r){const o=t[r];if(void 0!==o)return o.exports;const a=t[r]={id:r,loaded:!1,exports:{}};return e[r](a,a.exports,n),a.loaded=!0,a.exports}n.n=e=>{const t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{if(Array.isArray(t))for(var r=0;r<t.length;){var o=t[r++],a=t[r++];n.o(e,o)?0===a&&r++:0===a?Object.defineProperty(e,o,{enumerable:!0,value:t[r++]}):Object.defineProperty(e,o,{enumerable:!0,get:a})}else for(var o in t)n.o(t,o)&&!n.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},n.o=(e,t)=>Object.hasOwn(e,t),n.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),n.dn=e=>{(Object.getOwnPropertyDescriptor(e,"name")||{}).writable||Object.defineProperty(e,"name",{value:"default",configurable:!0})},(()=>{"use strict";var e={};n.r(e),n.d(e,{decode:()=>wt,encode:()=>Ct,format:()=>Et,parse:()=>Pt});var t={};n.r(t),n.d(t,{Any:()=>$t,Cc:()=>Gt,Cf:()=>Ut,P:()=>qt,S:()=>zt,Z:()=>Ht});var r={};n.r(r),n.d(r,{arrayReplaceAt:()=>yn,asciiTrim:()=>zn,assign:()=>bn,escapeHtml:()=>Tn,escapeRE:()=>jn,fromCodePoint:()=>kn,has:()=>gn,isMdAsciiPunct:()=>Nn,isPunctChar:()=>In,isPunctCharCode:()=>Rn,isSpace:()=>Mn,isString:()=>hn,isValidEntityCode:()=>Dn,isWhiteSpace:()=>On,lib:()=>$n,normalizeReference:()=>Pn,unescapeAll:()=>En,unescapeMd:()=>Cn});var o={};n.r(o),n.d(o,{parseLinkDestination:()=>Un,parseLinkLabel:()=>Gn,parseLinkTitle:()=>Hn});const a=window.wp.blocks,i=window.wp.i18n,u=window.wp.blockEditor,s=window.wp.components,l=window.wp.element,c=window.wp.data,f=window.wp.mediaUtils;function p(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var d,h,m,g,_,b,y,D,k,w,v,F,C,E,A,x,S,B,T,L,j,M,O,I,R,N,P,q,z,$,G,U,H,W,Z,V,K,Y,J,X,Q,ee,te,ne,re={},oe={},ae={};function ie(){if(d)return ae;function e(e){return null==e}return d=1,ae.isNothing=e,ae.isObject=function(e){return"object"==typeof e&&null!==e},ae.toArray=function(t){return Array.isArray(t)?t:e(t)?[]:[t]},ae.repeat=function(e,t){let n="";for(let r=0;r<t;r+=1)n+=e;return n},ae.isNegativeZero=function(e){return 0===e&&Number.NEGATIVE_INFINITY===1/e},ae.extend=function(e,t){if(t){const n=Object.keys(t);for(let r=0,o=n.length;r<o;r+=1){const o=n[r];e[o]=t[o]}}return e},ae}function ue(){if(m)return h;function e(e,t){let n="";const r=e.reason||"(unknown reason)";return e.mark?(e.mark.name&&(n+='in "'+e.mark.name+'" '),n+="("+(e.mark.line+1)+":"+(e.mark.column+1)+")",!t&&e.mark.snippet&&(n+="\n\n"+e.mark.snippet),r+" "+n):r}function t(t,n){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=n,this.message=e(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||""}return m=1,t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t.prototype.toString=function(t){return this.name+": "+e(this,t)},h=t}function se(){if(y)return b;y=1;const e=ue(),t=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],n=["scalar","sequence","mapping"];return b=function(r,o){if(o=o||{},Object.keys(o).forEach(function(n){if(-1===t.indexOf(n))throw new e('Unknown option "'+n+'" is met in definition of "'+r+'" YAML type.')}),this.options=o,this.tag=r,this.kind=o.kind||null,this.resolve=o.resolve||function(){return!0},this.construct=o.construct||function(e){return e},this.instanceOf=o.instanceOf||null,this.predicate=o.predicate||null,this.represent=o.represent||null,this.representName=o.representName||null,this.defaultStyle=o.defaultStyle||null,this.multi=o.multi||!1,this.styleAliases=function(e){const t={};return null!==e&&Object.keys(e).forEach(function(n){e[n].forEach(function(e){t[String(e)]=n})}),t}(o.styleAliases||null),-1===n.indexOf(this.kind))throw new e('Unknown kind "'+this.kind+'" is specified for "'+r+'" YAML type.')}}function le(){if(k)return D;k=1;const e=ue(),t=se();function n(e,t){const n=[];return e[t].forEach(function(e){let t=n.length;n.forEach(function(n,r){n.tag===e.tag&&n.kind===e.kind&&n.multi===e.multi&&(t=r)}),n[t]=e}),n}function r(e){return this.extend(e)}return r.prototype.extend=function(o){let a=[],i=[];if(o instanceof t)i.push(o);else if(Array.isArray(o))i=i.concat(o);else{if(!o||!Array.isArray(o.implicit)&&!Array.isArray(o.explicit))throw new e("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");o.implicit&&(a=a.concat(o.implicit)),o.explicit&&(i=i.concat(o.explicit))}a.forEach(function(n){if(!(n instanceof t))throw new e("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(n.loadKind&&"scalar"!==n.loadKind)throw new e("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(n.multi)throw new e("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),i.forEach(function(n){if(!(n instanceof t))throw new e("Specified list of YAML types (or a single Type object) contains a non-Type object.")});const u=Object.create(r.prototype);return u.implicit=(this.implicit||[]).concat(a),u.explicit=(this.explicit||[]).concat(i),u.compiledImplicit=n(u,"implicit"),u.compiledExplicit=n(u,"explicit"),u.compiledTypeMap=function(){const e={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function t(t){t.multi?(e.multi[t.kind].push(t),e.multi.fallback.push(t)):e[t.kind][t.tag]=e.fallback[t.tag]=t}for(let e=0,n=arguments.length;e<n;e+=1)arguments[e].forEach(t);return e}(u.compiledImplicit,u.compiledExplicit),u},D=r}function ce(){if(v)return w;v=1;const e=se();return w=new e("tag:yaml.org,2002:str",{kind:"scalar",construct:function(e){return null!==e?e:""}})}function fe(){if(C)return F;C=1;const e=se();return F=new e("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(e){return null!==e?e:[]}})}function pe(){if(A)return E;A=1;const e=se();return E=new e("tag:yaml.org,2002:map",{kind:"mapping",construct:function(e){return null!==e?e:{}}})}function de(){if(S)return x;S=1;const e=le();return x=new e({explicit:[ce(),fe(),pe()]})}function he(){if(T)return B;T=1;const e=se();return B=new e("tag:yaml.org,2002:null",{kind:"scalar",resolve:function(e){if(null===e)return!0;const t=e.length;return 1===t&&"~"===e||4===t&&("null"===e||"Null"===e||"NULL"===e)},construct:function(){return null},predicate:function(e){return null===e},represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"})}function me(){if(j)return L;j=1;const e=se();return L=new e("tag:yaml.org,2002:bool",{kind:"scalar",resolve:function(e){if(null===e)return!1;const t=e.length;return 4===t&&("true"===e||"True"===e||"TRUE"===e)||5===t&&("false"===e||"False"===e||"FALSE"===e)},construct:function(e){return"true"===e||"True"===e||"TRUE"===e},predicate:function(e){return"[object Boolean]"===Object.prototype.toString.call(e)},represent:{lowercase:function(e){return e?"true":"false"},uppercase:function(e){return e?"TRUE":"FALSE"},camelcase:function(e){return e?"True":"False"}},defaultStyle:"lowercase"})}function ge(){if(O)return M;O=1;const e=ie(),t=se();function n(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function r(e){return e>=48&&e<=55}function o(e){return e>=48&&e<=57}function a(e){let t=e,n=1,r=t[0];if("-"!==r&&"+"!==r||("-"===r&&(n=-1),t=t.slice(1),r=t[0]),"0"===t)return 0;if("0"===r){if("b"===t[1])return n*parseInt(t.slice(2),2);if("x"===t[1])return n*parseInt(t.slice(2),16);if("o"===t[1])return n*parseInt(t.slice(2),8)}return n*parseInt(t,10)}return M=new t("tag:yaml.org,2002:int",{kind:"scalar",resolve:function(e){if(null===e)return!1;const t=e.length;let i=0,u=!1;if(!t)return!1;let s=e[i];if("-"!==s&&"+"!==s||(s=e[++i]),"0"===s){if(i+1===t)return!0;if(s=e[++i],"b"===s){for(i++;i<t;i++){if(s=e[i],"0"!==s&&"1"!==s)return!1;u=!0}return u&&isFinite(a(e))}if("x"===s){for(i++;i<t;i++){if(!n(e.charCodeAt(i)))return!1;u=!0}return u&&isFinite(a(e))}if("o"===s){for(i++;i<t;i++){if(!r(e.charCodeAt(i)))return!1;u=!0}return u&&isFinite(a(e))}}for(;i<t;i++){if(!o(e.charCodeAt(i)))return!1;u=!0}return!!u&&isFinite(a(e))},construct:function(e){return a(e)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&t%1==0&&!e.isNegativeZero(t)},represent:{binary:function(e){return e>=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})}function _e(){if(R)return I;R=1;const e=ie(),t=se(),n=new RegExp("^(?:[-+]?(?:[0-9]+)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),r=new RegExp("^(?:[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),o=/^[-+]?[0-9]+e/;return I=new t("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(e){return null!==e&&!!n.test(e)&&(!!isFinite(parseFloat(e,10))||r.test(e))},construct:function(e){let t=e.toLowerCase();const n="-"===t[0]?-1:1;return"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:n*parseFloat(t,10)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&(t%1!=0||e.isNegativeZero(t))},represent:function(t,n){if(isNaN(t))switch(n){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(n){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(n){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(e.isNegativeZero(t))return"-0.0";const r=t.toString(10);return o.test(r)?r.replace("e",".e"):r},defaultStyle:"lowercase"})}function be(){return P?N:(P=1,N=de().extend({implicit:[he(),me(),ge(),_e()]}))}function ye(){return z?q:(z=1,q=be())}function De(){if(G)return $;G=1;const e=se(),t=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),n=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");return $=new e("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(e){return null!==e&&(null!==t.exec(e)||null!==n.exec(e))},construct:function(e){let r=0,o=null,a=t.exec(e);if(null===a&&(a=n.exec(e)),null===a)throw new Error("Date resolve error");const i=+a[1],u=+a[2]-1,s=+a[3];if(!a[4])return new Date(Date.UTC(i,u,s));const l=+a[4],c=+a[5],f=+a[6];if(a[7]){for(r=a[7].slice(0,3);r.length<3;)r+="0";r=+r}a[9]&&(o=6e4*(60*+a[10]+ +(a[11]||0)),"-"===a[9]&&(o=-o));const p=new Date(Date.UTC(i,u,s,l,c,f,r));return o&&p.setTime(p.getTime()-o),p},instanceOf:Date,represent:function(e){return e.toISOString()}})}function ke(){if(H)return U;H=1;const e=se();return U=new e("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(e){return"<<"===e||null===e}})}function we(){if(Z)return W;Z=1;const e=se(),t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";return W=new e("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(e){if(null===e)return!1;let n=0;const r=e.length,o=t;for(let t=0;t<r;t++){const r=o.indexOf(e.charAt(t));if(!(r>64)){if(r<0)return!1;n+=6}}return n%8==0},construct:function(e){const n=e.replace(/[\r\n=]/g,""),r=n.length,o=t;let a=0;const i=[];for(let e=0;e<r;e++)e%4==0&&e&&(i.push(a>>16&255),i.push(a>>8&255),i.push(255&a)),a=a<<6|o.indexOf(n.charAt(e));const u=r%4*6;return 0===u?(i.push(a>>16&255),i.push(a>>8&255),i.push(255&a)):18===u?(i.push(a>>10&255),i.push(a>>2&255)):12===u&&i.push(a>>4&255),new Uint8Array(i)},predicate:function(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)},represent:function(e){let n="",r=0;const o=e.length,a=t;for(let t=0;t<o;t++)t%3==0&&t&&(n+=a[r>>18&63],n+=a[r>>12&63],n+=a[r>>6&63],n+=a[63&r]),r=(r<<8)+e[t];const i=o%3;return 0===i?(n+=a[r>>18&63],n+=a[r>>12&63],n+=a[r>>6&63],n+=a[63&r]):2===i?(n+=a[r>>10&63],n+=a[r>>4&63],n+=a[r<<2&63],n+=a[64]):1===i&&(n+=a[r>>2&63],n+=a[r<<4&63],n+=a[64],n+=a[64]),n}})}function ve(){if(K)return V;K=1;const e=se(),t=Object.prototype.hasOwnProperty,n=Object.prototype.toString;return V=new e("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(e){if(null===e)return!0;const r=[],o=e;for(let e=0,a=o.length;e<a;e+=1){const a=o[e];let i,u=!1;if("[object Object]"!==n.call(a))return!1;for(i in a)if(t.call(a,i)){if(u)return!1;u=!0}if(!u)return!1;if(-1!==r.indexOf(i))return!1;r.push(i)}return!0},construct:function(e){return null!==e?e:[]}})}function Fe(){if(J)return Y;J=1;const e=se(),t=Object.prototype.toString;return Y=new e("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:function(e){if(null===e)return!0;const n=e,r=new Array(n.length);for(let e=0,o=n.length;e<o;e+=1){const o=n[e];if("[object Object]"!==t.call(o))return!1;const a=Object.keys(o);if(1!==a.length)return!1;r[e]=[a[0],o[a[0]]]}return!0},construct:function(e){if(null===e)return[];const t=e,n=new Array(t.length);for(let e=0,r=t.length;e<r;e+=1){const r=t[e],o=Object.keys(r);n[e]=[o[0],r[o[0]]]}return n}})}function Ce(){if(Q)return X;Q=1;const e=se(),t=Object.prototype.hasOwnProperty;return X=new e("tag:yaml.org,2002:set",{kind:"mapping",resolve:function(e){if(null===e)return!0;const n=e;for(const e in n)if(t.call(n,e)&&null!==n[e])return!1;return!0},construct:function(e){return null!==e?e:{}}})}function Ee(){return te?ee:(te=1,ee=ye().extend({implicit:[De(),ke()],explicit:[we(),ve(),Fe(),Ce()]}))}function Ae(){if(ne)return oe;ne=1;const e=ie(),t=ue(),n=function(){if(_)return g;_=1;const e=ie();function t(e,t,n,r,o){let a="",i="";const u=Math.floor(o/2)-1;return r-t>u&&(a=" ... ",t=r-u+a.length),n-r>u&&(i=" ...",n=r+u-i.length),{str:a+e.slice(t,n).replace(/\t/g,"→")+i,pos:r-t+a.length}}function n(t,n){return e.repeat(" ",n-t.length)+t}return g=function(r,o){if(o=Object.create(o||null),!r.buffer)return null;o.maxLength||(o.maxLength=79),"number"!=typeof o.indent&&(o.indent=1),"number"!=typeof o.linesBefore&&(o.linesBefore=3),"number"!=typeof o.linesAfter&&(o.linesAfter=2);const a=/\r?\n|\r|\0/g,i=[0],u=[];let s,l=-1;for(;s=a.exec(r.buffer);)u.push(s.index),i.push(s.index+s[0].length),r.position<=s.index&&l<0&&(l=i.length-2);l<0&&(l=i.length-1);let c="";const f=Math.min(r.line+o.linesAfter,u.length).toString().length,p=o.maxLength-(o.indent+f+3);for(let a=1;a<=o.linesBefore&&!(l-a<0);a++){const s=t(r.buffer,i[l-a],u[l-a],r.position-(i[l]-i[l-a]),p);c=e.repeat(" ",o.indent)+n((r.line-a+1).toString(),f)+" | "+s.str+"\n"+c}const d=t(r.buffer,i[l],u[l],r.position,p);c+=e.repeat(" ",o.indent)+n((r.line+1).toString(),f)+" | "+d.str+"\n",c+=e.repeat("-",o.indent+f+3+d.pos)+"^\n";for(let a=1;a<=o.linesAfter&&!(l+a>=u.length);a++){const s=t(r.buffer,i[l+a],u[l+a],r.position-(i[l]-i[l+a]),p);c+=e.repeat(" ",o.indent)+n((r.line+a+1).toString(),f)+" | "+s.str+"\n"}return c.replace(/\n$/,"")}}(),r=Ee(),o=Object.prototype.hasOwnProperty,a=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,i=/[\x85\u2028\u2029]/,u=/[,\[\]{}]/,s=/^(?:!|!!|![0-9A-Za-z-]+!)$/,l=/^(?:!|[^,\[\]{}])(?:%[0-9a-f]{2}|[0-9a-z\-#;/?:@&=+$,_.!~*'()\[\]])*$/i;function c(e){return Object.prototype.toString.call(e)}function f(e){return 10===e||13===e}function p(e){return 9===e||32===e}function d(e){return 9===e||32===e||10===e||13===e}function h(e){return 44===e||91===e||93===e||123===e||125===e}function m(e){if(e>=48&&e<=57)return e-48;const t=32|e;return t>=97&&t<=102?t-97+10:-1}function b(e){return 120===e?2:117===e?4:85===e?8:0}function y(e){return e>=48&&e<=57?e-48:-1}function D(e){switch(e){case 48:return"\0";case 97:return"";case 98:return"\b";case 116:case 9:return"\t";case 110:return"\n";case 118:return"\v";case 102:return"\f";case 114:return"\r";case 101:return"";case 32:return" ";case 34:return'"';case 47:return"/";case 92:return"\\";case 78:return" 2 ";case 95:return" ";case 76:return"\u2028";case 80:return"\u2029";default:return""}}function k(e){return e<=65535?String.fromCharCode(e):String.fromCharCode(55296+(e-65536>>10),56320+(e-65536&1023))}function w(e,t,n){"__proto__"===t?Object.defineProperty(e,t,{configurable:!0,enumerable:!0,writable:!0,value:n}):e[t]=n}const v=new Array(256),F=new Array(256);for(let e=0;e<256;e++)v[e]=D(e)?1:0,F[e]=D(e);function C(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||r,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.maxDepth="number"==typeof t.maxDepth?t.maxDepth:100,this.maxTotalMergeKeys="number"==typeof t.maxTotalMergeKeys?t.maxTotalMergeKeys:1e4,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.depth=0,this.totalMergeKeys=0,this.firstTabInLine=-1,this.documents=[],this.anchorMapTransactions=[]}function E(e,r){const o={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return o.snippet=n(o),new t(r,o)}function A(e,t){throw E(e,t)}function x(e,t){e.onWarning&&e.onWarning.call(null,E(e,t))}function S(e,t,n){const r=e.anchorMapTransactions;if(0!==r.length){const n=r[r.length-1];o.call(n,t)||(n[t]={existed:o.call(e.anchorMap,t),value:e.anchorMap[t]})}e.anchorMap[t]=n}function B(e){return{position:e.position,line:e.line,lineStart:e.lineStart,lineIndent:e.lineIndent,firstTabInLine:e.firstTabInLine,tag:e.tag,anchor:e.anchor,kind:e.kind,result:e.result}}function T(e,t){e.position=t.position,e.line=t.line,e.lineStart=t.lineStart,e.lineIndent=t.lineIndent,e.firstTabInLine=t.firstTabInLine,e.tag=t.tag,e.anchor=t.anchor,e.kind=t.kind,e.result=t.result}const L={YAML:function(e,t,n){null!==e.version&&A(e,"duplication of %YAML directive"),1!==n.length&&A(e,"YAML directive accepts exactly one argument");const r=/^([0-9]+)\.([0-9]+)$/.exec(n[0]);null===r&&A(e,"ill-formed argument of the YAML directive");const o=parseInt(r[1],10),a=parseInt(r[2],10);1!==o&&A(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=a<2,1!==a&&2!==a&&x(e,"unsupported YAML version of the document")},TAG:function(e,t,n){let r;2!==n.length&&A(e,"TAG directive accepts exactly two arguments");const a=n[0];r=n[1],s.test(a)||A(e,"ill-formed tag handle (first argument) of the TAG directive"),o.call(e.tagMap,a)&&A(e,'there is a previously declared suffix for "'+a+'" tag handle'),l.test(r)||A(e,"ill-formed tag prefix (second argument) of the TAG directive");try{r=decodeURIComponent(r)}catch(t){A(e,"tag prefix is malformed: "+r)}e.tagMap[a]=r}};function j(e,t,n,r){if(t<n){const o=e.input.slice(t,n);if(r)for(let t=0,n=o.length;t<n;t+=1){const n=o.charCodeAt(t);9===n||n>=32&&n<=1114111||A(e,"expected valid JSON character")}else a.test(o)&&A(e,"the stream contains non-printable characters");e.result+=o}}function M(t,n,r,a){e.isObject(r)||A(t,"cannot merge mappings; the provided source object is unacceptable");const i=Object.keys(r);for(let e=0,u=i.length;e<u;e+=1){const u=i[e];-1!==t.maxTotalMergeKeys&&++t.totalMergeKeys>t.maxTotalMergeKeys&&A(t,"merge keys exceeded maxTotalMergeKeys ("+t.maxTotalMergeKeys+")"),o.call(n,u)||(w(n,u,r[u]),a[u]=!0)}}function O(e,t,n,r,a,i,u,s,l){if(Array.isArray(a))for(let t=0,n=(a=Array.prototype.slice.call(a)).length;t<n;t+=1)Array.isArray(a[t])&&A(e,"nested arrays are not supported inside keys"),"object"==typeof a&&"[object Object]"===c(a[t])&&(a[t]="[object Object]");if("object"==typeof a&&"[object Object]"===c(a)&&(a="[object Object]"),a=String(a),null===t&&(t={}),"tag:yaml.org,2002:merge"===r)if(Array.isArray(i))for(let r=0,o=i.length;r<o;r+=1)M(e,t,i[r],n);else M(e,t,i,n);else e.json||o.call(n,a)||!o.call(t,a)||(e.line=u||e.line,e.lineStart=s||e.lineStart,e.position=l||e.position,A(e,"duplicated mapping key")),w(t,a,i),delete n[a];return t}function I(e){const t=e.input.charCodeAt(e.position);10===t?e.position++:13===t?(e.position++,10===e.input.charCodeAt(e.position)&&e.position++):A(e,"a line break is expected"),e.line+=1,e.lineStart=e.position,e.firstTabInLine=-1}function R(e,t,n){let r=0,o=e.input.charCodeAt(e.position);for(;0!==o;){for(;p(o);)9===o&&-1===e.firstTabInLine&&(e.firstTabInLine=e.position),o=e.input.charCodeAt(++e.position);if(t&&35===o)do{o=e.input.charCodeAt(++e.position)}while(10!==o&&13!==o&&0!==o);if(!f(o))break;for(I(e),o=e.input.charCodeAt(e.position),r++,e.lineIndent=0;32===o;)e.lineIndent++,o=e.input.charCodeAt(++e.position)}return-1!==n&&0!==r&&e.lineIndent<n&&x(e,"deficient indentation"),r}function N(e){let t=e.position,n=e.input.charCodeAt(t);return!(45!==n&&46!==n||n!==e.input.charCodeAt(t+1)||n!==e.input.charCodeAt(t+2)||(t+=3,n=e.input.charCodeAt(t),0!==n&&!d(n)))}function P(t,n){1===n?t.result+=" ":n>1&&(t.result+=e.repeat("\n",n-1))}function q(e,t){const n=e.tag,r=e.anchor,o=[];let a=!1;if(-1!==e.firstTabInLine)return!1;null!==e.anchor&&S(e,e.anchor,o);let i=e.input.charCodeAt(e.position);for(;0!==i&&(-1!==e.firstTabInLine&&(e.position=e.firstTabInLine,A(e,"tab characters must not be used in indentation")),45===i)&&d(e.input.charCodeAt(e.position+1));){if(a=!0,e.position++,R(e,!0,-1)&&e.lineIndent<=t){o.push(null),i=e.input.charCodeAt(e.position);continue}const n=e.line;if(U(e,t,3,!1,!0),o.push(e.result),R(e,!0,-1),i=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==i)A(e,"bad indentation of a sequence entry");else if(e.lineIndent<t)break}return!!a&&(e.tag=n,e.anchor=r,e.kind="sequence",e.result=o,!0)}function z(e,t,n){let r,o,a,i;const u=e.tag,s=e.anchor,l={},c=Object.create(null);let f=null,h=null,m=null,g=!1,_=!1;if(-1!==e.firstTabInLine)return!1;null!==e.anchor&&S(e,e.anchor,l);let b=e.input.charCodeAt(e.position);for(;0!==b;){g||-1===e.firstTabInLine||(e.position=e.firstTabInLine,A(e,"tab characters must not be used in indentation"));const y=e.input.charCodeAt(e.position+1),D=e.line;if(63!==b&&58!==b||!d(y)){if(o=e.line,a=e.lineStart,i=e.position,!U(e,n,2,!1,!0))break;if(e.line===D){for(b=e.input.charCodeAt(e.position);p(b);)b=e.input.charCodeAt(++e.position);if(58===b)b=e.input.charCodeAt(++e.position),d(b)||A(e,"a whitespace character is expected after the key-value separator within a block mapping"),g&&(O(e,l,c,f,h,null,o,a,i),f=h=m=null),_=!0,g=!1,r=!1,f=e.tag,h=e.result;else{if(!_)return e.tag=u,e.anchor=s,!0;A(e,"can not read an implicit mapping pair; a colon is missed")}}else{if(!_)return e.tag=u,e.anchor=s,!0;A(e,"can not read a block mapping entry; a multiline key may not be an implicit key")}}else 63===b?(g&&(O(e,l,c,f,h,null,o,a,i),f=h=m=null),_=!0,g=!0,r=!0):g?(g=!1,r=!0):A(e,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),e.position+=1,b=y;if((e.line===D||e.lineIndent>t)&&(g&&(o=e.line,a=e.lineStart,i=e.position),U(e,t,4,!0,r)&&(g?h=e.result:m=e.result),g||(O(e,l,c,f,h,m,o,a,i),f=h=m=null),R(e,!0,-1),b=e.input.charCodeAt(e.position)),(e.line===D||e.lineIndent>t)&&0!==b)A(e,"bad indentation of a mapping entry");else if(e.lineIndent<t)break}return g&&O(e,l,c,f,h,null,o,a,i),_&&(e.tag=u,e.anchor=s,e.kind="mapping",e.result=l),_}function $(e){let t,n,r=!1,a=!1,i=e.input.charCodeAt(e.position);if(33!==i)return!1;null!==e.tag&&A(e,"duplication of a tag property"),i=e.input.charCodeAt(++e.position),60===i?(r=!0,i=e.input.charCodeAt(++e.position)):33===i?(a=!0,t="!!",i=e.input.charCodeAt(++e.position)):t="!";let c=e.position;if(r){do{i=e.input.charCodeAt(++e.position)}while(0!==i&&62!==i);e.position<e.length?(n=e.input.slice(c,e.position),i=e.input.charCodeAt(++e.position)):A(e,"unexpected end of the stream within a verbatim tag")}else{for(;0!==i&&!d(i);)33===i&&(a?A(e,"tag suffix cannot contain exclamation marks"):(t=e.input.slice(c-1,e.position+1),s.test(t)||A(e,"named tag handle cannot contain such characters"),a=!0,c=e.position+1)),i=e.input.charCodeAt(++e.position);n=e.input.slice(c,e.position),u.test(n)&&A(e,"tag suffix cannot contain flow indicator characters")}n&&!l.test(n)&&A(e,"tag name cannot contain such characters: "+n);try{n=decodeURIComponent(n)}catch(t){A(e,"tag name is malformed: "+n)}return r?e.tag=n:o.call(e.tagMap,t)?e.tag=e.tagMap[t]+n:"!"===t?e.tag="!"+n:"!!"===t?e.tag="tag:yaml.org,2002:"+n:A(e,'undeclared tag handle "'+t+'"'),!0}function G(e){let t=e.input.charCodeAt(e.position);if(38!==t)return!1;null!==e.anchor&&A(e,"duplication of an anchor property"),t=e.input.charCodeAt(++e.position);const n=e.position;for(;0!==t&&!d(t)&&!h(t);)t=e.input.charCodeAt(++e.position);return e.position===n&&A(e,"name of an anchor node must contain at least one character"),e.anchor=e.input.slice(n,e.position),!0}function U(t,n,r,a,i){let u,s,l,c,g,_=1,D=!1,w=!1,C=null;t.depth>=t.maxDepth&&A(t,"nesting exceeded maxDepth ("+t.maxDepth+")"),t.depth+=1,null!==t.listener&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null;const E=u=s=4===r||3===r;if(a&&R(t,!0,-1)&&(D=!0,t.lineIndent>n?_=1:t.lineIndent===n?_=0:t.lineIndent<n&&(_=-1)),1===_)for(;;){const e=t.input.charCodeAt(t.position),r=B(t);if(D&&(33===e&&null!==t.tag||38===e&&null!==t.anchor))break;if(!$(t)&&!G(t))break;null===C&&(C=r),R(t,!0,-1)?(D=!0,s=E,t.lineIndent>n?_=1:t.lineIndent===n?_=0:t.lineIndent<n&&(_=-1)):s=!1}if(s&&(s=D||i),1===_||4===r)if(c=1===r||2===r?n:n+1,g=t.position-t.lineStart,1===_)if(s&&(q(t,g)||z(t,g,c))||function(e,t){let n,r,o,a=!0;const i=e.tag;let u;const s=e.anchor;let l,c,f,p;const h=Object.create(null);let m,g,_,b=e.input.charCodeAt(e.position);if(91===b)l=93,p=!1,u=[];else{if(123!==b)return!1;l=125,p=!0,u={}}for(null!==e.anchor&&S(e,e.anchor,u),b=e.input.charCodeAt(++e.position);0!==b;){if(R(e,!0,t),b=e.input.charCodeAt(e.position),b===l)return e.position++,e.tag=i,e.anchor=s,e.kind=p?"mapping":"sequence",e.result=u,!0;a?44===b&&A(e,"expected the node content, but found ','"):A(e,"missed comma between flow collection entries"),g=m=_=null,c=f=!1,63===b&&d(e.input.charCodeAt(e.position+1))&&(c=f=!0,e.position++,R(e,!0,t)),n=e.line,r=e.lineStart,o=e.position,U(e,t,1,!1,!0),g=e.tag,m=e.result,R(e,!0,t),b=e.input.charCodeAt(e.position),!f&&e.line!==n||58!==b||(c=!0,b=e.input.charCodeAt(++e.position),R(e,!0,t),U(e,t,1,!1,!0),_=e.result),p?O(e,u,h,g,m,_,n,r,o):c?u.push(O(e,null,h,g,m,_,n,r,o)):u.push(m),R(e,!0,t),b=e.input.charCodeAt(e.position),44===b?(a=!0,b=e.input.charCodeAt(++e.position)):a=!1}A(e,"unexpected end of the stream within a flow collection")}(t,c))w=!0;else{const n=t.input.charCodeAt(t.position);null!==C&&E&&!s&&124!==n&&62!==n&&function(e,t,n,r){const a=B(e);return function(e){e.anchorMapTransactions.push(Object.create(null))}(e),T(e,t),e.tag=null,e.anchor=null,e.kind=null,e.result=null,z(e,n,r)&&"mapping"===e.kind?(function(e){const t=e.anchorMapTransactions.pop(),n=e.anchorMapTransactions;if(0===n.length)return;const r=n[n.length-1],a=Object.keys(t);for(let e=0,n=a.length;e<n;e+=1){const n=a[e];o.call(r,n)||(r[n]=t[n])}}(e),!0):(function(e){const t=e.anchorMapTransactions.pop(),n=Object.keys(t);for(let r=n.length-1;r>=0;r-=1){const o=t[n[r]];o.existed?e.anchorMap[n[r]]=o.value:delete e.anchorMap[n[r]]}}(e),T(e,a),!1)}(t,C,C.position-C.lineStart,c)||u&&function(t,n){let r,o,a=1,i=!1,u=!1,s=n,l=0,c=!1,d=t.input.charCodeAt(t.position);if(124===d)r=!1;else{if(62!==d)return!1;r=!0}for(t.kind="scalar",t.result="";0!==d;)if(d=t.input.charCodeAt(++t.position),43===d||45===d)1===a?a=43===d?3:2:A(t,"repeat of a chomping mode identifier");else{if(!((o=y(d))>=0))break;0===o?A(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?A(t,"repeat of an indentation width identifier"):(s=n+o-1,u=!0)}if(p(d)){do{d=t.input.charCodeAt(++t.position)}while(p(d));if(35===d)do{d=t.input.charCodeAt(++t.position)}while(!f(d)&&0!==d)}for(;0!==d;){for(I(t),t.lineIndent=0,d=t.input.charCodeAt(t.position);(!u||t.lineIndent<s)&&32===d;)t.lineIndent++,d=t.input.charCodeAt(++t.position);if(!u&&t.lineIndent>s&&(s=t.lineIndent),f(d)){l++;continue}if(u||0!==s||A(t,"missing indentation for block scalar"),t.lineIndent<s){3===a?t.result+=e.repeat("\n",i?1+l:l):1===a&&i&&(t.result+="\n");break}r?p(d)?(c=!0,t.result+=e.repeat("\n",i?1+l:l)):c?(c=!1,t.result+=e.repeat("\n",l+1)):0===l?i&&(t.result+=" "):t.result+=e.repeat("\n",l):t.result+=e.repeat("\n",i?1+l:l),i=!0,u=!0,l=0;const n=t.position;for(;!f(d)&&0!==d;)d=t.input.charCodeAt(++t.position);j(t,n,t.position,!1)}return!0}(t,c)||function(e,t){let n,r,o=e.input.charCodeAt(e.position);if(39!==o)return!1;for(e.kind="scalar",e.result="",e.position++,n=r=e.position;0!==(o=e.input.charCodeAt(e.position));)if(39===o){if(j(e,n,e.position,!0),o=e.input.charCodeAt(++e.position),39!==o)return!0;n=e.position,e.position++,r=e.position}else f(o)?(j(e,n,r,!0),P(e,R(e,!1,t)),n=r=e.position):e.position===e.lineStart&&N(e)?A(e,"unexpected end of the document within a single quoted scalar"):(e.position++,p(o)||(r=e.position));A(e,"unexpected end of the stream within a single quoted scalar")}(t,c)||function(e,t){let n,r,o,a=e.input.charCodeAt(e.position);if(34!==a)return!1;for(e.kind="scalar",e.result="",e.position++,n=r=e.position;0!==(a=e.input.charCodeAt(e.position));){if(34===a)return j(e,n,e.position,!0),e.position++,!0;if(92===a){if(j(e,n,e.position,!0),a=e.input.charCodeAt(++e.position),f(a))R(e,!1,t);else if(a<256&&v[a])e.result+=F[a],e.position++;else if((o=b(a))>0){let t=o,n=0;for(;t>0;t--)a=e.input.charCodeAt(++e.position),(o=m(a))>=0?n=(n<<4)+o:A(e,"expected hexadecimal character");e.result+=k(n),e.position++}else A(e,"unknown escape sequence");n=r=e.position}else f(a)?(j(e,n,r,!0),P(e,R(e,!1,t)),n=r=e.position):e.position===e.lineStart&&N(e)?A(e,"unexpected end of the document within a double quoted scalar"):(e.position++,p(a)||(r=e.position))}A(e,"unexpected end of the stream within a double quoted scalar")}(t,c)?w=!0:function(e){let t=e.input.charCodeAt(e.position);if(42!==t)return!1;t=e.input.charCodeAt(++e.position);const n=e.position;for(;0!==t&&!d(t)&&!h(t);)t=e.input.charCodeAt(++e.position);e.position===n&&A(e,"name of an alias node must contain at least one character");const r=e.input.slice(n,e.position);return o.call(e.anchorMap,r)||A(e,'unidentified alias "'+r+'"'),e.result=e.anchorMap[r],R(e,!0,-1),!0}(t)?(w=!0,null===t.tag&&null===t.anchor||A(t,"alias node should not have any properties")):function(e,t,n){let r,o,a,i,u,s;const l=e.kind,c=e.result;let m=e.input.charCodeAt(e.position);if(d(m)||h(m)||35===m||38===m||42===m||33===m||124===m||62===m||39===m||34===m||37===m||64===m||96===m)return!1;if(63===m||45===m){const t=e.input.charCodeAt(e.position+1);if(d(t)||n&&h(t))return!1}for(e.kind="scalar",e.result="",r=o=e.position,a=!1;0!==m;){if(58===m){const t=e.input.charCodeAt(e.position+1);if(d(t)||n&&h(t))break}else if(35===m){if(d(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&N(e)||n&&h(m))break;if(f(m)){if(i=e.line,u=e.lineStart,s=e.lineIndent,R(e,!1,-1),e.lineIndent>=t){a=!0,m=e.input.charCodeAt(e.position);continue}e.position=o,e.line=i,e.lineStart=u,e.lineIndent=s;break}}a&&(j(e,r,o,!1),P(e,e.line-i),r=o=e.position,a=!1),p(m)||(o=e.position+1),m=e.input.charCodeAt(++e.position)}return j(e,r,o,!1),!!e.result||(e.kind=l,e.result=c,!1)}(t,c,1===r)&&(w=!0,null===t.tag&&(t.tag="?")),null!==t.anchor&&S(t,t.anchor,t.result)}else 0===_&&(w=s&&q(t,g));if(null===t.tag)null!==t.anchor&&S(t,t.anchor,t.result);else if("?"===t.tag){null!==t.result&&"scalar"!==t.kind&&A(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"');for(let e=0,n=t.implicitTypes.length;e<n;e+=1)if(l=t.implicitTypes[e],l.resolve(t.result)){t.result=l.construct(t.result),t.tag=l.tag,null!==t.anchor&&S(t,t.anchor,t.result);break}}else if("!"!==t.tag){if(o.call(t.typeMap[t.kind||"fallback"],t.tag))l=t.typeMap[t.kind||"fallback"][t.tag];else{l=null;const e=t.typeMap.multi[t.kind||"fallback"];for(let n=0,r=e.length;n<r;n+=1)if(t.tag.slice(0,e[n].tag.length)===e[n].tag){l=e[n];break}}l||A(t,"unknown tag !<"+t.tag+">"),null!==t.result&&l.kind!==t.kind&&A(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+l.kind+'", not "'+t.kind+'"'),l.resolve(t.result,t.tag)?(t.result=l.construct(t.result,t.tag),null!==t.anchor&&S(t,t.anchor,t.result)):A(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return null!==t.listener&&t.listener("close",t),t.depth-=1,null!==t.tag||null!==t.anchor||w}function H(e){const t=e.position;let n,r=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(n=e.input.charCodeAt(e.position))&&(R(e,!0,-1),n=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==n));){r=!0,n=e.input.charCodeAt(++e.position);let t=e.position;for(;0!==n&&!d(n);)n=e.input.charCodeAt(++e.position);const a=e.input.slice(t,e.position),i=[];for(a.length<1&&A(e,"directive name must not be less than one character in length");0!==n;){for(;p(n);)n=e.input.charCodeAt(++e.position);if(35===n){do{n=e.input.charCodeAt(++e.position)}while(0!==n&&!f(n));break}if(f(n))break;for(t=e.position;0!==n&&!d(n);)n=e.input.charCodeAt(++e.position);i.push(e.input.slice(t,e.position))}0!==n&&I(e),o.call(L,a)?L[a](e,a,i):x(e,'unknown document directive "'+a+'"')}R(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,R(e,!0,-1)):r&&A(e,"directives end mark is expected"),U(e,e.lineIndent-1,4,!1,!0),R(e,!0,-1),e.checkLineBreaks&&i.test(e.input.slice(t,e.position))&&x(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&N(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,R(e,!0,-1)):e.position<e.length-1&&A(e,"end of the stream or a document separator is expected")}function W(e,t){t=t||{},0!==(e=String(e)).length&&(10!==e.charCodeAt(e.length-1)&&13!==e.charCodeAt(e.length-1)&&(e+="\n"),65279===e.charCodeAt(0)&&(e=e.slice(1)));const n=new C(e,t),r=e.indexOf("\0");for(-1!==r&&(n.position=r,A(n,"null byte is not allowed in input")),n.input+="\0";32===n.input.charCodeAt(n.position);)n.lineIndent+=1,n.position+=1;for(;n.position<n.length-1;)H(n);return n.documents}return oe.loadAll=function(e,t,n){null!==t&&"object"==typeof t&&void 0===n&&(n=t,t=null);const r=W(e,n);if("function"!=typeof t)return r;for(let e=0,n=r.length;e<n;e+=1)t(r[e])},oe.load=function(e,n){const r=W(e,n);if(0!==r.length){if(1===r.length)return r[0];throw new t("expected a single document in the stream, but found more")}},oe}var xe,Se,Be={};function Te(){if(xe)return Be;xe=1;const e=ie(),t=ue(),n=Ee(),r=Object.prototype.toString,o=Object.prototype.hasOwnProperty,a=65279,i={0:"\\0",7:"\\a",8:"\\b",9:"\\t",10:"\\n",11:"\\v",12:"\\f",13:"\\r",27:"\\e",34:'\\"',92:"\\\\",133:"\\N",160:"\\_",8232:"\\L",8233:"\\P"},u=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],s=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;function l(n){let r,o;const a=n.toString(16).toUpperCase();if(n<=255)r="x",o=2;else if(n<=65535)r="u",o=4;else{if(!(n<=4294967295))throw new t("code point within a string may not be greater than 0xFFFFFFFF");r="U",o=8}return"\\"+r+e.repeat("0",o-a.length)+a}function c(t){this.schema=t.schema||n,this.indent=Math.max(1,t.indent||2),this.noArrayIndent=t.noArrayIndent||!1,this.skipInvalid=t.skipInvalid||!1,this.flowLevel=e.isNothing(t.flowLevel)?-1:t.flowLevel,this.styleMap=function(e,t){if(null===t)return{};const n={},r=Object.keys(t);for(let a=0,i=r.length;a<i;a+=1){let i=r[a],u=String(t[i]);"!!"===i.slice(0,2)&&(i="tag:yaml.org,2002:"+i.slice(2));const s=e.compiledTypeMap.fallback[i];s&&o.call(s.styleAliases,u)&&(u=s.styleAliases[u]),n[i]=u}return n}(this.schema,t.styles||null),this.sortKeys=t.sortKeys||!1,this.lineWidth=t.lineWidth||80,this.noRefs=t.noRefs||!1,this.noCompatMode=t.noCompatMode||!1,this.condenseFlow=t.condenseFlow||!1,this.quotingType='"'===t.quotingType?2:1,this.forceQuotes=t.forceQuotes||!1,this.replacer="function"==typeof t.replacer?t.replacer:null,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function f(t,n){const r=e.repeat(" ",n);let o=0,a="";const i=t.length;for(;o<i;){let e;const n=t.indexOf("\n",o);-1===n?(e=t.slice(o),o=i):(e=t.slice(o,n+1),o=n+1),e.length&&"\n"!==e&&(a+=r),a+=e}return a}function p(t,n){return"\n"+e.repeat(" ",t.indent*n)}function d(e){return 32===e||9===e}function h(e){return e>=32&&e<=126||e>=161&&e<=55295&&8232!==e&&8233!==e||e>=57344&&e<=65533&&e!==a||e>=65536&&e<=1114111}function m(e){return h(e)&&e!==a&&13!==e&&10!==e}function g(e,t,n){const r=m(e),o=r&&!d(e);return(n?r:r&&44!==e&&91!==e&&93!==e&&123!==e&&125!==e)&&35!==e&&!(58===t&&!o)||m(t)&&!d(t)&&35===e||58===t&&o}function _(e,t){const n=e.charCodeAt(t);let r;return n>=55296&&n<=56319&&t+1<e.length&&(r=e.charCodeAt(t+1),r>=56320&&r<=57343)?1024*(n-55296)+r-56320+65536:n}function b(e){return/^\n* /.test(e)}function y(e,n,r,o,c){e.dump=function(){if(0===n.length)return 2===e.quotingType?'""':"''";if(!e.noCompatMode&&(-1!==u.indexOf(n)||s.test(n)))return 2===e.quotingType?'"'+n+'"':"'"+n+"'";const p=e.indent*Math.max(1,r),m=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-p),y=o||e.flowLevel>-1&&r>=e.flowLevel;switch(function(e,t,n,r,o,i,u,s){let l,c=0,f=null,p=!1,m=!1;const y=-1!==r;let D=-1,k=h(w=_(e,0))&&w!==a&&!d(w)&&45!==w&&63!==w&&58!==w&&44!==w&&91!==w&&93!==w&&123!==w&&125!==w&&35!==w&&38!==w&&42!==w&&33!==w&&124!==w&&61!==w&&62!==w&&39!==w&&34!==w&&37!==w&&64!==w&&96!==w&&function(e){return!d(e)&&58!==e}(_(e,e.length-1));var w;if(t||u)for(l=0;l<e.length;c>=65536?l+=2:l++){if(c=_(e,l),!h(c))return 5;k=k&&g(c,f,s),f=c}else{for(l=0;l<e.length;c>=65536?l+=2:l++){if(c=_(e,l),10===c)p=!0,y&&(m=m||l-D-1>r&&" "!==e[D+1],D=l);else if(!h(c))return 5;k=k&&g(c,f,s),f=c}m=m||y&&l-D-1>r&&" "!==e[D+1]}return p||m?n>9&&b(e)?5:u?2===i?5:2:m?4:3:!k||u||o(e)?2===i?5:2:1}(n,y,e.indent,m,function(t){return function(e,t){for(let n=0,r=e.implicitTypes.length;n<r;n+=1)if(e.implicitTypes[n].resolve(t))return!0;return!1}(e,t)},e.quotingType,e.forceQuotes&&!o,c)){case 1:return n;case 2:return"'"+n.replace(/'/g,"''")+"'";case 3:return"|"+D(n,e.indent)+k(f(n,p));case 4:return">"+D(n,e.indent)+k(f(function(e,t){const n=/(\n+)([^\n]*)/g;let r,o,a=function(){let r=e.indexOf("\n");return r=-1!==r?r:e.length,n.lastIndex=r,w(e.slice(0,r),t)}(),i="\n"===e[0]||" "===e[0];for(;o=n.exec(e);){const e=o[1],n=o[2];r=" "===n[0],a+=e+(i||r||""===n?"":"\n")+w(n,t),i=r}return a}(n,m),p));case 5:return'"'+function(e){let t="",n=0;for(let r=0;r<e.length;n>=65536?r+=2:r++){n=_(e,r);const o=i[n];!o&&h(n)?(t+=e[r],n>=65536&&(t+=e[r+1])):t+=o||l(n)}return t}(n)+'"';default:throw new t("impossible error: invalid scalar style")}}()}function D(e,t){const n=b(e)?String(t):"",r="\n"===e[e.length-1];return n+(!r||"\n"!==e[e.length-2]&&"\n"!==e?r?"":"-":"+")+"\n"}function k(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function w(e,t){if(""===e||" "===e[0])return e;const n=/ [^ ]/g;let r,o,a=0,i=0,u=0,s="";for(;r=n.exec(e);)u=r.index,u-a>t&&(o=i>a?i:u,s+="\n"+e.slice(a,o),a=o+1),i=u;return s+="\n",e.length-a>t&&i>a?s+=e.slice(a,i)+"\n"+e.slice(i+1):s+=e.slice(a),s.slice(1)}function v(e,t,n,r){let o="";const a=e.tag;for(let a=0,i=n.length;a<i;a+=1){let i=n[a];e.replacer&&(i=e.replacer.call(n,String(a),i)),(C(e,t+1,i,!0,!0,!1,!0)||void 0===i&&C(e,t+1,null,!0,!0,!1,!0))&&(r&&""===o||(o+=p(e,t)),e.dump&&10===e.dump.charCodeAt(0)?o+="-":o+="- ",o+=e.dump)}e.tag=a,e.dump=o||"[]"}function F(e,n,a){const i=a?e.explicitTypes:e.implicitTypes;for(let u=0,s=i.length;u<s;u+=1){const s=i[u];if((s.instanceOf||s.predicate)&&(!s.instanceOf||"object"==typeof n&&n instanceof s.instanceOf)&&(!s.predicate||s.predicate(n))){if(a?s.multi&&s.representName?e.tag=s.representName(n):e.tag=s.tag:e.tag="?",s.represent){const a=e.styleMap[s.tag]||s.defaultStyle;let i;if("[object Function]"===r.call(s.represent))i=s.represent(n,a);else{if(!o.call(s.represent,a))throw new t("!<"+s.tag+'> tag resolver accepts not "'+a+'" style');i=s.represent[a](n,a)}e.dump=i}return!0}}return!1}function C(e,n,o,a,i,u,s){e.tag=null,e.dump=o,F(e,o,!1)||F(e,o,!0);const l=r.call(e.dump),c=a;a&&(a=e.flowLevel<0||e.flowLevel>n);const f="[object Object]"===l||"[object Array]"===l;let d,h;if(f&&(d=e.duplicates.indexOf(o),h=-1!==d),(null!==e.tag&&"?"!==e.tag||h||2!==e.indent&&n>0)&&(i=!1),h&&e.usedDuplicates[d])e.dump="*ref_"+d;else{if(f&&h&&!e.usedDuplicates[d]&&(e.usedDuplicates[d]=!0),"[object Object]"===l)a&&0!==Object.keys(e.dump).length?(function(e,n,r,o){let a="";const i=e.tag,u=Object.keys(r);if(!0===e.sortKeys)u.sort();else if("function"==typeof e.sortKeys)u.sort(e.sortKeys);else if(e.sortKeys)throw new t("sortKeys must be a boolean or a function");for(let t=0,i=u.length;t<i;t+=1){let i="";o&&""===a||(i+=p(e,n));const s=u[t];let l=r[s];if(e.replacer&&(l=e.replacer.call(r,s,l)),!C(e,n+1,s,!0,!0,!0))continue;const c=null!==e.tag&&"?"!==e.tag||e.dump&&e.dump.length>1024;c&&(e.dump&&10===e.dump.charCodeAt(0)?i+="?":i+="? "),i+=e.dump,c&&(i+=p(e,n)),C(e,n+1,l,!0,c)&&(e.dump&&10===e.dump.charCodeAt(0)?i+=":":i+=": ",i+=e.dump,a+=i)}e.tag=i,e.dump=a||"{}"}(e,n,e.dump,i),h&&(e.dump="&ref_"+d+e.dump)):(function(e,t,n){let r="";const o=e.tag,a=Object.keys(n);for(let o=0,i=a.length;o<i;o+=1){let i="";""!==r&&(i+=", "),e.condenseFlow&&(i+='"');const u=a[o];let s=n[u];e.replacer&&(s=e.replacer.call(n,u,s)),C(e,t,u,!1,!1)&&(e.dump.length>1024&&(i+="? "),i+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),C(e,t,s,!1,!1)&&(i+=e.dump,r+=i))}e.tag=o,e.dump="{"+r+"}"}(e,n,e.dump),h&&(e.dump="&ref_"+d+" "+e.dump));else if("[object Array]"===l)a&&0!==e.dump.length?(e.noArrayIndent&&!s&&n>0?v(e,n-1,e.dump,i):v(e,n,e.dump,i),h&&(e.dump="&ref_"+d+e.dump)):(function(e,t,n){let r="";const o=e.tag;for(let o=0,a=n.length;o<a;o+=1){let a=n[o];e.replacer&&(a=e.replacer.call(n,String(o),a)),(C(e,t,a,!1,!1)||void 0===a&&C(e,t,null,!1,!1))&&(""!==r&&(r+=","+(e.condenseFlow?"":" ")),r+=e.dump)}e.tag=o,e.dump="["+r+"]"}(e,n,e.dump),h&&(e.dump="&ref_"+d+" "+e.dump));else{if("[object String]"!==l){if("[object Undefined]"===l)return!1;if(e.skipInvalid)return!1;throw new t("unacceptable kind of an object to dump "+l)}"?"!==e.tag&&y(e,e.dump,n,u,c)}if(null!==e.tag&&"?"!==e.tag){let t=encodeURI("!"===e.tag[0]?e.tag.slice(1):e.tag).replace(/!/g,"%21");t="!"===e.tag[0]?"!"+t:"tag:yaml.org,2002:"===t.slice(0,18)?"!!"+t.slice(18):"!<"+t+">",e.dump=t+" "+e.dump}}return!0}function E(e,t){const n=[],r=[];A(e,n,r);const o=r.length;for(let e=0;e<o;e+=1)t.duplicates.push(n[r[e]]);t.usedDuplicates=new Array(o)}function A(e,t,n){if(null!==e&&"object"==typeof e){const r=t.indexOf(e);if(-1!==r)-1===n.indexOf(r)&&n.push(r);else if(t.push(e),Array.isArray(e))for(let r=0,o=e.length;r<o;r+=1)A(e[r],t,n);else{const r=Object.keys(e);for(let o=0,a=r.length;o<a;o+=1)A(e[r[o]],t,n)}}}return Be.dump=function(e,t){const n=new c(t=t||{});n.noRefs||E(e,n);let r=e;return n.replacer&&(r=n.replacer.call({"":r},"",r)),C(n,0,r,!0,!0)?n.dump+"\n":""},Be}const Le=p(function(){if(Se)return re;Se=1;const e=Ae(),t=Te();function n(e,t){return function(){throw new Error("Function yaml."+e+" is removed in js-yaml 4. Use yaml."+t+" instead, which is now safe by default.")}}return re.Type=se(),re.Schema=le(),re.FAILSAFE_SCHEMA=de(),re.JSON_SCHEMA=be(),re.CORE_SCHEMA=ye(),re.DEFAULT_SCHEMA=Ee(),re.load=e.load,re.loadAll=e.loadAll,re.dump=t.dump,re.YAMLException=ue(),re.types={binary:we(),float:_e(),map:pe(),null:he(),pairs:Fe(),set:Ce(),timestamp:De(),bool:me(),int:ge(),merge:ke(),omap:ve(),seq:fe(),str:ce()},re.safeLoad=n("safeLoad","load"),re.safeLoadAll=n("safeLoadAll","loadAll"),re.safeDump=n("safeDump","dump"),re}()),{Type:je,Schema:Me,FAILSAFE_SCHEMA:Oe,JSON_SCHEMA:Ie,CORE_SCHEMA:Re,DEFAULT_SCHEMA:Ne,load:Pe,loadAll:qe,dump:ze,YAMLException:$e,types:Ge,safeLoad:Ue,safeLoadAll:He,safeDump:We}=Le;var Ze=function(e){if(!e||"string"!=typeof e)return{frontmatter:{},body:e||""};var t=e.match(/^---\s*\n([\s\S]*?)\n---\s*\n([\s\S]*)$/);if(!t)return{frontmatter:{},body:e};try{return{frontmatter:Le.load(t[1],{schema:Le.JSON_SCHEMA})||{},body:t[2]}}catch(t){return console.warn("[WP GFM] YAML parse error:",t),{frontmatter:{},body:e}}},Ve=function(e){if(!e||0===Object.keys(e).length)return"";var t=function(e){return String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")},n='<header class="gfmr-frontmatter">';return e.title&&(n+='<h1 class="gfmr-fm-title">'.concat(t(e.title),"</h1>")),e.date&&(n+='<time class="gfmr-fm-date" datetime="'.concat(t(e.date),'">').concat(t(e.date),"</time>")),e.author&&(n+='<span class="gfmr-fm-author">'.concat(t(e.author),"</span>")),e.tags&&Array.isArray(e.tags)&&(n+='<div class="gfmr-fm-tags">',e.tags.forEach(function(e){n+='<span class="gfmr-fm-tag">'.concat(t(e),"</span>")}),n+="</div>"),n+="</header>"};function Ke(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var Ye=/^[a-z]{2}(-[A-Z]{2})?$/,Je=[{value:"en",label:"English (en)"},{value:"ja",label:"Japanese (ja)"},{value:"zh",label:"Chinese (zh)"},{value:"ko",label:"한국어 (ko)"},{value:"es",label:"Español (es)"},{value:"fr",label:"Français (fr)"},{value:"de",label:"Deutsch (de)"},{value:"pt",label:"Português (pt)"},{value:"it",label:"Italiano (it)"},{value:"ru",label:"Русский (ru)"}],Xe=function(e){if(!e||"string"!=typeof e)return!1;var t=e.toLowerCase().trim();return Ye.test(t)&&t.length<=5},Qe=["graph","flowchart","sequenceDiagram","classDiagram","pie","gantt","stateDiagram","erDiagram","gitGraph","gitgraph","journey"],et=["graph TD","graph LR"],tt=["#gfmr-mermaid-","font-family:","<svg","</svg>"],nt=["pre code.language-mermaid",'pre code[class*="language-mermaid"]',"code.language-mermaid",".shiki .language-mermaid",'[data-language="mermaid"]','pre[class*="language-mermaid"]'],rt=["pre.shiki code",".shiki code","pre code",".gfmr-markdown-rendered-preview pre code",".gfmr-markdown-rendered-preview code"],ot=["@startuml","@startmindmap","@startwbs","@startgantt","@startsalt","@startjson","@startyaml","@startditaa","@startdot"],at=["@enduml","@endmindmap","@endwbs","@endgantt","@endsalt","@endjson","@endyaml","@endditaa","@enddot"],it=["pre code.language-plantuml","pre code.language-puml",'[data-language="plantuml"]','[data-language="puml"]'],ut=["pre code:not([data-gfmr-plantuml-processed])"],st=["c4","c4-context","c4-container","c4-component","c4-dynamic","c4-deployment"],lt=st.map(function(e){return"code.language-".concat(e,":not([data-gfmr-plantuml-processed])")}).join(", "),ct=function(e){var t=null==e?void 0:e.classList;if(!t)return null;for(var n=0,r=st;n<r.length;n++){var o=r[n];if(t.contains("language-".concat(o)))return o}return null},ft="undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.any,pt=function(){var e;return(null===(e=window.wpGfmConfig)||void 0===e?void 0:e.debug)||window.location.search.includes("debug=true")||window.location.search.includes("gfmr-debug=1")||window.location.search.includes("debug=1")||!1},dt=function(){if(pt()){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];(e=console).log.apply(e,["[WP GFM Editor]"].concat(n))}},ht=function(){if(pt()){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];(e=console).warn.apply(e,["[WP GFM Editor]"].concat(n))}},mt=function(){return"text-align: center; margin: 20px 0; padding: 15px; background: var(--gfmr-mermaid-block-bg, ".concat(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"transparent","); border-radius: 6px; overflow-x: auto; border: none;")},gt=function(e,t){return'\n\t<div class="gfmr-mermaid-error-unified" style="color: #d1242f; background: #fff8f8; border: 1px solid #ffcdd2; border-radius: 6px; padding: 15px; margin: 10px 0; font-family: -apple-system, BlinkMacSystemFont, \'Segoe UI\', Roboto, \'Helvetica Neue\', Arial, sans-serif; font-size: 14px; line-height: 1.5;">\n\t\t<div style="font-weight: 600; margin-bottom: 8px;">🚨 Mermaid Rendering Error (editor)</div>\n\t\t<div style="margin-bottom: 12px; font-size: 13px;">'.concat(e||"Unknown error occurred","</div>\n\t\t<details style=\"margin-top: 10px;\">\n\t\t\t<summary style=\"cursor: pointer; font-size: 13px; margin-bottom: 8px;\">View Original Code</summary>\n\t\t\t<pre style=\"background: #f6f8fa; border: 1px solid #d1d9e0; border-radius: 4px; padding: 10px; margin: 5px 0; overflow-x: auto; font-size: 12px; font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, monospace; white-space: pre-wrap; word-wrap: break-word;\">").concat(t,"</pre>\n\t\t</details>\n\t</div>\n")},_t=function(e){var t=(e||"").trim(),n=ot.find(function(e){return t.startsWith(e)});if(!n)return!1;var r=n.replace("@start","@end");return at.includes(r)&&t.includes(r)},bt=function(e){var t=null==e?void 0:e.files;if(null!=t&&t.length)return Array.from(t).filter(function(e){var t;return null==e||null===(t=e.type)||void 0===t?void 0:t.startsWith("image/")});var n=null==e?void 0:e.items;if(!n)return[];var r,o=[],a=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return Ke(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ke(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var _n=0,r=function(){};return{s:r,n:function(){return _n>=e.length?{done:!0}:{done:!1,value:e[_n++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,i=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){i=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(i)throw o}}}}(n);try{for(a.s();!(r=a.n()).done;){var i=r.value;if(i&&"file"===i.kind&&"string"==typeof i.type&&i.type.startsWith("image/")){var u=i.getAsFile();u&&o.push(u)}}}catch(e){a.e(e)}finally{a.f()}return o},yt=function(e){var t=(null==e?void 0:e.source_url)||(null==e?void 0:e.url);if(!t||!function(e){if(!e||"string"!=typeof e)return!1;try{var t=new URL(e);return["http:","https:"].includes(t.protocol)}catch(t){return e.startsWith("/")&&!e.includes("..")}}(t))return null;var n,r,o="";return"string"==typeof e.alt?o=e.alt:e.title&&(o=e.title),"![".concat((r=o,r?r.replace(/[\[\]\\]/g,"\\$&"):""),"](").concat((n=t)?/[\s()]/.test(n)?"<".concat(n,">"):n:"",")")};const Dt={};function kt(e,t){"string"!=typeof t&&(t=kt.defaultChars);const n=function(e){let t=Dt[e];if(t)return t;t=Dt[e]=[];for(let e=0;e<128;e++){const n=String.fromCharCode(e);t.push(n)}for(let n=0;n<e.length;n++){const r=e.charCodeAt(n);t[r]="%"+("0"+r.toString(16).toUpperCase()).slice(-2)}return t}(t);return e.replace(/(%[a-f0-9]{2})+/gi,function(e){let t="";for(let r=0,o=e.length;r<o;r+=3){const a=parseInt(e.slice(r+1,r+3),16);if(a<128)t+=n[a];else{if(192==(224&a)&&r+3<o){const n=parseInt(e.slice(r+4,r+6),16);if(128==(192&n)){const e=a<<6&1984|63&n;t+=e<128?"��":String.fromCharCode(e),r+=3;continue}}if(224==(240&a)&&r+6<o){const n=parseInt(e.slice(r+4,r+6),16),o=parseInt(e.slice(r+7,r+9),16);if(128==(192&n)&&128==(192&o)){const e=a<<12&61440|n<<6&4032|63&o;t+=e<2048||e>=55296&&e<=57343?"���":String.fromCharCode(e),r+=6;continue}}if(240==(248&a)&&r+9<o){const n=parseInt(e.slice(r+4,r+6),16),o=parseInt(e.slice(r+7,r+9),16),i=parseInt(e.slice(r+10,r+12),16);if(128==(192&n)&&128==(192&o)&&128==(192&i)){let e=a<<18&1835008|n<<12&258048|o<<6&4032|63&i;e<65536||e>1114111?t+="����":(e-=65536,t+=String.fromCharCode(55296+(e>>10),56320+(1023&e))),r+=9;continue}}t+="�"}}return t})}kt.defaultChars=";/?:@&=+$,#",kt.componentChars="";const wt=kt,vt={};function Ft(e,t,n){"string"!=typeof t&&(n=t,t=Ft.defaultChars),void 0===n&&(n=!0);const r=function(e){let t=vt[e];if(t)return t;t=vt[e]=[];for(let e=0;e<128;e++){const n=String.fromCharCode(e);/^[0-9a-z]$/i.test(n)?t.push(n):t.push("%"+("0"+e.toString(16).toUpperCase()).slice(-2))}for(let n=0;n<e.length;n++)t[e.charCodeAt(n)]=e[n];return t}(t);let o="";for(let t=0,a=e.length;t<a;t++){const i=e.charCodeAt(t);if(n&&37===i&&t+2<a&&/^[0-9a-f]{2}$/i.test(e.slice(t+1,t+3)))o+=e.slice(t,t+3),t+=2;else if(i<128)o+=r[i];else if(i>=55296&&i<=57343){if(i>=55296&&i<=56319&&t+1<a){const n=e.charCodeAt(t+1);if(n>=56320&&n<=57343){o+=encodeURIComponent(e[t]+e[t+1]),t++;continue}}o+="%EF%BF%BD"}else o+=encodeURIComponent(e[t])}return o}Ft.defaultChars=";/?:@&=+$,-_.!~*'()#",Ft.componentChars="-_.!~*'()";const Ct=Ft;function Et(e){let t="";return t+=e.protocol||"",t+=e.slashes?"//":"",t+=e.auth?e.auth+"@":"",e.hostname&&-1!==e.hostname.indexOf(":")?t+="["+e.hostname+"]":t+=e.hostname||"",t+=e.port?":"+e.port:"",t+=e.pathname||"",t+=e.search||"",t+=e.hash||"",t}function At(){this.protocol=null,this.slashes=null,this.auth=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.pathname=null}const xt=/^([a-z0-9.+-]+:)/i,St=/:[0-9]*$/,Bt=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,Tt=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),Lt=["'"].concat(Tt),jt=["%","/","?",";","#"].concat(Lt),Mt=["/","?","#"],Ot=/^[+a-z0-9A-Z_-]{0,63}$/,It=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,Rt={javascript:!0,"javascript:":!0},Nt={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};At.prototype.parse=function(e,t){let n,r,o,a=e;if(a=a.trim(),!t&&1===e.split("#").length){const e=Bt.exec(a);if(e)return this.pathname=e[1],e[2]&&(this.search=e[2]),this}let i=xt.exec(a);if(i&&(i=i[0],n=i.toLowerCase(),this.protocol=i,a=a.substr(i.length)),(t||i||a.match(/^\/\/[^@\/]+@[^@\/]+/))&&(o="//"===a.substr(0,2),!o||i&&Rt[i]||(a=a.substr(2),this.slashes=!0)),!Rt[i]&&(o||i&&!Nt[i])){let e,t,n=-1;for(let e=0;e<Mt.length;e++)r=a.indexOf(Mt[e]),-1!==r&&(-1===n||r<n)&&(n=r);t=-1===n?a.lastIndexOf("@"):a.lastIndexOf("@",n),-1!==t&&(e=a.slice(0,t),a=a.slice(t+1),this.auth=e),n=-1;for(let e=0;e<jt.length;e++)r=a.indexOf(jt[e]),-1!==r&&(-1===n||r<n)&&(n=r);-1===n&&(n=a.length),":"===a[n-1]&&n--;const o=a.slice(0,n);a=a.slice(n),this.parseHost(o),this.hostname=this.hostname||"";const i="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!i){const e=this.hostname.split(/\./);for(let t=0,n=e.length;t<n;t++){const n=e[t];if(n&&!n.match(Ot)){let r="";for(let e=0,t=n.length;e<t;e++)n.charCodeAt(e)>127?r+="x":r+=n[e];if(!r.match(Ot)){const r=e.slice(0,t),o=e.slice(t+1),i=n.match(It);i&&(r.push(i[1]),o.unshift(i[2])),o.length&&(a=o.join(".")+a),this.hostname=r.join(".");break}}}}this.hostname.length>255&&(this.hostname=""),i&&(this.hostname=this.hostname.substr(1,this.hostname.length-2))}const u=a.indexOf("#");-1!==u&&(this.hash=a.substr(u),a=a.slice(0,u));const s=a.indexOf("?");return-1!==s&&(this.search=a.substr(s),a=a.slice(0,s)),a&&(this.pathname=a),Nt[n]&&this.hostname&&!this.pathname&&(this.pathname=""),this},At.prototype.parseHost=function(e){let t=St.exec(e);t&&(t=t[0],":"!==t&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)};const Pt=function(e,t){if(e&&e instanceof At)return e;const n=new At;return n.parse(e,t),n},qt=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDEAD\uDF55-\uDF59\uDF86-\uDF89]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDEB9\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2\uDF00-\uDF09]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDF43-\uDF4F\uDFFF]|\uD809[\uDC70-\uDC74]|\uD80B[\uDFF1\uDFF2]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/,zt=/[\$\+<->\^`\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u0888\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20C0\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFF\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u31EF\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC2\uFD40-\uFD4F\uFDCF\uFDFC-\uFDFF\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD]|\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD833[\uDF50-\uDFC3]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDEA\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEDC-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF76\uDF7B-\uDFD9\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDE53\uDE60-\uDE6D\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC5\uDECE-\uDEDB\uDEE0-\uDEE8\uDEF0-\uDEF8\uDF00-\uDF92\uDF94-\uDFCA]/,$t=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,Gt=/[\0-\x1F\x7F-\x9F]/,Ut=/[\xAD\u0600-\u0605\u061C\u06DD\u070F\u0890\u0891\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC3F]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/,Ht=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/,Wt=new Uint16Array('ᵁ<Õıʊҝջאٵ۞ޢߖࠏઑඡ༉༦ረዡᐕᒝᓃᓟᔥ\0\0\0\0\0\0ᕫᛍᦍᰒᷝ↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\bfms¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTLJNjǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\0\0\0͔͂\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲϏϢϸontourIntegraìȹoɴ\0\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\0\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\0ц\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\0\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲy;䐤r;쀀𝔉lledɓ֗\0\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\0ֿ\0\0ׄf;쀀𝔽All;戀riertrf;愱còJTabcdfgorstרׯؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ߂ߐĀiyޱrc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣসে্ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४ĀnrࢃgleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpwਖਛgȀLRlr৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼અઋp;椅y;䐜Ādl੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑඞcy;䐊cute;䅃ƀaeyહાron;䅇dil;䅅;䐝ƀgswે૰ativeƀMTV૨ediumSpace;怋hiĀcn૦ëeryThiîtedĀGLଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷreak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪௫ఄ಄ದൡඅ櫬Āoungruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater;EFGLSTஶஷ扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨setĀ;Eೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂෛ෧ขภยา฿ไlig;䅒cute耻Ó䃓Āiyීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲcr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬืde耻Õ䃕es;樷ml耻Ö䃖erĀBP๋Āar๐๓r;怾acĀek๚;揞et;掴arenthesis;揜ҀacfhilorsງຊຏຒດຝະrtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ檻cedesȀ;EST່້扺qual;檯lantEqual;扼ilde;找me;怳Ādpuct;戏ortionĀ;aȥl;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀𝔔pf;愚cr;쀀𝒬BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL憒ar;懥eftArrow;懄eiling;按oǵ\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄቕቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHcቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗ĀeiቻDzኀ\0ኇefore;戴a;䎘ĀcnኘkSpace;쀀 Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻Dzᕔ\0ᕛoWidtèa;䎖r;愨pf;愤cr;쀀𝒵ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒;Eaeiopᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;eᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;eᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰᝃᝈ០៦ᠹᡐᜍ᥈ᥰot;櫭ĀcrᛶkȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;tbrk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯᝳ;䎲;愶een;扬r;쀀𝔟gcostuvwឍឝឳេ៕៛ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀakoᠦᠵĀcn៲ᠣkƀlst֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ;敛;敘;攘;攔;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģbar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;elƀ;bhᥨᥩᥫ䁜;槅sub;柈ŬᥴlĀ;e怢t»pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭒\0᯽\0ᰌƀcprᦲute;䄇̀;abcdsᦿᧀᧄ᧕᧙戩nd;橄rcup;橉Āau᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r;Ecefms᩠ᩢᩫ᪤᪪旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ\0\0aĀ;t䀬;䁀ƀ;fl戁îᅠeĀmxent»eóɍǧ\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯delprvw᭠᭬᭷ᮂᮬᯔarrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;pᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰻᰿ᱝᱩᱵᲞᲬᲷᴍᵻᶑᶫᶻ᷆᷍ròar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂᳖᳜᳠mƀ;oș᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄĀDoḆᴴoôĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤijạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»ṺƀaeiἒἚls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ffiɩᾹ\0\0᾽g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙῡt;晭ig;耀flns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao⁕Ācs‑⁒ႉ‸⁅⁈\0⁐β•‥‧\0耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₥₰₴⃰℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽ƀ;qsؾٌlanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqrⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0proør;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼ròòΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonóquigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roøurĀ;a⧓⧔普lĀ;s⧓ସdz⧟\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨íistĀ;sடr;쀀𝔫ȀEest⩦⩹⩼ƀ;qs⩭ƀ;qs⩴lanôií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast⭕⭚⭟lleìl;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖchimpqu⮽⯍⯙⬄⯤⯯Ȁ;cerല⯆ഷ⯉uå;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭ååഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñĀ;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;cⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗLjⵚlac;䅑v;樸old;榼lig;䅓Ācrir;榿;쀀𝔬ͯ\0\0\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕⶥⶨrò᪀Āirⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔǒr;榷rp;榹;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ\0\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ脀¶;l䂶leìЃɩ\0\0m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳ᤈ⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t⾴ïrel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⋢⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔ABHabcdefhilmnoprstuxけさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstwガクシスゼゾダッデナp;極Ā;fゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ìâヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘rrowĀ;tㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowóarpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓ròaòՑ;怏oustĀ;a㈞掱che»mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì耻䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;qኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫwar;椪lig耻ß䃟㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rëƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼Dz㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproøim»ኬsðኞĀas㚺㚮ðrn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈadempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xôheadĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roðtré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜtré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split("").map(e=>e.charCodeAt(0))),Zt=new Uint16Array("Ȁaglq\tɭ\0\0p;䀦os;䀧t;䀾t;䀼uot;䀢".split("").map(e=>e.charCodeAt(0)));var Vt;const Kt=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]),Yt=null!==(Vt=String.fromCodePoint)&&void 0!==Vt?Vt:function(e){let t="";return e>65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|1023&e),t+=String.fromCharCode(e),t};var Jt,Xt,Qt,en;function tn(e){return e>=Jt.ZERO&&e<=Jt.NINE}function nn(e){return e>=Jt.UPPER_A&&e<=Jt.UPPER_F||e>=Jt.LOWER_A&&e<=Jt.LOWER_F}function rn(e){return e===Jt.EQUALS||function(e){return e>=Jt.UPPER_A&&e<=Jt.UPPER_Z||e>=Jt.LOWER_A&&e<=Jt.LOWER_Z||tn(e)}(e)}!function(e){e[e.NUM=35]="NUM",e[e.SEMI=59]="SEMI",e[e.EQUALS=61]="EQUALS",e[e.ZERO=48]="ZERO",e[e.NINE=57]="NINE",e[e.LOWER_A=97]="LOWER_A",e[e.LOWER_F=102]="LOWER_F",e[e.LOWER_X=120]="LOWER_X",e[e.LOWER_Z=122]="LOWER_Z",e[e.UPPER_A=65]="UPPER_A",e[e.UPPER_F=70]="UPPER_F",e[e.UPPER_Z=90]="UPPER_Z"}(Jt||(Jt={})),function(e){e[e.VALUE_LENGTH=49152]="VALUE_LENGTH",e[e.BRANCH_LENGTH=16256]="BRANCH_LENGTH",e[e.JUMP_TABLE=127]="JUMP_TABLE"}(Xt||(Xt={})),function(e){e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity"}(Qt||(Qt={})),function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute"}(en||(en={}));class on{constructor(e,t,n){this.decodeTree=e,this.emitCodePoint=t,this.errors=n,this.state=Qt.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=en.Strict}startEntity(e){this.decodeMode=e,this.state=Qt.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1}write(e,t){switch(this.state){case Qt.EntityStart:return e.charCodeAt(t)===Jt.NUM?(this.state=Qt.NumericStart,this.consumed+=1,this.stateNumericStart(e,t+1)):(this.state=Qt.NamedEntity,this.stateNamedEntity(e,t));case Qt.NumericStart:return this.stateNumericStart(e,t);case Qt.NumericDecimal:return this.stateNumericDecimal(e,t);case Qt.NumericHex:return this.stateNumericHex(e,t);case Qt.NamedEntity:return this.stateNamedEntity(e,t)}}stateNumericStart(e,t){return t>=e.length?-1:(32|e.charCodeAt(t))===Jt.LOWER_X?(this.state=Qt.NumericHex,this.consumed+=1,this.stateNumericHex(e,t+1)):(this.state=Qt.NumericDecimal,this.stateNumericDecimal(e,t))}addToNumericResult(e,t,n,r){if(t!==n){const o=n-t;this.result=this.result*Math.pow(r,o)+parseInt(e.substr(t,o),r),this.consumed+=o}}stateNumericHex(e,t){const n=t;for(;t<e.length;){const r=e.charCodeAt(t);if(!tn(r)&&!nn(r))return this.addToNumericResult(e,n,t,16),this.emitNumericEntity(r,3);t+=1}return this.addToNumericResult(e,n,t,16),-1}stateNumericDecimal(e,t){const n=t;for(;t<e.length;){const r=e.charCodeAt(t);if(!tn(r))return this.addToNumericResult(e,n,t,10),this.emitNumericEntity(r,2);t+=1}return this.addToNumericResult(e,n,t,10),-1}emitNumericEntity(e,t){var n;if(this.consumed<=t)return null===(n=this.errors)||void 0===n||n.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(e===Jt.SEMI)this.consumed+=1;else if(this.decodeMode===en.Strict)return 0;return this.emitCodePoint(function(e){var t;return e>=55296&&e<=57343||e>1114111?65533:null!==(t=Kt.get(e))&&void 0!==t?t:e}(this.result),this.consumed),this.errors&&(e!==Jt.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(e,t){const{decodeTree:n}=this;let r=n[this.treeIndex],o=(r&Xt.VALUE_LENGTH)>>14;for(;t<e.length;t++,this.excess++){const a=e.charCodeAt(t);if(this.treeIndex=un(n,r,this.treeIndex+Math.max(1,o),a),this.treeIndex<0)return 0===this.result||this.decodeMode===en.Attribute&&(0===o||rn(a))?0:this.emitNotTerminatedNamedEntity();if(r=n[this.treeIndex],o=(r&Xt.VALUE_LENGTH)>>14,0!==o){if(a===Jt.SEMI)return this.emitNamedEntityData(this.treeIndex,o,this.consumed+this.excess);this.decodeMode!==en.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1}emitNotTerminatedNamedEntity(){var e;const{result:t,decodeTree:n}=this,r=(n[t]&Xt.VALUE_LENGTH)>>14;return this.emitNamedEntityData(t,r,this.consumed),null===(e=this.errors)||void 0===e||e.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(e,t,n){const{decodeTree:r}=this;return this.emitCodePoint(1===t?r[e]&~Xt.VALUE_LENGTH:r[e+1],n),3===t&&this.emitCodePoint(r[e+2],n),n}end(){var e;switch(this.state){case Qt.NamedEntity:return 0===this.result||this.decodeMode===en.Attribute&&this.result!==this.treeIndex?0:this.emitNotTerminatedNamedEntity();case Qt.NumericDecimal:return this.emitNumericEntity(0,2);case Qt.NumericHex:return this.emitNumericEntity(0,3);case Qt.NumericStart:return null===(e=this.errors)||void 0===e||e.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case Qt.EntityStart:return 0}}}function an(e){let t="";const n=new on(e,e=>t+=Yt(e));return function(e,r){let o=0,a=0;for(;(a=e.indexOf("&",a))>=0;){t+=e.slice(o,a),n.startEntity(r);const i=n.write(e,a+1);if(i<0){o=a+n.end();break}o=a+i,a=0===i?o+1:o}const i=t+e.slice(o);return t="",i}}function un(e,t,n,r){const o=(t&Xt.BRANCH_LENGTH)>>7,a=t&Xt.JUMP_TABLE;if(0===o)return 0!==a&&r===a?n:-1;if(a){const t=r-a;return t<0||t>=o?-1:e[n+t]-1}let i=n,u=i+o-1;for(;i<=u;){const t=i+u>>>1,n=e[t];if(n<r)i=t+1;else{if(!(n>r))return e[t+o];u=t-1}}return-1}const sn=an(Wt);function ln(e){for(let t=1;t<e.length;t++)e[t][0]+=e[t-1][0]+1;return e}an(Zt),new Map(ln([[9,"	"],[0,"
"],[22,"!"],[0,"""],[0,"#"],[0,"$"],[0,"%"],[0,"&"],[0,"'"],[0,"("],[0,")"],[0,"*"],[0,"+"],[0,","],[1,"."],[0,"/"],[10,":"],[0,";"],[0,{v:"<",n:8402,o:"<⃒"}],[0,{v:"=",n:8421,o:"=⃥"}],[0,{v:">",n:8402,o:">⃒"}],[0,"?"],[0,"@"],[26,"["],[0,"\"],[0,"]"],[0,"^"],[0,"_"],[0,"`"],[5,{n:106,o:"fj"}],[20,"{"],[0,"|"],[0,"}"],[34," "],[0,"¡"],[0,"¢"],[0,"£"],[0,"¤"],[0,"¥"],[0,"¦"],[0,"§"],[0,"¨"],[0,"©"],[0,"ª"],[0,"«"],[0,"¬"],[0,"­"],[0,"®"],[0,"¯"],[0,"°"],[0,"±"],[0,"²"],[0,"³"],[0,"´"],[0,"µ"],[0,"¶"],[0,"·"],[0,"¸"],[0,"¹"],[0,"º"],[0,"»"],[0,"¼"],[0,"½"],[0,"¾"],[0,"¿"],[0,"À"],[0,"Á"],[0,"Â"],[0,"Ã"],[0,"Ä"],[0,"Å"],[0,"Æ"],[0,"Ç"],[0,"È"],[0,"É"],[0,"Ê"],[0,"Ë"],[0,"Ì"],[0,"Í"],[0,"Î"],[0,"Ï"],[0,"Ð"],[0,"Ñ"],[0,"Ò"],[0,"Ó"],[0,"Ô"],[0,"Õ"],[0,"Ö"],[0,"×"],[0,"Ø"],[0,"Ù"],[0,"Ú"],[0,"Û"],[0,"Ü"],[0,"Ý"],[0,"Þ"],[0,"ß"],[0,"à"],[0,"á"],[0,"â"],[0,"ã"],[0,"ä"],[0,"å"],[0,"æ"],[0,"ç"],[0,"è"],[0,"é"],[0,"ê"],[0,"ë"],[0,"ì"],[0,"í"],[0,"î"],[0,"ï"],[0,"ð"],[0,"ñ"],[0,"ò"],[0,"ó"],[0,"ô"],[0,"õ"],[0,"ö"],[0,"÷"],[0,"ø"],[0,"ù"],[0,"ú"],[0,"û"],[0,"ü"],[0,"ý"],[0,"þ"],[0,"ÿ"],[0,"Ā"],[0,"ā"],[0,"Ă"],[0,"ă"],[0,"Ą"],[0,"ą"],[0,"Ć"],[0,"ć"],[0,"Ĉ"],[0,"ĉ"],[0,"Ċ"],[0,"ċ"],[0,"Č"],[0,"č"],[0,"Ď"],[0,"ď"],[0,"Đ"],[0,"đ"],[0,"Ē"],[0,"ē"],[2,"Ė"],[0,"ė"],[0,"Ę"],[0,"ę"],[0,"Ě"],[0,"ě"],[0,"Ĝ"],[0,"ĝ"],[0,"Ğ"],[0,"ğ"],[0,"Ġ"],[0,"ġ"],[0,"Ģ"],[1,"Ĥ"],[0,"ĥ"],[0,"Ħ"],[0,"ħ"],[0,"Ĩ"],[0,"ĩ"],[0,"Ī"],[0,"ī"],[2,"Į"],[0,"į"],[0,"İ"],[0,"ı"],[0,"IJ"],[0,"ij"],[0,"Ĵ"],[0,"ĵ"],[0,"Ķ"],[0,"ķ"],[0,"ĸ"],[0,"Ĺ"],[0,"ĺ"],[0,"Ļ"],[0,"ļ"],[0,"Ľ"],[0,"ľ"],[0,"Ŀ"],[0,"ŀ"],[0,"Ł"],[0,"ł"],[0,"Ń"],[0,"ń"],[0,"Ņ"],[0,"ņ"],[0,"Ň"],[0,"ň"],[0,"ʼn"],[0,"Ŋ"],[0,"ŋ"],[0,"Ō"],[0,"ō"],[2,"Ő"],[0,"ő"],[0,"Œ"],[0,"œ"],[0,"Ŕ"],[0,"ŕ"],[0,"Ŗ"],[0,"ŗ"],[0,"Ř"],[0,"ř"],[0,"Ś"],[0,"ś"],[0,"Ŝ"],[0,"ŝ"],[0,"Ş"],[0,"ş"],[0,"Š"],[0,"š"],[0,"Ţ"],[0,"ţ"],[0,"Ť"],[0,"ť"],[0,"Ŧ"],[0,"ŧ"],[0,"Ũ"],[0,"ũ"],[0,"Ū"],[0,"ū"],[0,"Ŭ"],[0,"ŭ"],[0,"Ů"],[0,"ů"],[0,"Ű"],[0,"ű"],[0,"Ų"],[0,"ų"],[0,"Ŵ"],[0,"ŵ"],[0,"Ŷ"],[0,"ŷ"],[0,"Ÿ"],[0,"Ź"],[0,"ź"],[0,"Ż"],[0,"ż"],[0,"Ž"],[0,"ž"],[19,"ƒ"],[34,"Ƶ"],[63,"ǵ"],[65,"ȷ"],[142,"ˆ"],[0,"ˇ"],[16,"˘"],[0,"˙"],[0,"˚"],[0,"˛"],[0,"˜"],[0,"˝"],[51,"̑"],[127,"Α"],[0,"Β"],[0,"Γ"],[0,"Δ"],[0,"Ε"],[0,"Ζ"],[0,"Η"],[0,"Θ"],[0,"Ι"],[0,"Κ"],[0,"Λ"],[0,"Μ"],[0,"Ν"],[0,"Ξ"],[0,"Ο"],[0,"Π"],[0,"Ρ"],[1,"Σ"],[0,"Τ"],[0,"Υ"],[0,"Φ"],[0,"Χ"],[0,"Ψ"],[0,"Ω"],[7,"α"],[0,"β"],[0,"γ"],[0,"δ"],[0,"ε"],[0,"ζ"],[0,"η"],[0,"θ"],[0,"ι"],[0,"κ"],[0,"λ"],[0,"μ"],[0,"ν"],[0,"ξ"],[0,"ο"],[0,"π"],[0,"ρ"],[0,"ς"],[0,"σ"],[0,"τ"],[0,"υ"],[0,"φ"],[0,"χ"],[0,"ψ"],[0,"ω"],[7,"ϑ"],[0,"ϒ"],[2,"ϕ"],[0,"ϖ"],[5,"Ϝ"],[0,"ϝ"],[18,"ϰ"],[0,"ϱ"],[3,"ϵ"],[0,"϶"],[10,"Ё"],[0,"Ђ"],[0,"Ѓ"],[0,"Є"],[0,"Ѕ"],[0,"І"],[0,"Ї"],[0,"Ј"],[0,"Љ"],[0,"Њ"],[0,"Ћ"],[0,"Ќ"],[1,"Ў"],[0,"Џ"],[0,"А"],[0,"Б"],[0,"В"],[0,"Г"],[0,"Д"],[0,"Е"],[0,"Ж"],[0,"З"],[0,"И"],[0,"Й"],[0,"К"],[0,"Л"],[0,"М"],[0,"Н"],[0,"О"],[0,"П"],[0,"Р"],[0,"С"],[0,"Т"],[0,"У"],[0,"Ф"],[0,"Х"],[0,"Ц"],[0,"Ч"],[0,"Ш"],[0,"Щ"],[0,"Ъ"],[0,"Ы"],[0,"Ь"],[0,"Э"],[0,"Ю"],[0,"Я"],[0,"а"],[0,"б"],[0,"в"],[0,"г"],[0,"д"],[0,"е"],[0,"ж"],[0,"з"],[0,"и"],[0,"й"],[0,"к"],[0,"л"],[0,"м"],[0,"н"],[0,"о"],[0,"п"],[0,"р"],[0,"с"],[0,"т"],[0,"у"],[0,"ф"],[0,"х"],[0,"ц"],[0,"ч"],[0,"ш"],[0,"щ"],[0,"ъ"],[0,"ы"],[0,"ь"],[0,"э"],[0,"ю"],[0,"я"],[1,"ё"],[0,"ђ"],[0,"ѓ"],[0,"є"],[0,"ѕ"],[0,"і"],[0,"ї"],[0,"ј"],[0,"љ"],[0,"њ"],[0,"ћ"],[0,"ќ"],[1,"ў"],[0,"џ"],[7074," "],[0," "],[0," "],[0," "],[1," "],[0," "],[0," "],[0," "],[0,"​"],[0,"‌"],[0,"‍"],[0,"‎"],[0,"‏"],[0,"‐"],[2,"–"],[0,"—"],[0,"―"],[0,"‖"],[1,"‘"],[0,"’"],[0,"‚"],[1,"“"],[0,"”"],[0,"„"],[1,"†"],[0,"‡"],[0,"•"],[2,"‥"],[0,"…"],[9,"‰"],[0,"‱"],[0,"′"],[0,"″"],[0,"‴"],[0,"‵"],[3,"‹"],[0,"›"],[3,"‾"],[2,"⁁"],[1,"⁃"],[0,"⁄"],[10,"⁏"],[7,"⁗"],[7,{v:" ",n:8202,o:"  "}],[0,"⁠"],[0,"⁡"],[0,"⁢"],[0,"⁣"],[72,"€"],[46,"⃛"],[0,"⃜"],[37,"ℂ"],[2,"℅"],[4,"ℊ"],[0,"ℋ"],[0,"ℌ"],[0,"ℍ"],[0,"ℎ"],[0,"ℏ"],[0,"ℐ"],[0,"ℑ"],[0,"ℒ"],[0,"ℓ"],[1,"ℕ"],[0,"№"],[0,"℗"],[0,"℘"],[0,"ℙ"],[0,"ℚ"],[0,"ℛ"],[0,"ℜ"],[0,"ℝ"],[0,"℞"],[3,"™"],[1,"ℤ"],[2,"℧"],[0,"ℨ"],[0,"℩"],[2,"ℬ"],[0,"ℭ"],[1,"ℯ"],[0,"ℰ"],[0,"ℱ"],[1,"ℳ"],[0,"ℴ"],[0,"ℵ"],[0,"ℶ"],[0,"ℷ"],[0,"ℸ"],[12,"ⅅ"],[0,"ⅆ"],[0,"ⅇ"],[0,"ⅈ"],[10,"⅓"],[0,"⅔"],[0,"⅕"],[0,"⅖"],[0,"⅗"],[0,"⅘"],[0,"⅙"],[0,"⅚"],[0,"⅛"],[0,"⅜"],[0,"⅝"],[0,"⅞"],[49,"←"],[0,"↑"],[0,"→"],[0,"↓"],[0,"↔"],[0,"↕"],[0,"↖"],[0,"↗"],[0,"↘"],[0,"↙"],[0,"↚"],[0,"↛"],[1,{v:"↝",n:824,o:"↝̸"}],[0,"↞"],[0,"↟"],[0,"↠"],[0,"↡"],[0,"↢"],[0,"↣"],[0,"↤"],[0,"↥"],[0,"↦"],[0,"↧"],[1,"↩"],[0,"↪"],[0,"↫"],[0,"↬"],[0,"↭"],[0,"↮"],[1,"↰"],[0,"↱"],[0,"↲"],[0,"↳"],[1,"↵"],[0,"↶"],[0,"↷"],[2,"↺"],[0,"↻"],[0,"↼"],[0,"↽"],[0,"↾"],[0,"↿"],[0,"⇀"],[0,"⇁"],[0,"⇂"],[0,"⇃"],[0,"⇄"],[0,"⇅"],[0,"⇆"],[0,"⇇"],[0,"⇈"],[0,"⇉"],[0,"⇊"],[0,"⇋"],[0,"⇌"],[0,"⇍"],[0,"⇎"],[0,"⇏"],[0,"⇐"],[0,"⇑"],[0,"⇒"],[0,"⇓"],[0,"⇔"],[0,"⇕"],[0,"⇖"],[0,"⇗"],[0,"⇘"],[0,"⇙"],[0,"⇚"],[0,"⇛"],[1,"⇝"],[6,"⇤"],[0,"⇥"],[15,"⇵"],[7,"⇽"],[0,"⇾"],[0,"⇿"],[0,"∀"],[0,"∁"],[0,{v:"∂",n:824,o:"∂̸"}],[0,"∃"],[0,"∄"],[0,"∅"],[1,"∇"],[0,"∈"],[0,"∉"],[1,"∋"],[0,"∌"],[2,"∏"],[0,"∐"],[0,"∑"],[0,"−"],[0,"∓"],[0,"∔"],[1,"∖"],[0,"∗"],[0,"∘"],[1,"√"],[2,"∝"],[0,"∞"],[0,"∟"],[0,{v:"∠",n:8402,o:"∠⃒"}],[0,"∡"],[0,"∢"],[0,"∣"],[0,"∤"],[0,"∥"],[0,"∦"],[0,"∧"],[0,"∨"],[0,{v:"∩",n:65024,o:"∩︀"}],[0,{v:"∪",n:65024,o:"∪︀"}],[0,"∫"],[0,"∬"],[0,"∭"],[0,"∮"],[0,"∯"],[0,"∰"],[0,"∱"],[0,"∲"],[0,"∳"],[0,"∴"],[0,"∵"],[0,"∶"],[0,"∷"],[0,"∸"],[1,"∺"],[0,"∻"],[0,{v:"∼",n:8402,o:"∼⃒"}],[0,{v:"∽",n:817,o:"∽̱"}],[0,{v:"∾",n:819,o:"∾̳"}],[0,"∿"],[0,"≀"],[0,"≁"],[0,{v:"≂",n:824,o:"≂̸"}],[0,"≃"],[0,"≄"],[0,"≅"],[0,"≆"],[0,"≇"],[0,"≈"],[0,"≉"],[0,"≊"],[0,{v:"≋",n:824,o:"≋̸"}],[0,"≌"],[0,{v:"≍",n:8402,o:"≍⃒"}],[0,{v:"≎",n:824,o:"≎̸"}],[0,{v:"≏",n:824,o:"≏̸"}],[0,{v:"≐",n:824,o:"≐̸"}],[0,"≑"],[0,"≒"],[0,"≓"],[0,"≔"],[0,"≕"],[0,"≖"],[0,"≗"],[1,"≙"],[0,"≚"],[1,"≜"],[2,"≟"],[0,"≠"],[0,{v:"≡",n:8421,o:"≡⃥"}],[0,"≢"],[1,{v:"≤",n:8402,o:"≤⃒"}],[0,{v:"≥",n:8402,o:"≥⃒"}],[0,{v:"≦",n:824,o:"≦̸"}],[0,{v:"≧",n:824,o:"≧̸"}],[0,{v:"≨",n:65024,o:"≨︀"}],[0,{v:"≩",n:65024,o:"≩︀"}],[0,{v:"≪",n:new Map(ln([[824,"≪̸"],[7577,"≪⃒"]]))}],[0,{v:"≫",n:new Map(ln([[824,"≫̸"],[7577,"≫⃒"]]))}],[0,"≬"],[0,"≭"],[0,"≮"],[0,"≯"],[0,"≰"],[0,"≱"],[0,"≲"],[0,"≳"],[0,"≴"],[0,"≵"],[0,"≶"],[0,"≷"],[0,"≸"],[0,"≹"],[0,"≺"],[0,"≻"],[0,"≼"],[0,"≽"],[0,"≾"],[0,{v:"≿",n:824,o:"≿̸"}],[0,"⊀"],[0,"⊁"],[0,{v:"⊂",n:8402,o:"⊂⃒"}],[0,{v:"⊃",n:8402,o:"⊃⃒"}],[0,"⊄"],[0,"⊅"],[0,"⊆"],[0,"⊇"],[0,"⊈"],[0,"⊉"],[0,{v:"⊊",n:65024,o:"⊊︀"}],[0,{v:"⊋",n:65024,o:"⊋︀"}],[1,"⊍"],[0,"⊎"],[0,{v:"⊏",n:824,o:"⊏̸"}],[0,{v:"⊐",n:824,o:"⊐̸"}],[0,"⊑"],[0,"⊒"],[0,{v:"⊓",n:65024,o:"⊓︀"}],[0,{v:"⊔",n:65024,o:"⊔︀"}],[0,"⊕"],[0,"⊖"],[0,"⊗"],[0,"⊘"],[0,"⊙"],[0,"⊚"],[0,"⊛"],[1,"⊝"],[0,"⊞"],[0,"⊟"],[0,"⊠"],[0,"⊡"],[0,"⊢"],[0,"⊣"],[0,"⊤"],[0,"⊥"],[1,"⊧"],[0,"⊨"],[0,"⊩"],[0,"⊪"],[0,"⊫"],[0,"⊬"],[0,"⊭"],[0,"⊮"],[0,"⊯"],[0,"⊰"],[1,"⊲"],[0,"⊳"],[0,{v:"⊴",n:8402,o:"⊴⃒"}],[0,{v:"⊵",n:8402,o:"⊵⃒"}],[0,"⊶"],[0,"⊷"],[0,"⊸"],[0,"⊹"],[0,"⊺"],[0,"⊻"],[1,"⊽"],[0,"⊾"],[0,"⊿"],[0,"⋀"],[0,"⋁"],[0,"⋂"],[0,"⋃"],[0,"⋄"],[0,"⋅"],[0,"⋆"],[0,"⋇"],[0,"⋈"],[0,"⋉"],[0,"⋊"],[0,"⋋"],[0,"⋌"],[0,"⋍"],[0,"⋎"],[0,"⋏"],[0,"⋐"],[0,"⋑"],[0,"⋒"],[0,"⋓"],[0,"⋔"],[0,"⋕"],[0,"⋖"],[0,"⋗"],[0,{v:"⋘",n:824,o:"⋘̸"}],[0,{v:"⋙",n:824,o:"⋙̸"}],[0,{v:"⋚",n:65024,o:"⋚︀"}],[0,{v:"⋛",n:65024,o:"⋛︀"}],[2,"⋞"],[0,"⋟"],[0,"⋠"],[0,"⋡"],[0,"⋢"],[0,"⋣"],[2,"⋦"],[0,"⋧"],[0,"⋨"],[0,"⋩"],[0,"⋪"],[0,"⋫"],[0,"⋬"],[0,"⋭"],[0,"⋮"],[0,"⋯"],[0,"⋰"],[0,"⋱"],[0,"⋲"],[0,"⋳"],[0,"⋴"],[0,{v:"⋵",n:824,o:"⋵̸"}],[0,"⋶"],[0,"⋷"],[1,{v:"⋹",n:824,o:"⋹̸"}],[0,"⋺"],[0,"⋻"],[0,"⋼"],[0,"⋽"],[0,"⋾"],[6,"⌅"],[0,"⌆"],[1,"⌈"],[0,"⌉"],[0,"⌊"],[0,"⌋"],[0,"⌌"],[0,"⌍"],[0,"⌎"],[0,"⌏"],[0,"⌐"],[1,"⌒"],[0,"⌓"],[1,"⌕"],[0,"⌖"],[5,"⌜"],[0,"⌝"],[0,"⌞"],[0,"⌟"],[2,"⌢"],[0,"⌣"],[9,"⌭"],[0,"⌮"],[7,"⌶"],[6,"⌽"],[1,"⌿"],[60,"⍼"],[51,"⎰"],[0,"⎱"],[2,"⎴"],[0,"⎵"],[0,"⎶"],[37,"⏜"],[0,"⏝"],[0,"⏞"],[0,"⏟"],[2,"⏢"],[4,"⏧"],[59,"␣"],[164,"Ⓢ"],[55,"─"],[1,"│"],[9,"┌"],[3,"┐"],[3,"└"],[3,"┘"],[3,"├"],[7,"┤"],[7,"┬"],[7,"┴"],[7,"┼"],[19,"═"],[0,"║"],[0,"╒"],[0,"╓"],[0,"╔"],[0,"╕"],[0,"╖"],[0,"╗"],[0,"╘"],[0,"╙"],[0,"╚"],[0,"╛"],[0,"╜"],[0,"╝"],[0,"╞"],[0,"╟"],[0,"╠"],[0,"╡"],[0,"╢"],[0,"╣"],[0,"╤"],[0,"╥"],[0,"╦"],[0,"╧"],[0,"╨"],[0,"╩"],[0,"╪"],[0,"╫"],[0,"╬"],[19,"▀"],[3,"▄"],[3,"█"],[8,"░"],[0,"▒"],[0,"▓"],[13,"□"],[8,"▪"],[0,"▫"],[1,"▭"],[0,"▮"],[2,"▱"],[1,"△"],[0,"▴"],[0,"▵"],[2,"▸"],[0,"▹"],[3,"▽"],[0,"▾"],[0,"▿"],[2,"◂"],[0,"◃"],[6,"◊"],[0,"○"],[32,"◬"],[2,"◯"],[8,"◸"],[0,"◹"],[0,"◺"],[0,"◻"],[0,"◼"],[8,"★"],[0,"☆"],[7,"☎"],[49,"♀"],[1,"♂"],[29,"♠"],[2,"♣"],[1,"♥"],[0,"♦"],[3,"♪"],[2,"♭"],[0,"♮"],[0,"♯"],[163,"✓"],[3,"✗"],[8,"✠"],[21,"✶"],[33,"❘"],[25,"❲"],[0,"❳"],[84,"⟈"],[0,"⟉"],[28,"⟦"],[0,"⟧"],[0,"⟨"],[0,"⟩"],[0,"⟪"],[0,"⟫"],[0,"⟬"],[0,"⟭"],[7,"⟵"],[0,"⟶"],[0,"⟷"],[0,"⟸"],[0,"⟹"],[0,"⟺"],[1,"⟼"],[2,"⟿"],[258,"⤂"],[0,"⤃"],[0,"⤄"],[0,"⤅"],[6,"⤌"],[0,"⤍"],[0,"⤎"],[0,"⤏"],[0,"⤐"],[0,"⤑"],[0,"⤒"],[0,"⤓"],[2,"⤖"],[2,"⤙"],[0,"⤚"],[0,"⤛"],[0,"⤜"],[0,"⤝"],[0,"⤞"],[0,"⤟"],[0,"⤠"],[2,"⤣"],[0,"⤤"],[0,"⤥"],[0,"⤦"],[0,"⤧"],[0,"⤨"],[0,"⤩"],[0,"⤪"],[8,{v:"⤳",n:824,o:"⤳̸"}],[1,"⤵"],[0,"⤶"],[0,"⤷"],[0,"⤸"],[0,"⤹"],[2,"⤼"],[0,"⤽"],[7,"⥅"],[2,"⥈"],[0,"⥉"],[0,"⥊"],[0,"⥋"],[2,"⥎"],[0,"⥏"],[0,"⥐"],[0,"⥑"],[0,"⥒"],[0,"⥓"],[0,"⥔"],[0,"⥕"],[0,"⥖"],[0,"⥗"],[0,"⥘"],[0,"⥙"],[0,"⥚"],[0,"⥛"],[0,"⥜"],[0,"⥝"],[0,"⥞"],[0,"⥟"],[0,"⥠"],[0,"⥡"],[0,"⥢"],[0,"⥣"],[0,"⥤"],[0,"⥥"],[0,"⥦"],[0,"⥧"],[0,"⥨"],[0,"⥩"],[0,"⥪"],[0,"⥫"],[0,"⥬"],[0,"⥭"],[0,"⥮"],[0,"⥯"],[0,"⥰"],[0,"⥱"],[0,"⥲"],[0,"⥳"],[0,"⥴"],[0,"⥵"],[0,"⥶"],[1,"⥸"],[0,"⥹"],[1,"⥻"],[0,"⥼"],[0,"⥽"],[0,"⥾"],[0,"⥿"],[5,"⦅"],[0,"⦆"],[4,"⦋"],[0,"⦌"],[0,"⦍"],[0,"⦎"],[0,"⦏"],[0,"⦐"],[0,"⦑"],[0,"⦒"],[0,"⦓"],[0,"⦔"],[0,"⦕"],[0,"⦖"],[3,"⦚"],[1,"⦜"],[0,"⦝"],[6,"⦤"],[0,"⦥"],[0,"⦦"],[0,"⦧"],[0,"⦨"],[0,"⦩"],[0,"⦪"],[0,"⦫"],[0,"⦬"],[0,"⦭"],[0,"⦮"],[0,"⦯"],[0,"⦰"],[0,"⦱"],[0,"⦲"],[0,"⦳"],[0,"⦴"],[0,"⦵"],[0,"⦶"],[0,"⦷"],[1,"⦹"],[1,"⦻"],[0,"⦼"],[1,"⦾"],[0,"⦿"],[0,"⧀"],[0,"⧁"],[0,"⧂"],[0,"⧃"],[0,"⧄"],[0,"⧅"],[3,"⧉"],[3,"⧍"],[0,"⧎"],[0,{v:"⧏",n:824,o:"⧏̸"}],[0,{v:"⧐",n:824,o:"⧐̸"}],[11,"⧜"],[0,"⧝"],[0,"⧞"],[4,"⧣"],[0,"⧤"],[0,"⧥"],[5,"⧫"],[8,"⧴"],[1,"⧶"],[9,"⨀"],[0,"⨁"],[0,"⨂"],[1,"⨄"],[1,"⨆"],[5,"⨌"],[0,"⨍"],[2,"⨐"],[0,"⨑"],[0,"⨒"],[0,"⨓"],[0,"⨔"],[0,"⨕"],[0,"⨖"],[0,"⨗"],[10,"⨢"],[0,"⨣"],[0,"⨤"],[0,"⨥"],[0,"⨦"],[0,"⨧"],[1,"⨩"],[0,"⨪"],[2,"⨭"],[0,"⨮"],[0,"⨯"],[0,"⨰"],[0,"⨱"],[1,"⨳"],[0,"⨴"],[0,"⨵"],[0,"⨶"],[0,"⨷"],[0,"⨸"],[0,"⨹"],[0,"⨺"],[0,"⨻"],[0,"⨼"],[2,"⨿"],[0,"⩀"],[1,"⩂"],[0,"⩃"],[0,"⩄"],[0,"⩅"],[0,"⩆"],[0,"⩇"],[0,"⩈"],[0,"⩉"],[0,"⩊"],[0,"⩋"],[0,"⩌"],[0,"⩍"],[2,"⩐"],[2,"⩓"],[0,"⩔"],[0,"⩕"],[0,"⩖"],[0,"⩗"],[0,"⩘"],[1,"⩚"],[0,"⩛"],[0,"⩜"],[0,"⩝"],[1,"⩟"],[6,"⩦"],[3,"⩪"],[2,{v:"⩭",n:824,o:"⩭̸"}],[0,"⩮"],[0,"⩯"],[0,{v:"⩰",n:824,o:"⩰̸"}],[0,"⩱"],[0,"⩲"],[0,"⩳"],[0,"⩴"],[0,"⩵"],[1,"⩷"],[0,"⩸"],[0,"⩹"],[0,"⩺"],[0,"⩻"],[0,"⩼"],[0,{v:"⩽",n:824,o:"⩽̸"}],[0,{v:"⩾",n:824,o:"⩾̸"}],[0,"⩿"],[0,"⪀"],[0,"⪁"],[0,"⪂"],[0,"⪃"],[0,"⪄"],[0,"⪅"],[0,"⪆"],[0,"⪇"],[0,"⪈"],[0,"⪉"],[0,"⪊"],[0,"⪋"],[0,"⪌"],[0,"⪍"],[0,"⪎"],[0,"⪏"],[0,"⪐"],[0,"⪑"],[0,"⪒"],[0,"⪓"],[0,"⪔"],[0,"⪕"],[0,"⪖"],[0,"⪗"],[0,"⪘"],[0,"⪙"],[0,"⪚"],[2,"⪝"],[0,"⪞"],[0,"⪟"],[0,"⪠"],[0,{v:"⪡",n:824,o:"⪡̸"}],[0,{v:"⪢",n:824,o:"⪢̸"}],[1,"⪤"],[0,"⪥"],[0,"⪦"],[0,"⪧"],[0,"⪨"],[0,"⪩"],[0,"⪪"],[0,"⪫"],[0,{v:"⪬",n:65024,o:"⪬︀"}],[0,{v:"⪭",n:65024,o:"⪭︀"}],[0,"⪮"],[0,{v:"⪯",n:824,o:"⪯̸"}],[0,{v:"⪰",n:824,o:"⪰̸"}],[2,"⪳"],[0,"⪴"],[0,"⪵"],[0,"⪶"],[0,"⪷"],[0,"⪸"],[0,"⪹"],[0,"⪺"],[0,"⪻"],[0,"⪼"],[0,"⪽"],[0,"⪾"],[0,"⪿"],[0,"⫀"],[0,"⫁"],[0,"⫂"],[0,"⫃"],[0,"⫄"],[0,{v:"⫅",n:824,o:"⫅̸"}],[0,{v:"⫆",n:824,o:"⫆̸"}],[0,"⫇"],[0,"⫈"],[2,{v:"⫋",n:65024,o:"⫋︀"}],[0,{v:"⫌",n:65024,o:"⫌︀"}],[2,"⫏"],[0,"⫐"],[0,"⫑"],[0,"⫒"],[0,"⫓"],[0,"⫔"],[0,"⫕"],[0,"⫖"],[0,"⫗"],[0,"⫘"],[0,"⫙"],[0,"⫚"],[0,"⫛"],[8,"⫤"],[1,"⫦"],[0,"⫧"],[0,"⫨"],[0,"⫩"],[1,"⫫"],[0,"⫬"],[0,"⫭"],[0,"⫮"],[0,"⫯"],[0,"⫰"],[0,"⫱"],[0,"⫲"],[0,"⫳"],[9,{v:"⫽",n:8421,o:"⫽⃥"}],[44343,{n:new Map(ln([[56476,"𝒜"],[1,"𝒞"],[0,"𝒟"],[2,"𝒢"],[2,"𝒥"],[0,"𝒦"],[2,"𝒩"],[0,"𝒪"],[0,"𝒫"],[0,"𝒬"],[1,"𝒮"],[0,"𝒯"],[0,"𝒰"],[0,"𝒱"],[0,"𝒲"],[0,"𝒳"],[0,"𝒴"],[0,"𝒵"],[0,"𝒶"],[0,"𝒷"],[0,"𝒸"],[0,"𝒹"],[1,"𝒻"],[1,"𝒽"],[0,"𝒾"],[0,"𝒿"],[0,"𝓀"],[0,"𝓁"],[0,"𝓂"],[0,"𝓃"],[1,"𝓅"],[0,"𝓆"],[0,"𝓇"],[0,"𝓈"],[0,"𝓉"],[0,"𝓊"],[0,"𝓋"],[0,"𝓌"],[0,"𝓍"],[0,"𝓎"],[0,"𝓏"],[52,"𝔄"],[0,"𝔅"],[1,"𝔇"],[0,"𝔈"],[0,"𝔉"],[0,"𝔊"],[2,"𝔍"],[0,"𝔎"],[0,"𝔏"],[0,"𝔐"],[0,"𝔑"],[0,"𝔒"],[0,"𝔓"],[0,"𝔔"],[1,"𝔖"],[0,"𝔗"],[0,"𝔘"],[0,"𝔙"],[0,"𝔚"],[0,"𝔛"],[0,"𝔜"],[1,"𝔞"],[0,"𝔟"],[0,"𝔠"],[0,"𝔡"],[0,"𝔢"],[0,"𝔣"],[0,"𝔤"],[0,"𝔥"],[0,"𝔦"],[0,"𝔧"],[0,"𝔨"],[0,"𝔩"],[0,"𝔪"],[0,"𝔫"],[0,"𝔬"],[0,"𝔭"],[0,"𝔮"],[0,"𝔯"],[0,"𝔰"],[0,"𝔱"],[0,"𝔲"],[0,"𝔳"],[0,"𝔴"],[0,"𝔵"],[0,"𝔶"],[0,"𝔷"],[0,"𝔸"],[0,"𝔹"],[1,"𝔻"],[0,"𝔼"],[0,"𝔽"],[0,"𝔾"],[1,"𝕀"],[0,"𝕁"],[0,"𝕂"],[0,"𝕃"],[0,"𝕄"],[1,"𝕆"],[3,"𝕊"],[0,"𝕋"],[0,"𝕌"],[0,"𝕍"],[0,"𝕎"],[0,"𝕏"],[0,"𝕐"],[1,"𝕒"],[0,"𝕓"],[0,"𝕔"],[0,"𝕕"],[0,"𝕖"],[0,"𝕗"],[0,"𝕘"],[0,"𝕙"],[0,"𝕚"],[0,"𝕛"],[0,"𝕜"],[0,"𝕝"],[0,"𝕞"],[0,"𝕟"],[0,"𝕠"],[0,"𝕡"],[0,"𝕢"],[0,"𝕣"],[0,"𝕤"],[0,"𝕥"],[0,"𝕦"],[0,"𝕧"],[0,"𝕨"],[0,"𝕩"],[0,"𝕪"],[0,"𝕫"]]))}],[8906,"ff"],[0,"fi"],[0,"fl"],[0,"ffi"],[0,"ffl"]]));const cn=new Map([[34,"""],[38,"&"],[39,"'"],[60,"<"],[62,">"]]);function fn(e,t){return function(n){let r,o=0,a="";for(;r=e.exec(n);)o!==r.index&&(a+=n.substring(o,r.index)),a+=t.get(r[0].charCodeAt(0)),o=r.index+1;return a+n.substring(o)}}var pn,dn;function hn(e){return"[object String]"===function(e){return Object.prototype.toString.call(e)}(e)}String.prototype.codePointAt,fn(/[&<>'"]/g,cn),fn(/["&\u00A0]/g,new Map([[34,"""],[38,"&"],[160," "]])),fn(/[&<>\u00A0]/g,new Map([[38,"&"],[60,"<"],[62,">"],[160," "]])),function(e){e[e.XML=0]="XML",e[e.HTML=1]="HTML"}(pn||(pn={})),function(e){e[e.UTF8=0]="UTF8",e[e.ASCII=1]="ASCII",e[e.Extensive=2]="Extensive",e[e.Attribute=3]="Attribute",e[e.Text=4]="Text"}(dn||(dn={}));const mn=Object.prototype.hasOwnProperty;function gn(e,t){return mn.call(e,t)}function bn(e){return Array.prototype.slice.call(arguments,1).forEach(function(t){if(t){if("object"!=typeof t)throw new TypeError(t+"must be object");Object.keys(t).forEach(function(n){e[n]=t[n]})}}),e}function yn(e,t,n){return[].concat(e.slice(0,t),n,e.slice(t+1))}function Dn(e){return!(e>=55296&&e<=57343||e>=64976&&e<=65007||!(65535&~e&&65534!=(65535&e))||e>=0&&e<=8||11===e||e>=14&&e<=31||e>=127&&e<=159||e>1114111)}function kn(e){if(e>65535){const t=55296+((e-=65536)>>10),n=56320+(1023&e);return String.fromCharCode(t,n)}return String.fromCharCode(e)}const wn=/\\([!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])/g,vn=new RegExp(wn.source+"|"+/&([a-z#][a-z0-9]{1,31});/gi.source,"gi"),Fn=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i;function Cn(e){return e.indexOf("\\")<0?e:e.replace(wn,"$1")}function En(e){return e.indexOf("\\")<0&&e.indexOf("&")<0?e:e.replace(vn,function(e,t,n){return t||function(e,t){if(35===t.charCodeAt(0)&&Fn.test(t)){const n="x"===t[1].toLowerCase()?parseInt(t.slice(2),16):parseInt(t.slice(1),10);return Dn(n)?kn(n):e}const n=function(e,t=en.Legacy){return sn(e,t)}(e);return n!==e?n:e}(e,n)})}const An=/[&<>"]/,xn=/[&<>"]/g,Sn={"&":"&","<":"<",">":">",'"':"""};function Bn(e){return Sn[e]}function Tn(e){return An.test(e)?e.replace(xn,Bn):e}const Ln=/[.?*+^$[\]\\(){}|-]/g;function jn(e){return e.replace(Ln,"\\$&")}function Mn(e){switch(e){case 9:case 32:return!0}return!1}function On(e){if(e>=8192&&e<=8202)return!0;switch(e){case 9:case 10:case 11:case 12:case 13:case 32:case 160:case 5760:case 8239:case 8287:case 12288:return!0}return!1}function In(e){return qt.test(e)||zt.test(e)}function Rn(e){return In(kn(e))}function Nn(e){switch(e){case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 124:case 125:case 126:return!0;default:return!1}}function Pn(e){return e=e.trim().replace(/\s+/g," "),"Ṿ"==="ẞ".toLowerCase()&&(e=e.replace(/ẞ/g,"ß")),e.toLowerCase().toUpperCase()}function qn(e){return 32===e||9===e||10===e||13===e}function zn(e){let t=0;for(;t<e.length&&qn(e.charCodeAt(t));t++);let n=e.length-1;for(;n>=t&&qn(e.charCodeAt(n));n--);return e.slice(t,n+1)}const $n={mdurl:e,ucmicro:t};function Gn(e,t,n){let r,o,a,i;const u=e.posMax,s=e.pos;for(e.pos=t+1,r=1;e.pos<u;){if(a=e.src.charCodeAt(e.pos),93===a&&(r--,0===r)){o=!0;break}if(i=e.pos,e.md.inline.skipToken(e),91===a)if(i===e.pos-1)r++;else if(n)return e.pos=s,-1}let l=-1;return o&&(l=e.pos),e.pos=s,l}function Un(e,t,n){let r,o=t;const a={ok:!1,pos:0,str:""};if(60===e.charCodeAt(o)){for(o++;o<n;){if(r=e.charCodeAt(o),10===r)return a;if(60===r)return a;if(62===r)return a.pos=o+1,a.str=En(e.slice(t+1,o)),a.ok=!0,a;92===r&&o+1<n?o+=2:o++}return a}let i=0;for(;o<n&&(r=e.charCodeAt(o),32!==r)&&!(r<32||127===r);)if(92===r&&o+1<n){if(32===e.charCodeAt(o+1))break;o+=2}else{if(40===r&&(i++,i>32))return a;if(41===r){if(0===i)break;i--}o++}return t===o||0!==i||(a.str=En(e.slice(t,o)),a.pos=o,a.ok=!0),a}function Hn(e,t,n,r){let o,a=t;const i={ok:!1,can_continue:!1,pos:0,str:"",marker:0};if(r)i.str=r.str,i.marker=r.marker;else{if(a>=n)return i;let r=e.charCodeAt(a);if(34!==r&&39!==r&&40!==r)return i;t++,a++,40===r&&(r=41),i.marker=r}for(;a<n;){if(o=e.charCodeAt(a),o===i.marker)return i.pos=a+1,i.str+=En(e.slice(t,a)),i.ok=!0,i;if(40===o&&41===i.marker)return i;92===o&&a+1<n&&a++,a++}return i.can_continue=!0,i.str+=En(e.slice(t,a)),i}const Wn={};function Zn(){this.rules=bn({},Wn)}Wn.code_inline=function(e,t,n,r,o){const a=e[t];return"<code"+o.renderAttrs(a)+">"+Tn(a.content)+"</code>"},Wn.code_block=function(e,t,n,r,o){const a=e[t];return"<pre"+o.renderAttrs(a)+"><code>"+Tn(e[t].content)+"</code></pre>\n"},Wn.fence=function(e,t,n,r,o){const a=e[t],i=a.info?En(a.info).trim():"";let u,s="",l="";if(i){const e=i.split(/(\s+)/g);s=e[0],l=e.slice(2).join("")}if(u=n.highlight&&n.highlight(a.content,s,l)||Tn(a.content),0===u.indexOf("<pre"))return u+"\n";if(i){const e=a.attrIndex("class"),t=a.attrs?a.attrs.slice():[];e<0?t.push(["class",n.langPrefix+s]):(t[e]=t[e].slice(),t[e][1]+=" "+n.langPrefix+s);const r={attrs:t};return`<pre><code${o.renderAttrs(r)}>${u}</code></pre>\n`}return`<pre><code${o.renderAttrs(a)}>${u}</code></pre>\n`},Wn.image=function(e,t,n,r,o){const a=e[t];return a.attrs[a.attrIndex("alt")][1]=o.renderInlineAsText(a.children,n,r),o.renderToken(e,t,n)},Wn.hardbreak=function(e,t,n){return n.xhtmlOut?"<br />\n":"<br>\n"},Wn.softbreak=function(e,t,n){return n.breaks?n.xhtmlOut?"<br />\n":"<br>\n":"\n"},Wn.text=function(e,t){return Tn(e[t].content)},Wn.html_block=function(e,t){return e[t].content},Wn.html_inline=function(e,t){return e[t].content},Zn.prototype.renderAttrs=function(e){let t,n,r;if(!e.attrs)return"";for(r="",t=0,n=e.attrs.length;t<n;t++)r+=" "+Tn(e.attrs[t][0])+'="'+Tn(e.attrs[t][1])+'"';return r},Zn.prototype.renderToken=function(e,t,n){const r=e[t];let o="";if(r.hidden)return"";r.block&&-1!==r.nesting&&t&&e[t-1].hidden&&(o+="\n"),o+=(-1===r.nesting?"</":"<")+r.tag,o+=this.renderAttrs(r),0===r.nesting&&n.xhtmlOut&&(o+=" /");let a=!1;if(r.block&&(a=!0,1===r.nesting&&t+1<e.length)){const n=e[t+1];("inline"===n.type||n.hidden||-1===n.nesting&&n.tag===r.tag)&&(a=!1)}return o+=a?">\n":">",o},Zn.prototype.renderInline=function(e,t,n){let r="";const o=this.rules;for(let a=0,i=e.length;a<i;a++){const i=e[a].type;void 0!==o[i]?r+=o[i](e,a,t,n,this):r+=this.renderToken(e,a,t)}return r},Zn.prototype.renderInlineAsText=function(e,t,n){let r="";for(let o=0,a=e.length;o<a;o++)switch(e[o].type){case"text":case"html_inline":case"html_block":r+=e[o].content;break;case"image":r+=this.renderInlineAsText(e[o].children,t,n);break;case"softbreak":case"hardbreak":r+="\n"}return r},Zn.prototype.render=function(e,t,n){let r="";const o=this.rules;for(let a=0,i=e.length;a<i;a++){const i=e[a].type;"inline"===i?r+=this.renderInline(e[a].children,t,n):void 0!==o[i]?r+=o[i](e,a,t,n,this):r+=this.renderToken(e,a,t,n)}return r};const Vn=Zn;function Kn(){this.__rules__=[],this.__cache__=null}Kn.prototype.__find__=function(e){for(let t=0;t<this.__rules__.length;t++)if(this.__rules__[t].name===e)return t;return-1},Kn.prototype.__compile__=function(){const e=this,t=[""];e.__rules__.forEach(function(e){e.enabled&&e.alt.forEach(function(e){t.indexOf(e)<0&&t.push(e)})}),e.__cache__={},t.forEach(function(t){e.__cache__[t]=[],e.__rules__.forEach(function(n){n.enabled&&(t&&n.alt.indexOf(t)<0||e.__cache__[t].push(n.fn))})})},Kn.prototype.at=function(e,t,n){const r=this.__find__(e),o=n||{};if(-1===r)throw new Error("Parser rule not found: "+e);this.__rules__[r].fn=t,this.__rules__[r].alt=o.alt||[],this.__cache__=null},Kn.prototype.before=function(e,t,n,r){const o=this.__find__(e),a=r||{};if(-1===o)throw new Error("Parser rule not found: "+e);this.__rules__.splice(o,0,{name:t,enabled:!0,fn:n,alt:a.alt||[]}),this.__cache__=null},Kn.prototype.after=function(e,t,n,r){const o=this.__find__(e),a=r||{};if(-1===o)throw new Error("Parser rule not found: "+e);this.__rules__.splice(o+1,0,{name:t,enabled:!0,fn:n,alt:a.alt||[]}),this.__cache__=null},Kn.prototype.push=function(e,t,n){const r=n||{};this.__rules__.push({name:e,enabled:!0,fn:t,alt:r.alt||[]}),this.__cache__=null},Kn.prototype.enable=function(e,t){Array.isArray(e)||(e=[e]);const n=[];return e.forEach(function(e){const r=this.__find__(e);if(r<0){if(t)return;throw new Error("Rules manager: invalid rule name "+e)}this.__rules__[r].enabled=!0,n.push(e)},this),this.__cache__=null,n},Kn.prototype.enableOnly=function(e,t){Array.isArray(e)||(e=[e]),this.__rules__.forEach(function(e){e.enabled=!1}),this.enable(e,t)},Kn.prototype.disable=function(e,t){Array.isArray(e)||(e=[e]);const n=[];return e.forEach(function(e){const r=this.__find__(e);if(r<0){if(t)return;throw new Error("Rules manager: invalid rule name "+e)}this.__rules__[r].enabled=!1,n.push(e)},this),this.__cache__=null,n},Kn.prototype.getRules=function(e){return null===this.__cache__&&this.__compile__(),this.__cache__[e]||[]};const Yn=Kn;function Jn(e,t,n){this.type=e,this.tag=t,this.attrs=null,this.map=null,this.nesting=n,this.level=0,this.children=null,this.content="",this.markup="",this.info="",this.meta=null,this.block=!1,this.hidden=!1}Jn.prototype.attrIndex=function(e){if(!this.attrs)return-1;const t=this.attrs;for(let n=0,r=t.length;n<r;n++)if(t[n][0]===e)return n;return-1},Jn.prototype.attrPush=function(e){this.attrs?this.attrs.push(e):this.attrs=[e]},Jn.prototype.attrSet=function(e,t){const n=this.attrIndex(e),r=[e,t];n<0?this.attrPush(r):this.attrs[n]=r},Jn.prototype.attrGet=function(e){const t=this.attrIndex(e);let n=null;return t>=0&&(n=this.attrs[t][1]),n},Jn.prototype.attrJoin=function(e,t){const n=this.attrIndex(e);n<0?this.attrPush([e,t]):this.attrs[n][1]=this.attrs[n][1]+" "+t};const Xn=Jn;function Qn(e,t,n){this.src=e,this.env=n,this.tokens=[],this.inlineMode=!1,this.md=t}Qn.prototype.Token=Xn;const er=Qn,tr=/\r\n?|\n/g,nr=/\0/g;function rr(e){return/^<a[>\s]/i.test(e)}function or(e){return/^<\/a\s*>/i.test(e)}const ar=/\+-|\.\.|\?\?\?\?|!!!!|,,|--/,ir=/\((c|tm|r)\)/i,ur=/\((c|tm|r)\)/gi,sr={c:"©",r:"®",tm:"™"};function lr(e,t){return sr[t.toLowerCase()]}function cr(e){let t=0;for(let n=e.length-1;n>=0;n--){const r=e[n];"text"!==r.type||t||(r.content=r.content.replace(ur,lr)),"link_open"===r.type&&"auto"===r.info&&t--,"link_close"===r.type&&"auto"===r.info&&t++}}function fr(e){let t=0;for(let n=e.length-1;n>=0;n--){const r=e[n];"text"!==r.type||t||ar.test(r.content)&&(r.content=r.content.replace(/\+-/g,"±").replace(/\.{2,}/g,"…").replace(/([?!])…/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---(?=[^-]|$)/gm,"$1—").replace(/(^|\s)--(?=\s|$)/gm,"$1–").replace(/(^|[^-\s])--(?=[^-\s]|$)/gm,"$1–")),"link_open"===r.type&&"auto"===r.info&&t--,"link_close"===r.type&&"auto"===r.info&&t++}}const pr=/['"]/,dr=/['"]/g;function hr(e,t,n,r){e[t]||(e[t]=[]),e[t].push({pos:n,ch:r})}function mr(e,t){let n;const r=[],o={};for(let a=0;a<e.length;a++){const i=e[a],u=e[a].level;for(n=r.length-1;n>=0&&!(r[n].level<=u);n--);if(r.length=n+1,"text"!==i.type)continue;const s=i.content;let l=0;const c=s.length;e:for(;l<c;){dr.lastIndex=l;const i=dr.exec(s);if(!i)break;let f=!0,p=!0;l=i.index+1;const d="'"===i[0];let h=32;if(i.index-1>=0)h=s.charCodeAt(i.index-1);else for(n=a-1;n>=0&&"softbreak"!==e[n].type&&"hardbreak"!==e[n].type;n--)if(e[n].content){h=e[n].content.charCodeAt(e[n].content.length-1);break}let m=32;if(l<c)m=s.charCodeAt(l);else for(n=a+1;n<e.length&&"softbreak"!==e[n].type&&"hardbreak"!==e[n].type;n++)if(e[n].content){m=e[n].content.charCodeAt(0);break}const g=Nn(h)||Rn(h),_=Nn(m)||Rn(m),b=On(h),y=On(m);if(y?f=!1:_&&(b||g||(f=!1)),b?p=!1:g&&(y||_||(p=!1)),34===m&&'"'===i[0]&&h>=48&&h<=57&&(p=f=!1),f&&p&&(f=g,p=_),f||p){if(p)for(n=r.length-1;n>=0;n--){let e=r[n];if(r[n].level<u)break;if(e.single===d&&r[n].level===u){let u,s;e=r[n],d?(u=t.md.options.quotes[2],s=t.md.options.quotes[3]):(u=t.md.options.quotes[0],s=t.md.options.quotes[1]),hr(o,a,i.index,s),hr(o,e.token,e.pos,u),r.length=n;continue e}}f?r.push({token:a,pos:i.index,single:d,level:u}):p&&d&&hr(o,a,i.index,"’")}else d&&hr(o,a,i.index,"’")}}Object.keys(o).forEach(function(t){e[t].content=function(e,t){let n="",r=0;t.sort((e,t)=>e.pos-t.pos);for(let o=0;o<t.length;o++){const a=t[o];n+=e.slice(r,a.pos)+a.ch,r=a.pos+1}return n+e.slice(r)}(e[t].content,o[t])})}const gr=[["normalize",function(e){let t;t=e.src.replace(tr,"\n"),t=t.replace(nr,"�"),e.src=t}],["block",function(e){let t;e.inlineMode?(t=new e.Token("inline","",0),t.content=e.src,t.map=[0,1],t.children=[],e.tokens.push(t)):e.md.block.parse(e.src,e.md,e.env,e.tokens)}],["inline",function(e){const t=e.tokens;for(let n=0,r=t.length;n<r;n++){const r=t[n];"inline"===r.type&&e.md.inline.parse(r.content,e.md,e.env,r.children)}}],["linkify",function(e){const t=e.tokens;if(e.md.options.linkify)for(let n=0,r=t.length;n<r;n++){if("inline"!==t[n].type||!e.md.linkify.pretest(t[n].content))continue;let r=t[n].children,o=0;for(let a=r.length-1;a>=0;a--){const i=r[a];if("link_close"!==i.type){if("html_inline"===i.type&&(rr(i.content)&&o>0&&o--,or(i.content)&&o++),!(o>0)&&"text"===i.type&&e.md.linkify.test(i.content)){const o=i.content;let u=e.md.linkify.match(o);const s=[];let l=i.level,c=0;u.length>0&&0===u[0].index&&a>0&&"text_special"===r[a-1].type&&(u=u.slice(1));for(let t=0;t<u.length;t++){const n=u[t].url,r=e.md.normalizeLink(n);if(!e.md.validateLink(r))continue;let a=u[t].text;a=u[t].schema?"mailto:"!==u[t].schema||/^mailto:/i.test(a)?e.md.normalizeLinkText(a):e.md.normalizeLinkText("mailto:"+a).replace(/^mailto:/,""):e.md.normalizeLinkText("http://"+a).replace(/^http:\/\//,"");const i=u[t].index;if(i>c){const t=new e.Token("text","",0);t.content=o.slice(c,i),t.level=l,s.push(t)}const f=new e.Token("link_open","a",1);f.attrs=[["href",r]],f.level=l++,f.markup="linkify",f.info="auto",s.push(f);const p=new e.Token("text","",0);p.content=a,p.level=l,s.push(p);const d=new e.Token("link_close","a",-1);d.level=--l,d.markup="linkify",d.info="auto",s.push(d),c=u[t].lastIndex}if(c<o.length){const t=new e.Token("text","",0);t.content=o.slice(c),t.level=l,s.push(t)}t[n].children=r=yn(r,a,s)}}else for(a--;r[a].level!==i.level&&"link_open"!==r[a].type;)a--}}}],["replacements",function(e){let t;if(e.md.options.typographer)for(t=e.tokens.length-1;t>=0;t--)"inline"===e.tokens[t].type&&(ir.test(e.tokens[t].content)&&cr(e.tokens[t].children),ar.test(e.tokens[t].content)&&fr(e.tokens[t].children))}],["smartquotes",function(e){if(e.md.options.typographer)for(let t=e.tokens.length-1;t>=0;t--)"inline"===e.tokens[t].type&&pr.test(e.tokens[t].content)&&mr(e.tokens[t].children,e)}],["text_join",function(e){let t,n;const r=e.tokens,o=r.length;for(let e=0;e<o;e++){if("inline"!==r[e].type)continue;const o=r[e].children,a=o.length;for(t=0;t<a;t++)"text_special"===o[t].type&&(o[t].type="text");for(t=n=0;t<a;t++)"text"===o[t].type&&t+1<a&&"text"===o[t+1].type?o[t+1].content=o[t].content+o[t+1].content:(t!==n&&(o[n]=o[t]),n++);t!==n&&(o.length=n)}}]];function _r(){this.ruler=new Yn;for(let e=0;e<gr.length;e++)this.ruler.push(gr[e][0],gr[e][1])}_r.prototype.process=function(e){const t=this.ruler.getRules("");for(let n=0,r=t.length;n<r;n++)t[n](e)},_r.prototype.State=er;const br=_r;function yr(e,t,n,r){this.src=e,this.md=t,this.env=n,this.tokens=r,this.bMarks=[],this.eMarks=[],this.tShift=[],this.sCount=[],this.bsCount=[],this.blkIndent=0,this.line=0,this.lineMax=0,this.tight=!1,this.ddIndent=-1,this.listIndent=-1,this.parentType="root",this.level=0;const o=this.src;for(let e=0,t=0,n=0,r=0,a=o.length,i=!1;t<a;t++){const u=o.charCodeAt(t);if(!i){if(Mn(u)){n++,9===u?r+=4-r%4:r++;continue}i=!0}10!==u&&t!==a-1||(10!==u&&t++,this.bMarks.push(e),this.eMarks.push(t),this.tShift.push(n),this.sCount.push(r),this.bsCount.push(0),i=!1,n=0,r=0,e=t+1)}this.bMarks.push(o.length),this.eMarks.push(o.length),this.tShift.push(0),this.sCount.push(0),this.bsCount.push(0),this.lineMax=this.bMarks.length-1}yr.prototype.push=function(e,t,n){const r=new Xn(e,t,n);return r.block=!0,n<0&&this.level--,r.level=this.level,n>0&&this.level++,this.tokens.push(r),r},yr.prototype.isEmpty=function(e){return this.bMarks[e]+this.tShift[e]>=this.eMarks[e]},yr.prototype.skipEmptyLines=function(e){for(let t=this.lineMax;e<t&&!(this.bMarks[e]+this.tShift[e]<this.eMarks[e]);e++);return e},yr.prototype.skipSpaces=function(e){for(let t=this.src.length;e<t&&Mn(this.src.charCodeAt(e));e++);return e},yr.prototype.skipSpacesBack=function(e,t){if(e<=t)return e;for(;e>t;)if(!Mn(this.src.charCodeAt(--e)))return e+1;return e},yr.prototype.skipChars=function(e,t){for(let n=this.src.length;e<n&&this.src.charCodeAt(e)===t;e++);return e},yr.prototype.skipCharsBack=function(e,t,n){if(e<=n)return e;for(;e>n;)if(t!==this.src.charCodeAt(--e))return e+1;return e},yr.prototype.getLines=function(e,t,n,r){if(e>=t)return"";const o=new Array(t-e);for(let a=0,i=e;i<t;i++,a++){let e=0;const u=this.bMarks[i];let s,l=u;for(s=i+1<t||r?this.eMarks[i]+1:this.eMarks[i];l<s&&e<n;){const t=this.src.charCodeAt(l);if(Mn(t))9===t?e+=4-(e+this.bsCount[i])%4:e++;else{if(!(l-u<this.tShift[i]))break;e++}l++}o[a]=e>n?new Array(e-n+1).join(" ")+this.src.slice(l,s):this.src.slice(l,s)}return o.join("")},yr.prototype.Token=Xn;const Dr=yr;function kr(e,t){const n=e.bMarks[t]+e.tShift[t],r=e.eMarks[t];return e.src.slice(n,r)}function wr(e){const t=[],n=e.length;let r=0,o=e.charCodeAt(r),a=!1,i=0,u="";for(;r<n;)124===o&&(a?(u+=e.substring(i,r-1),i=r):(t.push(u+e.substring(i,r)),u="",i=r+1)),a=92===o,r++,o=e.charCodeAt(r);return t.push(u+e.substring(i)),t}function vr(e,t){const n=e.eMarks[t];let r=e.bMarks[t]+e.tShift[t];const o=e.src.charCodeAt(r++);return 42!==o&&45!==o&&43!==o||r<n&&!Mn(e.src.charCodeAt(r))?-1:r}function Fr(e,t){const n=e.bMarks[t]+e.tShift[t],r=e.eMarks[t];let o=n;if(o+1>=r)return-1;let a=e.src.charCodeAt(o++);if(a<48||a>57)return-1;for(;;){if(o>=r)return-1;if(a=e.src.charCodeAt(o++),!(a>=48&&a<=57)){if(41===a||46===a)break;return-1}if(o-n>=10)return-1}return o<r&&(a=e.src.charCodeAt(o),!Mn(a))?-1:o}const Cr="<[A-Za-z][A-Za-z0-9\\-]*(?:\\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\\s*=\\s*(?:[^\"'=<>`\\x00-\\x20]+|'[^']*'|\"[^\"]*\"))?)*\\s*\\/?>",Er="<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>",Ar=new RegExp("^(?:"+Cr+"|"+Er+"|\x3c!---?>|\x3c!--(?:[^-]|-[^-]|--[^>])*--\x3e|<[?][\\s\\S]*?[?]>|<![A-Za-z][^>]*>|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>)"),xr=new RegExp("^(?:"+Cr+"|"+Er+")"),Sr=[[/^<(script|pre|style|textarea)(?=(\s|>|$))/i,/<\/(script|pre|style|textarea)>/i,!0],[/^<!--/,/-->/,!0],[/^<\?/,/\?>/,!0],[/^<![A-Z]/,/>/,!0],[/^<!\[CDATA\[/,/\]\]>/,!0],[new RegExp("^</?("+["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"].join("|")+")(?=(\\s|/?>|$))","i"),/^$/,!0],[new RegExp(xr.source+"\\s*$"),/^$/,!1]],Br=[["table",function(e,t,n,r){if(t+2>n)return!1;let o=t+1;if(e.sCount[o]<e.blkIndent)return!1;if(e.sCount[o]-e.blkIndent>=4)return!1;let a=e.bMarks[o]+e.tShift[o];if(a>=e.eMarks[o])return!1;const i=e.src.charCodeAt(a++);if(124!==i&&45!==i&&58!==i)return!1;if(a>=e.eMarks[o])return!1;const u=e.src.charCodeAt(a++);if(124!==u&&45!==u&&58!==u&&!Mn(u))return!1;if(45===i&&Mn(u))return!1;for(;a<e.eMarks[o];){const t=e.src.charCodeAt(a);if(124!==t&&45!==t&&58!==t&&!Mn(t))return!1;a++}let s=kr(e,t+1),l=s.split("|");const c=[];for(let e=0;e<l.length;e++){const t=l[e].trim();if(!t){if(0===e||e===l.length-1)continue;return!1}if(!/^:?-+:?$/.test(t))return!1;58===t.charCodeAt(t.length-1)?c.push(58===t.charCodeAt(0)?"center":"right"):58===t.charCodeAt(0)?c.push("left"):c.push("")}if(s=kr(e,t).trim(),-1===s.indexOf("|"))return!1;if(e.sCount[t]-e.blkIndent>=4)return!1;l=wr(s),l.length&&""===l[0]&&l.shift(),l.length&&""===l[l.length-1]&&l.pop();const f=l.length;if(0===f||f!==c.length)return!1;if(r)return!0;const p=e.parentType;e.parentType="table";const d=e.md.block.ruler.getRules("blockquote"),h=[t,0];e.push("table_open","table",1).map=h,e.push("thead_open","thead",1).map=[t,t+1],e.push("tr_open","tr",1).map=[t,t+1];for(let t=0;t<l.length;t++){const n=e.push("th_open","th",1);c[t]&&(n.attrs=[["style","text-align:"+c[t]]]);const r=e.push("inline","",0);r.content=l[t].trim(),r.children=[],e.push("th_close","th",-1)}let m;e.push("tr_close","tr",-1),e.push("thead_close","thead",-1);let g=0;for(o=t+2;o<n&&!(e.sCount[o]<e.blkIndent);o++){let r=!1;for(let t=0,a=d.length;t<a;t++)if(d[t](e,o,n,!0)){r=!0;break}if(r)break;if(s=kr(e,o).trim(),!s)break;if(e.sCount[o]-e.blkIndent>=4)break;if(l=wr(s),l.length&&""===l[0]&&l.shift(),l.length&&""===l[l.length-1]&&l.pop(),g+=f-l.length,g>65536)break;o===t+2&&(e.push("tbody_open","tbody",1).map=m=[t+2,0]),e.push("tr_open","tr",1).map=[o,o+1];for(let t=0;t<f;t++){const n=e.push("td_open","td",1);c[t]&&(n.attrs=[["style","text-align:"+c[t]]]);const r=e.push("inline","",0);r.content=l[t]?l[t].trim():"",r.children=[],e.push("td_close","td",-1)}e.push("tr_close","tr",-1)}return m&&(e.push("tbody_close","tbody",-1),m[1]=o),e.push("table_close","table",-1),h[1]=o,e.parentType=p,e.line=o,!0},["paragraph","reference"]],["code",function(e,t,n){if(e.sCount[t]-e.blkIndent<4)return!1;let r=t+1,o=r;for(;r<n;)if(e.isEmpty(r))r++;else{if(!(e.sCount[r]-e.blkIndent>=4))break;r++,o=r}e.line=o;const a=e.push("code_block","code",0);return a.content=e.getLines(t,o,4+e.blkIndent,!1)+"\n",a.map=[t,e.line],!0}],["fence",function(e,t,n,r){let o=e.bMarks[t]+e.tShift[t],a=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4)return!1;if(o+3>a)return!1;const i=e.src.charCodeAt(o);if(126!==i&&96!==i)return!1;let u=o;o=e.skipChars(o,i);let s=o-u;if(s<3)return!1;const l=e.src.slice(u,o),c=e.src.slice(o,a);if(96===i&&c.indexOf(String.fromCharCode(i))>=0)return!1;if(r)return!0;let f=t,p=!1;for(;!(f++,f>=n||(o=u=e.bMarks[f]+e.tShift[f],a=e.eMarks[f],o<a&&e.sCount[f]<e.blkIndent));)if(e.src.charCodeAt(o)===i&&!(e.sCount[f]-e.blkIndent>=4||(o=e.skipChars(o,i),o-u<s||(o=e.skipSpaces(o),o<a)))){p=!0;break}s=e.sCount[t],e.line=f+(p?1:0);const d=e.push("fence","code",0);return d.info=c,d.content=e.getLines(t+1,f,s,!0),d.markup=l,d.map=[t,e.line],!0},["paragraph","reference","blockquote","list"]],["blockquote",function(e,t,n,r){let o=e.bMarks[t]+e.tShift[t],a=e.eMarks[t];const i=e.lineMax;if(e.sCount[t]-e.blkIndent>=4)return!1;if(62!==e.src.charCodeAt(o))return!1;if(r)return!0;const u=[],s=[],l=[],c=[],f=e.md.block.ruler.getRules("blockquote"),p=e.parentType;e.parentType="blockquote";let d,h=!1;for(d=t;d<n;d++){const t=e.sCount[d]<e.blkIndent;if(o=e.bMarks[d]+e.tShift[d],a=e.eMarks[d],o>=a)break;if(62===e.src.charCodeAt(o++)&&!t){let t,n,r=e.sCount[d]+1;32===e.src.charCodeAt(o)?(o++,r++,n=!1,t=!0):9===e.src.charCodeAt(o)?(t=!0,(e.bsCount[d]+r)%4==3?(o++,r++,n=!1):n=!0):t=!1;let i=r;for(u.push(e.bMarks[d]),e.bMarks[d]=o;o<a;){const t=e.src.charCodeAt(o);if(!Mn(t))break;9===t?i+=4-(i+e.bsCount[d]+(n?1:0))%4:i++,o++}h=o>=a,s.push(e.bsCount[d]),e.bsCount[d]=e.sCount[d]+1+(t?1:0),l.push(e.sCount[d]),e.sCount[d]=i-r,c.push(e.tShift[d]),e.tShift[d]=o-e.bMarks[d];continue}if(h)break;let r=!1;for(let t=0,o=f.length;t<o;t++)if(f[t](e,d,n,!0)){r=!0;break}if(r){e.lineMax=d,0!==e.blkIndent&&(u.push(e.bMarks[d]),s.push(e.bsCount[d]),c.push(e.tShift[d]),l.push(e.sCount[d]),e.sCount[d]-=e.blkIndent);break}u.push(e.bMarks[d]),s.push(e.bsCount[d]),c.push(e.tShift[d]),l.push(e.sCount[d]),e.sCount[d]=-1}const m=e.blkIndent;e.blkIndent=0;const g=e.push("blockquote_open","blockquote",1);g.markup=">";const _=[t,0];g.map=_,e.md.block.tokenize(e,t,d),e.push("blockquote_close","blockquote",-1).markup=">",e.lineMax=i,e.parentType=p,_[1]=e.line;for(let n=0;n<c.length;n++)e.bMarks[n+t]=u[n],e.tShift[n+t]=c[n],e.sCount[n+t]=l[n],e.bsCount[n+t]=s[n];return e.blkIndent=m,!0},["paragraph","reference","blockquote","list"]],["hr",function(e,t,n,r){const o=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4)return!1;let a=e.bMarks[t]+e.tShift[t];const i=e.src.charCodeAt(a++);if(42!==i&&45!==i&&95!==i)return!1;let u=1;for(;a<o;){const t=e.src.charCodeAt(a++);if(t!==i&&!Mn(t))return!1;t===i&&u++}if(u<3)return!1;if(r)return!0;e.line=t+1;const s=e.push("hr","hr",0);return s.map=[t,e.line],s.markup=Array(u+1).join(String.fromCharCode(i)),!0},["paragraph","reference","blockquote","list"]],["list",function(e,t,n,r){let o,a,i,u,s=t,l=!0;if(e.sCount[s]-e.blkIndent>=4)return!1;if(e.listIndent>=0&&e.sCount[s]-e.listIndent>=4&&e.sCount[s]<e.blkIndent)return!1;let c,f,p,d=!1;if(r&&"paragraph"===e.parentType&&e.sCount[s]>=e.blkIndent&&(d=!0),(p=Fr(e,s))>=0){if(c=!0,i=e.bMarks[s]+e.tShift[s],f=Number(e.src.slice(i,p-1)),d&&1!==f)return!1}else{if(!((p=vr(e,s))>=0))return!1;c=!1}if(d&&e.skipSpaces(p)>=e.eMarks[s])return!1;if(r)return!0;const h=e.src.charCodeAt(p-1),m=e.tokens.length;c?(u=e.push("ordered_list_open","ol",1),1!==f&&(u.attrs=[["start",f]])):u=e.push("bullet_list_open","ul",1);const g=[s,0];u.map=g,u.markup=String.fromCharCode(h);let _=!1;const b=e.md.block.ruler.getRules("list"),y=e.parentType;for(e.parentType="list";s<n;){a=p,o=e.eMarks[s];const t=e.sCount[s]+p-(e.bMarks[s]+e.tShift[s]);let r=t;for(;a<o;){const t=e.src.charCodeAt(a);if(9===t)r+=4-(r+e.bsCount[s])%4;else{if(32!==t)break;r++}a++}const f=a;let d;d=f>=o?1:r-t,d>4&&(d=1);const m=t+d;u=e.push("list_item_open","li",1),u.markup=String.fromCharCode(h);const g=[s,0];u.map=g,c&&(u.info=e.src.slice(i,p-1));const y=e.tight,D=e.tShift[s],k=e.sCount[s],w=e.listIndent;if(e.listIndent=e.blkIndent,e.blkIndent=m,e.tight=!0,e.tShift[s]=f-e.bMarks[s],e.sCount[s]=r,f>=o&&e.isEmpty(s+1)?e.line=Math.min(e.line+2,n):e.md.block.tokenize(e,s,n,!0),e.tight&&!_||(l=!1),_=e.line-s>1&&e.isEmpty(e.line-1),e.blkIndent=e.listIndent,e.listIndent=w,e.tShift[s]=D,e.sCount[s]=k,e.tight=y,u=e.push("list_item_close","li",-1),u.markup=String.fromCharCode(h),s=e.line,g[1]=s,s>=n)break;if(e.sCount[s]<e.blkIndent)break;if(e.sCount[s]-e.blkIndent>=4)break;let v=!1;for(let t=0,r=b.length;t<r;t++)if(b[t](e,s,n,!0)){v=!0;break}if(v)break;if(c){if(p=Fr(e,s),p<0)break;i=e.bMarks[s]+e.tShift[s]}else if(p=vr(e,s),p<0)break;if(h!==e.src.charCodeAt(p-1))break}return u=c?e.push("ordered_list_close","ol",-1):e.push("bullet_list_close","ul",-1),u.markup=String.fromCharCode(h),g[1]=s,e.line=s,e.parentType=y,l&&function(e,t){const n=e.level+2;for(let r=t+2,o=e.tokens.length-2;r<o;r++)e.tokens[r].level===n&&"paragraph_open"===e.tokens[r].type&&(e.tokens[r+2].hidden=!0,e.tokens[r].hidden=!0,r+=2)}(e,m),!0},["paragraph","reference","blockquote"]],["reference",function(e,t,n,r){let o=e.bMarks[t]+e.tShift[t],a=e.eMarks[t],i=t+1;if(e.sCount[t]-e.blkIndent>=4)return!1;if(91!==e.src.charCodeAt(o))return!1;function u(t){const n=e.lineMax;if(t>=n||e.isEmpty(t))return null;let r=!1;if(e.sCount[t]-e.blkIndent>3&&(r=!0),e.sCount[t]<0&&(r=!0),!r){const r=e.md.block.ruler.getRules("reference"),o=e.parentType;e.parentType="reference";let a=!1;for(let o=0,i=r.length;o<i;o++)if(r[o](e,t,n,!0)){a=!0;break}if(e.parentType=o,a)return null}const o=e.bMarks[t]+e.tShift[t],a=e.eMarks[t];return e.src.slice(o,a+1)}let s=e.src.slice(o,a+1);a=s.length;let l=-1;for(o=1;o<a;o++){const e=s.charCodeAt(o);if(91===e)return!1;if(93===e){l=o;break}if(10===e){const e=u(i);null!==e&&(s+=e,a=s.length,i++)}else if(92===e&&(o++,o<a&&10===s.charCodeAt(o))){const e=u(i);null!==e&&(s+=e,a=s.length,i++)}}if(l<0||58!==s.charCodeAt(l+1))return!1;for(o=l+2;o<a;o++){const e=s.charCodeAt(o);if(10===e){const e=u(i);null!==e&&(s+=e,a=s.length,i++)}else if(!Mn(e))break}const c=e.md.helpers.parseLinkDestination(s,o,a);if(!c.ok)return!1;const f=e.md.normalizeLink(c.str);if(!e.md.validateLink(f))return!1;o=c.pos;const p=o,d=i,h=o;for(;o<a;o++){const e=s.charCodeAt(o);if(10===e){const e=u(i);null!==e&&(s+=e,a=s.length,i++)}else if(!Mn(e))break}let m,g=e.md.helpers.parseLinkTitle(s,o,a);for(;g.can_continue;){const t=u(i);if(null===t)break;s+=t,o=a,a=s.length,i++,g=e.md.helpers.parseLinkTitle(s,o,a,g)}for(o<a&&h!==o&&g.ok?(m=g.str,o=g.pos):(m="",o=p,i=d);o<a&&Mn(s.charCodeAt(o));)o++;if(o<a&&10!==s.charCodeAt(o)&&m)for(m="",o=p,i=d;o<a&&Mn(s.charCodeAt(o));)o++;if(o<a&&10!==s.charCodeAt(o))return!1;const _=Pn(s.slice(1,l));return!!_&&(r||(void 0===e.env.references&&(e.env.references={}),void 0===e.env.references[_]&&(e.env.references[_]={title:m,href:f}),e.line=i),!0)}],["html_block",function(e,t,n,r){let o=e.bMarks[t]+e.tShift[t],a=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4)return!1;if(!e.md.options.html)return!1;if(60!==e.src.charCodeAt(o))return!1;let i=e.src.slice(o,a),u=0;for(;u<Sr.length&&!Sr[u][0].test(i);u++);if(u===Sr.length)return!1;if(r)return Sr[u][2];let s=t+1;const l=Sr[u][1].test("");if(!Sr[u][1].test(i))for(;s<n&&(!(e.sCount[s]<e.blkIndent)||!l&&e.isEmpty(s));s++)if(o=e.bMarks[s]+e.tShift[s],a=e.eMarks[s],i=e.src.slice(o,a),Sr[u][1].test(i)){0!==i.length&&s++;break}e.line=s;const c=e.push("html_block","",0);return c.map=[t,s],c.content=e.getLines(t,s,e.blkIndent,!0),!0},["paragraph","reference","blockquote"]],["heading",function(e,t,n,r){let o=e.bMarks[t]+e.tShift[t],a=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4)return!1;let i=e.src.charCodeAt(o);if(35!==i||o>=a)return!1;let u=1;for(i=e.src.charCodeAt(++o);35===i&&o<a&&u<=6;)u++,i=e.src.charCodeAt(++o);if(u>6||o<a&&!Mn(i))return!1;if(r)return!0;a=e.skipSpacesBack(a,o);const s=e.skipCharsBack(a,35,o);s>o&&Mn(e.src.charCodeAt(s-1))&&(a=s),e.line=t+1;const l=e.push("heading_open","h"+String(u),1);l.markup="########".slice(0,u),l.map=[t,e.line];const c=e.push("inline","",0);return c.content=zn(e.src.slice(o,a)),c.map=[t,e.line],c.children=[],e.push("heading_close","h"+String(u),-1).markup="########".slice(0,u),!0},["paragraph","reference","blockquote"]],["lheading",function(e,t,n){const r=e.md.block.ruler.getRules("paragraph");if(e.sCount[t]-e.blkIndent>=4)return!1;const o=e.parentType;e.parentType="paragraph";let a,i=0,u=t+1;for(;u<n&&!e.isEmpty(u);u++){if(e.sCount[u]-e.blkIndent>3)continue;if(e.sCount[u]>=e.blkIndent){let t=e.bMarks[u]+e.tShift[u];const n=e.eMarks[u];if(t<n&&(a=e.src.charCodeAt(t),(45===a||61===a)&&(t=e.skipChars(t,a),t=e.skipSpaces(t),t>=n))){i=61===a?1:2;break}}if(e.sCount[u]<0)continue;let t=!1;for(let o=0,a=r.length;o<a;o++)if(r[o](e,u,n,!0)){t=!0;break}if(t)break}if(!i)return e.parentType=o,!1;const s=zn(e.getLines(t,u,e.blkIndent,!1));e.line=u+1;const l=e.push("heading_open","h"+String(i),1);l.markup=String.fromCharCode(a),l.map=[t,e.line];const c=e.push("inline","",0);return c.content=s,c.map=[t,e.line-1],c.children=[],e.push("heading_close","h"+String(i),-1).markup=String.fromCharCode(a),e.parentType=o,!0}],["paragraph",function(e,t,n){const r=e.md.block.ruler.getRules("paragraph"),o=e.parentType;let a=t+1;for(e.parentType="paragraph";a<n&&!e.isEmpty(a);a++){if(e.sCount[a]-e.blkIndent>3)continue;if(e.sCount[a]<0)continue;let t=!1;for(let o=0,i=r.length;o<i;o++)if(r[o](e,a,n,!0)){t=!0;break}if(t)break}const i=zn(e.getLines(t,a,e.blkIndent,!1));e.line=a,e.push("paragraph_open","p",1).map=[t,e.line];const u=e.push("inline","",0);return u.content=i,u.map=[t,e.line],u.children=[],e.push("paragraph_close","p",-1),e.parentType=o,!0}]];function Tr(){this.ruler=new Yn;for(let e=0;e<Br.length;e++)this.ruler.push(Br[e][0],Br[e][1],{alt:(Br[e][2]||[]).slice()})}Tr.prototype.tokenize=function(e,t,n){const r=this.ruler.getRules(""),o=r.length,a=e.md.options.maxNesting;let i=t,u=!1;for(;i<n&&(e.line=i=e.skipEmptyLines(i),!(i>=n))&&!(e.sCount[i]<e.blkIndent);){if(e.level>=a){e.line=n;break}const t=e.line;let s=!1;for(let a=0;a<o;a++)if(s=r[a](e,i,n,!1),s){if(t>=e.line)throw new Error("block rule didn't increment state.line");break}if(!s)throw new Error("none of the block rules matched");e.tight=!u,e.isEmpty(e.line-1)&&(u=!0),i=e.line,i<n&&e.isEmpty(i)&&(u=!0,i++,e.line=i)}},Tr.prototype.parse=function(e,t,n,r){if(!e)return;const o=new this.State(e,t,n,r);this.tokenize(o,o.line,o.lineMax)},Tr.prototype.State=Dr;const Lr=Tr;function jr(e,t,n,r){this.src=e,this.env=n,this.md=t,this.tokens=r,this.tokens_meta=Array(r.length),this.pos=0,this.posMax=this.src.length,this.level=0,this.pending="",this.pendingLevel=0,this.cache={},this.delimiters=[],this._prev_delimiters=[],this.backticks={},this.backticksScanned=!1,this.linkLevel=0}jr.prototype.pushPending=function(){const e=new Xn("text","",0);return e.content=this.pending,e.level=this.pendingLevel,this.tokens.push(e),this.pending="",e},jr.prototype.push=function(e,t,n){this.pending&&this.pushPending();const r=new Xn(e,t,n);let o=null;return n<0&&(this.level--,this.delimiters=this._prev_delimiters.pop()),r.level=this.level,n>0&&(this.level++,this._prev_delimiters.push(this.delimiters),this.delimiters=[],o={delimiters:this.delimiters}),this.pendingLevel=this.level,this.tokens.push(r),this.tokens_meta.push(o),r},jr.prototype.scanDelims=function(e,t){const n=this.posMax,r=this.src.charCodeAt(e);let o;if(0===e)o=32;else if(1===e)o=this.src.charCodeAt(0),55296==(63488&o)&&(o=65533);else if(o=this.src.charCodeAt(e-1),56320==(64512&o)){const t=this.src.charCodeAt(e-2);o=55296==(64512&t)?65536+(t-55296<<10)+(o-56320):65533}else 55296==(64512&o)&&(o=65533);let a=e;for(;a<n&&this.src.charCodeAt(a)===r;)a++;const i=a-e;let u=a<n?this.src.charCodeAt(a):32;if(55296==(64512&u)){const e=this.src.charCodeAt(a+1);u=56320==(64512&e)?65536+(u-55296<<10)+(e-56320):65533}else 56320==(64512&u)&&(u=65533);const s=Nn(o)||Rn(o),l=Nn(u)||Rn(u),c=On(o),f=On(u),p=!f&&(!l||c||s),d=!c&&(!s||f||l);return{can_open:p&&(t||!d||s),can_close:d&&(t||!p||l),length:i}},jr.prototype.Token=Xn;const Mr=jr;function Or(e){switch(e){case 10:case 33:case 35:case 36:case 37:case 38:case 42:case 43:case 45:case 58:case 60:case 61:case 62:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 125:case 126:return!0;default:return!1}}const Ir=/(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i,Rr=[];for(let e=0;e<256;e++)Rr.push(0);function Nr(e,t){let n;const r=[],o=t.length;for(let a=0;a<o;a++){const o=t[a];if(126!==o.marker)continue;if(-1===o.end)continue;const i=t[o.end];n=e.tokens[o.token],n.type="s_open",n.tag="s",n.nesting=1,n.markup="~~",n.content="",n=e.tokens[i.token],n.type="s_close",n.tag="s",n.nesting=-1,n.markup="~~",n.content="","text"===e.tokens[i.token-1].type&&"~"===e.tokens[i.token-1].content&&r.push(i.token-1)}for(;r.length;){const t=r.pop();let o=t+1;for(;o<e.tokens.length&&"s_close"===e.tokens[o].type;)o++;o--,t!==o&&(n=e.tokens[o],e.tokens[o]=e.tokens[t],e.tokens[t]=n)}}"\\!\"#$%&'()*+,./:;<=>?@[]^_`{|}~-".split("").forEach(function(e){Rr[e.charCodeAt(0)]=1});const Pr={tokenize:function(e,t){const n=e.pos,r=e.src.charCodeAt(n);if(t)return!1;if(126!==r)return!1;const o=e.scanDelims(e.pos,!0);let a=o.length;const i=String.fromCharCode(r);if(a<2)return!1;let u;a%2&&(u=e.push("text","",0),u.content=i,a--);for(let t=0;t<a;t+=2)u=e.push("text","",0),u.content=i+i,e.delimiters.push({marker:r,length:0,token:e.tokens.length-1,end:-1,open:o.can_open,close:o.can_close});return e.pos+=o.length,!0},postProcess:function(e){const t=e.tokens_meta,n=e.tokens_meta.length;Nr(e,e.delimiters);for(let r=0;r<n;r++)t[r]&&t[r].delimiters&&Nr(e,t[r].delimiters)}};function qr(e,t){for(let n=t.length-1;n>=0;n--){const r=t[n];if(95!==r.marker&&42!==r.marker)continue;if(-1===r.end)continue;const o=t[r.end],a=n>0&&t[n-1].end===r.end+1&&t[n-1].marker===r.marker&&t[n-1].token===r.token-1&&t[r.end+1].token===o.token+1,i=String.fromCharCode(r.marker),u=e.tokens[r.token];u.type=a?"strong_open":"em_open",u.tag=a?"strong":"em",u.nesting=1,u.markup=a?i+i:i,u.content="";const s=e.tokens[o.token];s.type=a?"strong_close":"em_close",s.tag=a?"strong":"em",s.nesting=-1,s.markup=a?i+i:i,s.content="",a&&(e.tokens[t[n-1].token].content="",e.tokens[t[r.end+1].token].content="",n--)}}const zr={tokenize:function(e,t){const n=e.pos,r=e.src.charCodeAt(n);if(t)return!1;if(95!==r&&42!==r)return!1;const o=e.scanDelims(e.pos,42===r);for(let t=0;t<o.length;t++)e.push("text","",0).content=String.fromCharCode(r),e.delimiters.push({marker:r,length:o.length,token:e.tokens.length-1,end:-1,open:o.can_open,close:o.can_close});return e.pos+=o.length,!0},postProcess:function(e){const t=e.tokens_meta,n=e.tokens_meta.length;qr(e,e.delimiters);for(let r=0;r<n;r++)t[r]&&t[r].delimiters&&qr(e,t[r].delimiters)}},$r=/^([a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/,Gr=/^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^<>\x00-\x20]*)$/,Ur=/^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i,Hr=/^&([a-z][a-z0-9]{1,31});/i;function Wr(e){const t={},n=e.length;if(!n)return;let r=0,o=-2;const a=[];for(let i=0;i<n;i++){const n=e[i];if(a.push(0),e[r].marker===n.marker&&o===n.token-1||(r=i),o=n.token,n.length=n.length||0,!n.close)continue;t.hasOwnProperty(n.marker)||(t[n.marker]=[-1,-1,-1,-1,-1,-1]);const u=t[n.marker][(n.open?3:0)+n.length%3];let s=r-a[r]-1,l=s;for(;s>u;s-=a[s]+1){const t=e[s];if(t.marker===n.marker&&t.open&&t.end<0){let r=!1;if((t.close||n.open)&&(t.length+n.length)%3==0&&(t.length%3==0&&n.length%3==0||(r=!0)),!r){const r=s>0&&!e[s-1].open?a[s-1]+1:0;a[i]=i-s+r,a[s]=r,n.open=!1,t.end=i,t.close=!1,l=-1,o=-2;break}}}-1!==l&&(t[n.marker][(n.open?3:0)+(n.length||0)%3]=l)}}const Zr=[["text",function(e,t){let n=e.pos;for(;n<e.posMax&&!Or(e.src.charCodeAt(n));)n++;return n!==e.pos&&(t||(e.pending+=e.src.slice(e.pos,n)),e.pos=n,!0)}],["linkify",function(e,t){if(!e.md.options.linkify)return!1;if(e.linkLevel>0)return!1;const n=e.pos;if(n+3>e.posMax)return!1;if(58!==e.src.charCodeAt(n))return!1;if(47!==e.src.charCodeAt(n+1))return!1;if(47!==e.src.charCodeAt(n+2))return!1;const r=e.pending.match(Ir);if(!r)return!1;const o=r[1],a=e.md.linkify.matchAtStart(e.src.slice(n-o.length));if(!a)return!1;let i=a.url;if(i.length<=o.length)return!1;let u=i.length;for(;u>0&&42===i.charCodeAt(u-1);)u--;u!==i.length&&(i=i.slice(0,u));const s=e.md.normalizeLink(i);if(!e.md.validateLink(s))return!1;if(!t){e.pending=e.pending.slice(0,-o.length);const t=e.push("link_open","a",1);t.attrs=[["href",s]],t.markup="linkify",t.info="auto",e.push("text","",0).content=e.md.normalizeLinkText(i);const n=e.push("link_close","a",-1);n.markup="linkify",n.info="auto"}return e.pos+=i.length-o.length,!0}],["newline",function(e,t){let n=e.pos;if(10!==e.src.charCodeAt(n))return!1;const r=e.pending.length-1,o=e.posMax;if(!t)if(r>=0&&32===e.pending.charCodeAt(r))if(r>=1&&32===e.pending.charCodeAt(r-1)){let t=r-1;for(;t>=1&&32===e.pending.charCodeAt(t-1);)t--;e.pending=e.pending.slice(0,t),e.push("hardbreak","br",0)}else e.pending=e.pending.slice(0,-1),e.push("softbreak","br",0);else e.push("softbreak","br",0);for(n++;n<o&&Mn(e.src.charCodeAt(n));)n++;return e.pos=n,!0}],["escape",function(e,t){let n=e.pos;const r=e.posMax;if(92!==e.src.charCodeAt(n))return!1;if(n++,n>=r)return!1;let o=e.src.charCodeAt(n);if(10===o){for(t||e.push("hardbreak","br",0),n++;n<r&&(o=e.src.charCodeAt(n),Mn(o));)n++;return e.pos=n,!0}if(32===o){if(!t){const t=e.push("text_special","",0);t.content="\\",t.markup="\\",t.info="escape"}return e.pos=n,!0}let a=e.src[n];if(o>=55296&&o<=56319&&n+1<r){const t=e.src.charCodeAt(n+1);t>=56320&&t<=57343&&(a+=e.src[n+1],n++)}const i="\\"+a;if(!t){const t=e.push("text_special","",0);o<256&&0!==Rr[o]?t.content=a:t.content=i,t.markup=i,t.info="escape"}return e.pos=n+1,!0}],["backticks",function(e,t){let n=e.pos;if(96!==e.src.charCodeAt(n))return!1;const r=n;n++;const o=e.posMax;for(;n<o&&96===e.src.charCodeAt(n);)n++;const a=e.src.slice(r,n),i=a.length;if(e.backticksScanned&&(e.backticks[i]||0)<=r)return t||(e.pending+=a),e.pos+=i,!0;let u,s=n;for(;-1!==(u=e.src.indexOf("`",s));){for(s=u+1;s<o&&96===e.src.charCodeAt(s);)s++;const r=s-u;if(r===i){if(!t){const t=e.push("code_inline","code",0);t.markup=a,t.content=e.src.slice(n,u).replace(/\n/g," ").replace(/^ (.+) $/,"$1")}return e.pos=s,!0}e.backticks[r]=u}return e.backticksScanned=!0,t||(e.pending+=a),e.pos+=i,!0}],["strikethrough",Pr.tokenize],["emphasis",zr.tokenize],["link",function(e,t){let n,r,o,a,i="",u="",s=e.pos,l=!0;if(91!==e.src.charCodeAt(e.pos))return!1;const c=e.pos,f=e.posMax,p=e.pos+1,d=e.md.helpers.parseLinkLabel(e,e.pos,!0);if(d<0)return!1;let h=d+1;if(h<f&&40===e.src.charCodeAt(h)){for(l=!1,h++;h<f&&(n=e.src.charCodeAt(h),Mn(n)||10===n);h++);if(h>=f)return!1;if(s=h,o=e.md.helpers.parseLinkDestination(e.src,h,e.posMax),o.ok){for(i=e.md.normalizeLink(o.str),e.md.validateLink(i)?h=o.pos:i="",s=h;h<f&&(n=e.src.charCodeAt(h),Mn(n)||10===n);h++);if(o=e.md.helpers.parseLinkTitle(e.src,h,e.posMax),h<f&&s!==h&&o.ok)for(u=o.str,h=o.pos;h<f&&(n=e.src.charCodeAt(h),Mn(n)||10===n);h++);}(h>=f||41!==e.src.charCodeAt(h))&&(l=!0),h++}if(l){if(void 0===e.env.references)return!1;if(h<f&&91===e.src.charCodeAt(h)?(s=h+1,h=e.md.helpers.parseLinkLabel(e,h),h>=0?r=e.src.slice(s,h++):h=d+1):h=d+1,r||(r=e.src.slice(p,d)),a=e.env.references[Pn(r)],!a)return e.pos=c,!1;i=a.href,u=a.title}if(!t){e.pos=p,e.posMax=d;const t=[["href",i]];e.push("link_open","a",1).attrs=t,u&&t.push(["title",u]),e.linkLevel++,e.md.inline.tokenize(e),e.linkLevel--,e.push("link_close","a",-1)}return e.pos=h,e.posMax=f,!0}],["image",function(e,t){let n,r,o,a,i,u,s,l,c="";const f=e.pos,p=e.posMax;if(33!==e.src.charCodeAt(e.pos))return!1;if(91!==e.src.charCodeAt(e.pos+1))return!1;const d=e.pos+2,h=e.md.helpers.parseLinkLabel(e,e.pos+1,!1);if(h<0)return!1;if(a=h+1,a<p&&40===e.src.charCodeAt(a)){for(a++;a<p&&(n=e.src.charCodeAt(a),Mn(n)||10===n);a++);if(a>=p)return!1;for(l=a,u=e.md.helpers.parseLinkDestination(e.src,a,e.posMax),u.ok&&(c=e.md.normalizeLink(u.str),e.md.validateLink(c)?a=u.pos:c=""),l=a;a<p&&(n=e.src.charCodeAt(a),Mn(n)||10===n);a++);if(u=e.md.helpers.parseLinkTitle(e.src,a,e.posMax),a<p&&l!==a&&u.ok)for(s=u.str,a=u.pos;a<p&&(n=e.src.charCodeAt(a),Mn(n)||10===n);a++);else s="";if(a>=p||41!==e.src.charCodeAt(a))return e.pos=f,!1;a++}else{if(void 0===e.env.references)return!1;if(a<p&&91===e.src.charCodeAt(a)?(l=a+1,a=e.md.helpers.parseLinkLabel(e,a),a>=0?o=e.src.slice(l,a++):a=h+1):a=h+1,o||(o=e.src.slice(d,h)),i=e.env.references[Pn(o)],!i)return e.pos=f,!1;c=i.href,s=i.title}if(!t){r=e.src.slice(d,h);const t=[];e.md.inline.parse(r,e.md,e.env,t);const n=e.push("image","img",0),o=[["src",c],["alt",""]];n.attrs=o,n.children=t,n.content=r,s&&o.push(["title",s])}return e.pos=a,e.posMax=p,!0}],["autolink",function(e,t){let n=e.pos;if(60!==e.src.charCodeAt(n))return!1;const r=e.pos,o=e.posMax;for(;;){if(++n>=o)return!1;const t=e.src.charCodeAt(n);if(60===t)return!1;if(62===t)break}const a=e.src.slice(r+1,n);if(Gr.test(a)){const n=e.md.normalizeLink(a);if(!e.md.validateLink(n))return!1;if(!t){const t=e.push("link_open","a",1);t.attrs=[["href",n]],t.markup="autolink",t.info="auto",e.push("text","",0).content=e.md.normalizeLinkText(a);const r=e.push("link_close","a",-1);r.markup="autolink",r.info="auto"}return e.pos+=a.length+2,!0}if($r.test(a)){const n=e.md.normalizeLink("mailto:"+a);if(!e.md.validateLink(n))return!1;if(!t){const t=e.push("link_open","a",1);t.attrs=[["href",n]],t.markup="autolink",t.info="auto",e.push("text","",0).content=e.md.normalizeLinkText(a);const r=e.push("link_close","a",-1);r.markup="autolink",r.info="auto"}return e.pos+=a.length+2,!0}return!1}],["html_inline",function(e,t){if(!e.md.options.html)return!1;const n=e.posMax,r=e.pos;if(60!==e.src.charCodeAt(r)||r+2>=n)return!1;const o=e.src.charCodeAt(r+1);if(33!==o&&63!==o&&47!==o&&!function(e){const t=32|e;return t>=97&&t<=122}(o))return!1;const a=e.src.slice(r).match(Ar);if(!a)return!1;if(!t){const t=e.push("html_inline","",0);t.content=a[0],function(e){return/^<a[>\s]/i.test(e)}(t.content)&&e.linkLevel++,function(e){return/^<\/a\s*>/i.test(e)}(t.content)&&e.linkLevel--}return e.pos+=a[0].length,!0}],["entity",function(e,t){const n=e.pos,r=e.posMax;if(38!==e.src.charCodeAt(n))return!1;if(n+1>=r)return!1;if(35===e.src.charCodeAt(n+1)){const r=e.src.slice(n).match(Ur);if(r){if(!t){const t="x"===r[1][0].toLowerCase()?parseInt(r[1].slice(1),16):parseInt(r[1],10),n=e.push("text_special","",0);n.content=Dn(t)?kn(t):kn(65533),n.markup=r[0],n.info="entity"}return e.pos+=r[0].length,!0}}else{const r=e.src.slice(n).match(Hr);if(r){const n=function(e){return sn(e,en.Strict)}(r[0]);if(n!==r[0]){if(!t){const t=e.push("text_special","",0);t.content=n,t.markup=r[0],t.info="entity"}return e.pos+=r[0].length,!0}}}return!1}]],Vr=[["balance_pairs",function(e){const t=e.tokens_meta,n=e.tokens_meta.length;Wr(e.delimiters);for(let e=0;e<n;e++)t[e]&&t[e].delimiters&&Wr(t[e].delimiters)}],["strikethrough",Pr.postProcess],["emphasis",zr.postProcess],["fragments_join",function(e){let t,n,r=0;const o=e.tokens,a=e.tokens.length;for(t=n=0;t<a;t++)o[t].nesting<0&&r--,o[t].level=r,o[t].nesting>0&&r++,"text"===o[t].type&&t+1<a&&"text"===o[t+1].type?o[t+1].content=o[t].content+o[t+1].content:(t!==n&&(o[n]=o[t]),n++);t!==n&&(o.length=n)}]];function Kr(){this.ruler=new Yn;for(let e=0;e<Zr.length;e++)this.ruler.push(Zr[e][0],Zr[e][1]);this.ruler2=new Yn;for(let e=0;e<Vr.length;e++)this.ruler2.push(Vr[e][0],Vr[e][1])}Kr.prototype.skipToken=function(e){const t=e.pos,n=this.ruler.getRules(""),r=n.length,o=e.md.options.maxNesting,a=e.cache;if(void 0!==a[t])return void(e.pos=a[t]);let i=!1;if(e.level<o){for(let o=0;o<r;o++)if(e.level++,i=n[o](e,!0),e.level--,i){if(t>=e.pos)throw new Error("inline rule didn't increment state.pos");break}}else e.pos=e.posMax;i||e.pos++,a[t]=e.pos},Kr.prototype.tokenize=function(e){const t=this.ruler.getRules(""),n=t.length,r=e.posMax,o=e.md.options.maxNesting;for(;e.pos<r;){const a=e.pos;let i=!1;if(e.level<o)for(let r=0;r<n;r++)if(i=t[r](e,!1),i){if(a>=e.pos)throw new Error("inline rule didn't increment state.pos");break}if(i){if(e.pos>=r)break}else e.pending+=e.src[e.pos++]}e.pending&&e.pushPending()},Kr.prototype.parse=function(e,t,n,r){const o=new this.State(e,t,n,r);this.tokenize(o);const a=this.ruler2.getRules(""),i=a.length;for(let e=0;e<i;e++)a[e](o)},Kr.prototype.State=Mr;const Yr=Kr;function Jr(e){const t={};e=e||{},t.src_Any=$t.source,t.src_Cc=Gt.source,t.src_Z=Ht.source,t.src_P=qt.source,t.src_ZPCc=[t.src_Z,t.src_P,t.src_Cc].join("|"),t.src_ZCc=[t.src_Z,t.src_Cc].join("|");const n="[><|]";return t.src_pseudo_letter=`(?:(?!${n}|${t.src_ZPCc})${t.src_Any})`,t.src_ip4="(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)",t.src_auth=`(?:(?:(?!${t.src_ZCc}|[@/\\[\\]()]).){1,50}@)?`,t.src_port="(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?",t.src_host_terminator=`(?=$|${n}|${t.src_ZPCc})(?!${e["---"]?"-(?!--)|":"-|"}_|:\\d|\\.-|\\.(?!$|${t.src_ZPCc}))`,t.src_path=`(?:[/?#](?:(?!${t.src_ZCc}|${n}|[()[\\]{}.,"'?!\\-;]).|\\[(?:(?!${t.src_ZCc}|\\]).)*\\]|\\((?:(?!${t.src_ZCc}|[)]).)*\\)|\\{(?:(?!${t.src_ZCc}|[}]).)*\\}|\\"(?:(?!${t.src_ZCc}|["]).)+\\"|\\'(?:(?!${t.src_ZCc}|[']).)+\\'|\\'(?=${t.src_pseudo_letter}|[-])|\\.{2,}[a-zA-Z0-9%/&]|\\.(?!${t.src_ZCc}|[.]|$)|`+(e["---"]?"\\-(?!--(?:[^-]|$))(?:-*)|":"\\-+|")+`,(?!${t.src_ZCc}|$)|`+`;(?!${t.src_ZCc}|$)|`+`\\!+(?!${t.src_ZCc}|[!]|$)|`+`\\?(?!${t.src_ZCc}|[?]|$))+|\\/)?`,t.src_email_name='[\\-;:&=\\+\\$,\\.a-zA-Z0-9_][\\-;:&=\\+\\$,\\"\\.a-zA-Z0-9_]{0,63}',t.src_xn="xn--[a-z0-9\\-]{1,59}",t.src_domain_root="(?:"+t.src_xn+"|"+`${t.src_pseudo_letter}{1,63})`,t.src_domain="(?:"+t.src_xn+"|"+`(?:${t.src_pseudo_letter})|`+`(?:${t.src_pseudo_letter}(?:-|${t.src_pseudo_letter}){0,61}${t.src_pseudo_letter}))`,t.src_host=`(?:(?:(?:(?:${t.src_domain})\\.)*${t.src_domain}))`,t.tpl_host_fuzzy="(?:"+t.src_ip4+"|"+`(?:(?:(?:${t.src_domain})\\.)+(?:%TLDS%)))`,t.tpl_host_no_ip_fuzzy=`(?:(?:(?:${t.src_domain})\\.)+(?:%TLDS%))`,t.src_host_strict=t.src_host+t.src_host_terminator,t.tpl_host_fuzzy_strict=t.tpl_host_fuzzy+t.src_host_terminator,t.src_host_port_strict=t.src_host+t.src_port+t.src_host_terminator,t.tpl_host_port_fuzzy_strict=t.tpl_host_fuzzy+t.src_port+t.src_host_terminator,t.tpl_host_port_no_ip_fuzzy_strict=t.tpl_host_no_ip_fuzzy+t.src_port+t.src_host_terminator,t.tpl_host_fuzzy_test=`localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:${t.src_ZPCc}|>|$))`,t.tpl_email_fuzzy=`(^|${n}|"|\\(|${t.src_ZCc})(${t.src_email_name}@${t.tpl_host_fuzzy_strict})`,t.tpl_link_fuzzy=`(^|(?![.:/\\-_@])(?:[$+<=>^\`||]|${t.src_ZPCc}))((?![$+<=>^\`||])${t.tpl_host_port_fuzzy_strict}${t.src_path})`,t.tpl_link_no_ip_fuzzy=`(^|(?![.:/\\-_@])(?:[$+<=>^\`||]|${t.src_ZPCc}))((?![$+<=>^\`||])${t.tpl_host_port_no_ip_fuzzy_strict}${t.src_path})`,t}function Xr(e){return Array.prototype.slice.call(arguments,1).forEach(function(t){t&&Object.keys(t).forEach(function(n){e[n]=t[n]})}),e}function Qr(e){return Object.prototype.toString.call(e)}function eo(e){return"[object Function]"===Qr(e)}function to(e){return e.replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&")}n.dn(Jr);const no={fuzzyLink:!0,fuzzyEmail:!0,fuzzyIP:!1},ro={"http:":{validate:function(e,t,n){const r=e.slice(t);return n.re.http||(n.re.http=new RegExp(`^\\/\\/${n.re.src_auth}${n.re.src_host_port_strict}${n.re.src_path}`,"i")),n.re.http.test(r)?r.match(n.re.http)[0].length:0}},"https:":"http:","ftp:":"http:","//":{validate:function(e,t,n){const r=e.slice(t);return n.re.no_http||(n.re.no_http=new RegExp("^"+n.re.src_auth+`(?:localhost|(?:(?:${n.re.src_domain})\\.)+${n.re.src_domain_root})`+n.re.src_port+n.re.src_host_terminator+n.re.src_path,"i")),n.re.no_http.test(r)?t>=3&&":"===e[t-3]||t>=3&&"/"===e[t-3]?0:r.match(n.re.no_http)[0].length:0}},"mailto:":{validate:function(e,t,n){const r=e.slice(t);return n.re.mailto||(n.re.mailto=new RegExp(`^${n.re.src_email_name}@${n.re.src_host_strict}`,"i")),n.re.mailto.test(r)?r.match(n.re.mailto)[0].length:0}}},oo="biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф".split("|");function ao(e){const t=e.re=Jr(e.__opts__),n=e.__tlds__.slice();function r(e){return e.replace("%TLDS%",t.src_tlds)}e.onCompile(),e.__tlds_replaced__||n.push("a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]"),n.push(t.src_xn),t.src_tlds=n.join("|"),t.email_fuzzy=RegExp(r(t.tpl_email_fuzzy),"i"),t.email_fuzzy_global=RegExp(r(t.tpl_email_fuzzy),"ig"),t.link_fuzzy=RegExp(r(t.tpl_link_fuzzy),"i"),t.link_fuzzy_global=RegExp(r(t.tpl_link_fuzzy),"ig"),t.link_no_ip_fuzzy=RegExp(r(t.tpl_link_no_ip_fuzzy),"i"),t.link_no_ip_fuzzy_global=RegExp(r(t.tpl_link_no_ip_fuzzy),"ig"),t.host_fuzzy_test=RegExp(r(t.tpl_host_fuzzy_test),"i");const o=[];function a(e,t){throw new Error(`(LinkifyIt) Invalid schema "${e}": ${t}`)}e.__compiled__={},Object.keys(e.__schemas__).forEach(function(t){const n=e.__schemas__[t];if(null===n)return;const r={validate:null,link:null};if(e.__compiled__[t]=r,"[object Object]"===Qr(n))return"[object RegExp]"!==Qr(n.validate)?eo(n.validate)?r.validate=n.validate:a(t,n):r.validate=function(e){return function(t,n){const r=t.slice(n);return e.test(r)?r.match(e)[0].length:0}}(n.validate),void(eo(n.normalize)?r.normalize=n.normalize:n.normalize?a(t,n):r.normalize=function(e,t){t.normalize(e)});!function(e){return"[object String]"===Qr(e)}(n)?a(t,n):o.push(t)}),o.forEach(function(t){e.__compiled__[e.__schemas__[t]]&&(e.__compiled__[t].validate=e.__compiled__[e.__schemas__[t]].validate,e.__compiled__[t].normalize=e.__compiled__[e.__schemas__[t]].normalize)}),e.__compiled__[""]={validate:null,normalize:function(e,t){t.normalize(e)}};const i=Object.keys(e.__compiled__).filter(function(t){return t.length>0&&e.__compiled__[t]}).map(to).join("|");e.re.schema_test=RegExp(`(^|(?!_)(?:[><|]|${t.src_ZPCc}))(${i})`,"i"),e.re.schema_search=RegExp(`(^|(?!_)(?:[><|]|${t.src_ZPCc}))(${i})`,"ig"),e.re.schema_at_start=RegExp(`^${e.re.schema_search.source}`,"i"),e.re.pretest=RegExp(`(${e.re.schema_test.source})|(${e.re.host_fuzzy_test.source})|@`,"i")}function io(e,t,n,r){const o=e.slice(n,r);this.schema=t.toLowerCase(),this.index=n,this.lastIndex=r,this.raw=o,this.text=o,this.url=o}function uo(e,t){if(!(this instanceof uo))return new uo(e,t);var n;t||(n=e,Object.keys(n||{}).reduce(function(e,t){return e||no.hasOwnProperty(t)},!1)&&(t=e,e={})),this.__opts__=Xr({},no,t),this.__schemas__=Xr({},ro,e),this.__compiled__={},this.__tlds__=oo,this.__tlds_replaced__=!1,this.re={},ao(this)}uo.prototype.add=function(e,t){return this.__schemas__[e]=t,ao(this),this},uo.prototype.set=function(e){return this.__opts__=Xr(this.__opts__,e),this},uo.prototype.test=function(e){if(!e.length)return!1;let t,n;if(this.re.schema_test.test(e))for(n=this.re.schema_search,n.lastIndex=0;null!==(t=n.exec(e));)if(this.testSchemaAt(e,t[2],n.lastIndex))return!0;return!!(this.__opts__.fuzzyLink&&this.__compiled__["http:"]&&e.search(this.re.host_fuzzy_test)>=0&&null!==e.match(this.__opts__.fuzzyIP?this.re.link_fuzzy:this.re.link_no_ip_fuzzy))||!!(this.__opts__.fuzzyEmail&&this.__compiled__["mailto:"]&&e.indexOf("@")>=0&&null!==e.match(this.re.email_fuzzy))},uo.prototype.pretest=function(e){return this.re.pretest.test(e)},uo.prototype.testSchemaAt=function(e,t,n){return this.__compiled__[t.toLowerCase()]?this.__compiled__[t.toLowerCase()].validate(e,n,this):0},uo.prototype.match=function(e){const t=[],n=[],r=[],o=[];let a,i,u;function s(e,t){return e?t?e.index!==t.index?e.index<t.index?e:t:e.lastIndex>=t.lastIndex?e:t:e:t}if(!e.length)return null;if(this.re.schema_test.test(e))for(u=this.re.schema_search,u.lastIndex=0;null!==(a=u.exec(e));)i=this.testSchemaAt(e,a[2],u.lastIndex),i&&n.push({schema:a[2],index:a.index+a[1].length,lastIndex:a.index+a[0].length+i});if(this.__opts__.fuzzyLink&&this.__compiled__["http:"])for(u=this.__opts__.fuzzyIP?this.re.link_fuzzy_global:this.re.link_no_ip_fuzzy_global,u.lastIndex=0;null!==(a=u.exec(e));)r.push({schema:"",index:a.index+a[1].length,lastIndex:a.index+a[0].length});if(this.__opts__.fuzzyEmail&&this.__compiled__["mailto:"])for(u=this.re.email_fuzzy_global,u.lastIndex=0;null!==(a=u.exec(e));)o.push({schema:"mailto:",index:a.index+a[1].length,lastIndex:a.index+a[0].length});const l=[0,0,0];let c=0;for(;;){const a=[n[l[0]],o[l[1]],r[l[2]]],i=s(s(a[0],a[1]),a[2]);if(!i)break;if(i===a[0]?l[0]++:i===a[1]?l[1]++:l[2]++,i.index<c)continue;const u=new io(e,i.schema,i.index,i.lastIndex);this.__compiled__[u.schema].normalize(u,this),t.push(u),c=i.lastIndex}return t.length?t:null},uo.prototype.matchAtStart=function(e){if(!e.length)return null;const t=this.re.schema_at_start.exec(e);if(!t)return null;const n=this.testSchemaAt(e,t[2],t[0].length);if(!n)return null;const r=new io(e,t[2],t.index+t[1].length,t.index+t[0].length+n);return this.__compiled__[r.schema].normalize(r,this),r},uo.prototype.tlds=function(e,t){return e=Array.isArray(e)?e:[e],t?(this.__tlds__=this.__tlds__.concat(e).sort().filter(function(e,t,n){return e!==n[t-1]}).reverse(),ao(this),this):(this.__tlds__=e.slice(),this.__tlds_replaced__=!0,ao(this),this)},uo.prototype.normalize=function(e){e.schema||(e.url=`http://${e.url}`),"mailto:"!==e.schema||/^mailto:/i.test(e.url)||(e.url=`mailto:${e.url}`)},uo.prototype.onCompile=function(){};const so=uo,lo=2147483647,co=36,fo=/^xn--/,po=/[^\0-\x7F]/,ho=/[\x2E\u3002\uFF0E\uFF61]/g,mo={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},go=Math.floor,_o=String.fromCharCode;function bo(e){throw new RangeError(mo[e])}function yo(e,t){const n=e.split("@");let r="";n.length>1&&(r=n[0]+"@",e=n[1]);const o=function(e,t){const n=[];let r=e.length;for(;r--;)n[r]=t(e[r]);return n}((e=e.replace(ho,".")).split("."),t).join(".");return r+o}function Do(e){const t=[];let n=0;const r=e.length;for(;n<r;){const o=e.charCodeAt(n++);if(o>=55296&&o<=56319&&n<r){const r=e.charCodeAt(n++);56320==(64512&r)?t.push(((1023&o)<<10)+(1023&r)+65536):(t.push(o),n--)}else t.push(o)}return t}const ko=function(e){return e>=48&&e<58?e-48+26:e>=65&&e<91?e-65:e>=97&&e<123?e-97:co},wo=function(e,t){return e+22+75*(e<26)-((0!=t)<<5)},vo=function(e,t,n){let r=0;for(e=n?go(e/700):e>>1,e+=go(e/t);e>455;r+=co)e=go(e/35);return go(r+36*e/(e+38))},Fo=function(e){const t=[],n=e.length;let r=0,o=128,a=72,i=e.lastIndexOf("-");i<0&&(i=0);for(let n=0;n<i;++n)e.charCodeAt(n)>=128&&bo("not-basic"),t.push(e.charCodeAt(n));for(let u=i>0?i+1:0;u<n;){const i=r;for(let t=1,o=co;;o+=co){u>=n&&bo("invalid-input");const i=ko(e.charCodeAt(u++));i>=co&&bo("invalid-input"),i>go((lo-r)/t)&&bo("overflow"),r+=i*t;const s=o<=a?1:o>=a+26?26:o-a;if(i<s)break;const l=co-s;t>go(lo/l)&&bo("overflow"),t*=l}const s=t.length+1;a=vo(r-i,s,0==i),go(r/s)>lo-o&&bo("overflow"),o+=go(r/s),r%=s,t.splice(r++,0,o)}return String.fromCodePoint(...t)},Co=function(e){const t=[],n=(e=Do(e)).length;let r=128,o=0,a=72;for(const n of e)n<128&&t.push(_o(n));const i=t.length;let u=i;for(i&&t.push("-");u<n;){let n=lo;for(const t of e)t>=r&&t<n&&(n=t);const s=u+1;n-r>go((lo-o)/s)&&bo("overflow"),o+=(n-r)*s,r=n;for(const n of e)if(n<r&&++o>lo&&bo("overflow"),n===r){let e=o;for(let n=co;;n+=co){const r=n<=a?1:n>=a+26?26:n-a;if(e<r)break;const o=e-r,i=co-r;t.push(_o(wo(r+o%i,0))),e=go(o/i)}t.push(_o(wo(e,0))),a=vo(o,s,u===i),o=0,++u}++o,++r}return t.join("")},Eo=function(e){return yo(e,function(e){return po.test(e)?"xn--"+Co(e):e})},Ao=function(e){return yo(e,function(e){return fo.test(e)?Fo(e.slice(4).toLowerCase()):e})},xo={default:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:100},components:{core:{},block:{},inline:{}}},zero:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:20},components:{core:{rules:["normalize","block","inline","text_join"]},block:{rules:["paragraph"]},inline:{rules:["text"],rules2:["balance_pairs","fragments_join"]}}},commonmark:{options:{html:!0,xhtmlOut:!0,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:20},components:{core:{rules:["normalize","block","inline","text_join"]},block:{rules:["blockquote","code","fence","heading","hr","html_block","lheading","list","reference","paragraph"]},inline:{rules:["autolink","backticks","emphasis","entity","escape","html_inline","image","link","newline","text"],rules2:["balance_pairs","emphasis","fragments_join"]}}}},So=/^(vbscript|javascript|file|data):/,Bo=/^data:image\/(gif|png|jpeg|webp);/;function To(e){const t=e.trim().toLowerCase();return!So.test(t)||Bo.test(t)}const Lo=["http:","https:","mailto:"];function jo(e){const t=Pt(e,!0);if(t.hostname&&(!t.protocol||Lo.indexOf(t.protocol)>=0))try{t.hostname=Eo(t.hostname)}catch(e){}return Ct(Et(t))}function Mo(e){const t=Pt(e,!0);if(t.hostname&&(!t.protocol||Lo.indexOf(t.protocol)>=0))try{t.hostname=Ao(t.hostname)}catch(e){}return wt(Et(t),wt.defaultChars+"%")}function Oo(e,t){if(!(this instanceof Oo))return new Oo(e,t);t||hn(e)||(t=e||{},e="default"),this.inline=new Yr,this.block=new Lr,this.core=new br,this.renderer=new Vn,this.linkify=new so,this.validateLink=To,this.normalizeLink=jo,this.normalizeLinkText=Mo,this.utils=r,this.helpers=bn({},o),this.options={},this.configure(e),t&&this.set(t)}Oo.prototype.set=function(e){return bn(this.options,e),this},Oo.prototype.configure=function(e){const t=this;if(hn(e)){const t=e;if(!(e=xo[t]))throw new Error('Wrong `markdown-it` preset "'+t+'", check name')}if(!e)throw new Error("Wrong `markdown-it` preset, can't be empty");return e.options&&t.set(e.options),e.components&&Object.keys(e.components).forEach(function(n){e.components[n].rules&&t[n].ruler.enableOnly(e.components[n].rules),e.components[n].rules2&&t[n].ruler2.enableOnly(e.components[n].rules2)}),this},Oo.prototype.enable=function(e,t){let n=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach(function(t){n=n.concat(this[t].ruler.enable(e,!0))},this),n=n.concat(this.inline.ruler2.enable(e,!0));const r=e.filter(function(e){return n.indexOf(e)<0});if(r.length&&!t)throw new Error("MarkdownIt. Failed to enable unknown rule(s): "+r);return this},Oo.prototype.disable=function(e,t){let n=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach(function(t){n=n.concat(this[t].ruler.disable(e,!0))},this),n=n.concat(this.inline.ruler2.disable(e,!0));const r=e.filter(function(e){return n.indexOf(e)<0});if(r.length&&!t)throw new Error("MarkdownIt. Failed to disable unknown rule(s): "+r);return this},Oo.prototype.use=function(e){const t=[this].concat(Array.prototype.slice.call(arguments,1));return e.apply(e,t),this},Oo.prototype.parse=function(e,t){if("string"!=typeof e)throw new Error("Input data should be a String");const n=new this.core.State(e,this,t);return this.core.process(n),n.tokens},Oo.prototype.render=function(e,t){return t=t||{},this.renderer.render(this.parse(e,t),this.options,t)},Oo.prototype.parseInline=function(e,t){const n=new this.core.State(e,this,t);return n.inlineMode=!0,this.core.process(n),n.tokens},Oo.prototype.renderInline=function(e,t){return t=t||{},this.renderer.render(this.parseInline(e,t),this.options,t)};const Io=Oo;var Ro=n(428),No=n.n(Ro);function Po(e,t,n,r){const o=Number(e[t].meta.id+1).toString();let a="";return"string"==typeof r.docId&&(a=`-${r.docId}-`),a+o}function qo(e,t){let n=Number(e[t].meta.id+1).toString();return e[t].meta.subId>0&&(n+=`:${e[t].meta.subId}`),`[${n}]`}function zo(e,t,n,r,o){const a=o.rules.footnote_anchor_name(e,t,n,r,o),i=o.rules.footnote_caption(e,t,n,r,o);let u=a;return e[t].meta.subId>0&&(u+=`:${e[t].meta.subId}`),`<sup class="footnote-ref"><a href="#fn${a}" id="fnref${u}">${i}</a></sup>`}function $o(e,t,n){return(n.xhtmlOut?'<hr class="footnotes-sep" />\n':'<hr class="footnotes-sep">\n')+'<section class="footnotes">\n<ol class="footnotes-list">\n'}function Go(){return"</ol>\n</section>\n"}function Uo(e,t,n,r,o){let a=o.rules.footnote_anchor_name(e,t,n,r,o);return e[t].meta.subId>0&&(a+=`:${e[t].meta.subId}`),`<li id="fn${a}" class="footnote-item">`}function Ho(){return"</li>\n"}function Wo(e,t,n,r,o){let a=o.rules.footnote_anchor_name(e,t,n,r,o);return e[t].meta.subId>0&&(a+=`:${e[t].meta.subId}`),` <a href="#fnref${a}" class="footnote-backref">↩︎</a>`}var Zo=n(366),Vo=n.n(Zo);const Ko={100:"💯",1234:"🔢",grinning:"😀",smiley:"😃",smile:"😄",grin:"😁",laughing:"😆",satisfied:"😆",sweat_smile:"😅",rofl:"🤣",joy:"😂",slightly_smiling_face:"🙂",upside_down_face:"🙃",melting_face:"🫠",wink:"😉",blush:"😊",innocent:"😇",smiling_face_with_three_hearts:"🥰",heart_eyes:"😍",star_struck:"🤩",kissing_heart:"😘",kissing:"😗",relaxed:"☺️",kissing_closed_eyes:"😚",kissing_smiling_eyes:"😙",smiling_face_with_tear:"🥲",yum:"😋",stuck_out_tongue:"😛",stuck_out_tongue_winking_eye:"😜",zany_face:"🤪",stuck_out_tongue_closed_eyes:"😝",money_mouth_face:"🤑",hugs:"🤗",hand_over_mouth:"🤭",face_with_open_eyes_and_hand_over_mouth:"🫢",face_with_peeking_eye:"🫣",shushing_face:"🤫",thinking:"🤔",saluting_face:"🫡",zipper_mouth_face:"🤐",raised_eyebrow:"🤨",neutral_face:"😐",expressionless:"😑",no_mouth:"😶",dotted_line_face:"🫥",face_in_clouds:"😶🌫️",smirk:"😏",unamused:"😒",roll_eyes:"🙄",grimacing:"😬",face_exhaling:"😮💨",lying_face:"🤥",shaking_face:"🫨",relieved:"😌",pensive:"😔",sleepy:"😪",drooling_face:"🤤",sleeping:"😴",mask:"😷",face_with_thermometer:"🤒",face_with_head_bandage:"🤕",nauseated_face:"🤢",vomiting_face:"🤮",sneezing_face:"🤧",hot_face:"🥵",cold_face:"🥶",woozy_face:"🥴",dizzy_face:"😵",face_with_spiral_eyes:"😵💫",exploding_head:"🤯",cowboy_hat_face:"🤠",partying_face:"🥳",disguised_face:"🥸",sunglasses:"😎",nerd_face:"🤓",monocle_face:"🧐",confused:"😕",face_with_diagonal_mouth:"🫤",worried:"😟",slightly_frowning_face:"🙁",frowning_face:"☹️",open_mouth:"😮",hushed:"😯",astonished:"😲",flushed:"😳",pleading_face:"🥺",face_holding_back_tears:"🥹",frowning:"😦",anguished:"😧",fearful:"😨",cold_sweat:"😰",disappointed_relieved:"😥",cry:"😢",sob:"😭",scream:"😱",confounded:"😖",persevere:"😣",disappointed:"😞",sweat:"😓",weary:"😩",tired_face:"😫",yawning_face:"🥱",triumph:"😤",rage:"😡",pout:"😡",angry:"😠",cursing_face:"🤬",smiling_imp:"😈",imp:"👿",skull:"💀",skull_and_crossbones:"☠️",hankey:"💩",poop:"💩",shit:"💩",clown_face:"🤡",japanese_ogre:"👹",japanese_goblin:"👺",ghost:"👻",alien:"👽",space_invader:"👾",robot:"🤖",smiley_cat:"😺",smile_cat:"😸",joy_cat:"😹",heart_eyes_cat:"😻",smirk_cat:"😼",kissing_cat:"😽",scream_cat:"🙀",crying_cat_face:"😿",pouting_cat:"😾",see_no_evil:"🙈",hear_no_evil:"🙉",speak_no_evil:"🙊",love_letter:"💌",cupid:"💘",gift_heart:"💝",sparkling_heart:"💖",heartpulse:"💗",heartbeat:"💓",revolving_hearts:"💞",two_hearts:"💕",heart_decoration:"💟",heavy_heart_exclamation:"❣️",broken_heart:"💔",heart_on_fire:"❤️🔥",mending_heart:"❤️🩹",heart:"❤️",pink_heart:"🩷",orange_heart:"🧡",yellow_heart:"💛",green_heart:"💚",blue_heart:"💙",light_blue_heart:"🩵",purple_heart:"💜",brown_heart:"🤎",black_heart:"🖤",grey_heart:"🩶",white_heart:"🤍",kiss:"💋",anger:"💢",boom:"💥",collision:"💥",dizzy:"💫",sweat_drops:"💦",dash:"💨",hole:"🕳️",speech_balloon:"💬",eye_speech_bubble:"👁️🗨️",left_speech_bubble:"🗨️",right_anger_bubble:"🗯️",thought_balloon:"💭",zzz:"💤",wave:"👋",raised_back_of_hand:"🤚",raised_hand_with_fingers_splayed:"🖐️",hand:"✋",raised_hand:"✋",vulcan_salute:"🖖",rightwards_hand:"🫱",leftwards_hand:"🫲",palm_down_hand:"🫳",palm_up_hand:"🫴",leftwards_pushing_hand:"🫷",rightwards_pushing_hand:"🫸",ok_hand:"👌",pinched_fingers:"🤌",pinching_hand:"🤏",v:"✌️",crossed_fingers:"🤞",hand_with_index_finger_and_thumb_crossed:"🫰",love_you_gesture:"🤟",metal:"🤘",call_me_hand:"🤙",point_left:"👈",point_right:"👉",point_up_2:"👆",middle_finger:"🖕",fu:"🖕",point_down:"👇",point_up:"☝️",index_pointing_at_the_viewer:"🫵","+1":"👍",thumbsup:"👍","-1":"👎",thumbsdown:"👎",fist_raised:"✊",fist:"✊",fist_oncoming:"👊",facepunch:"👊",punch:"👊",fist_left:"🤛",fist_right:"🤜",clap:"👏",raised_hands:"🙌",heart_hands:"🫶",open_hands:"👐",palms_up_together:"🤲",handshake:"🤝",pray:"🙏",writing_hand:"✍️",nail_care:"💅",selfie:"🤳",muscle:"💪",mechanical_arm:"🦾",mechanical_leg:"🦿",leg:"🦵",foot:"🦶",ear:"👂",ear_with_hearing_aid:"🦻",nose:"👃",brain:"🧠",anatomical_heart:"🫀",lungs:"🫁",tooth:"🦷",bone:"🦴",eyes:"👀",eye:"👁️",tongue:"👅",lips:"👄",biting_lip:"🫦",baby:"👶",child:"🧒",boy:"👦",girl:"👧",adult:"🧑",blond_haired_person:"👱",man:"👨",bearded_person:"🧔",man_beard:"🧔♂️",woman_beard:"🧔♀️",red_haired_man:"👨🦰",curly_haired_man:"👨🦱",white_haired_man:"👨🦳",bald_man:"👨🦲",woman:"👩",red_haired_woman:"👩🦰",person_red_hair:"🧑🦰",curly_haired_woman:"👩🦱",person_curly_hair:"🧑🦱",white_haired_woman:"👩🦳",person_white_hair:"🧑🦳",bald_woman:"👩🦲",person_bald:"🧑🦲",blond_haired_woman:"👱♀️",blonde_woman:"👱♀️",blond_haired_man:"👱♂️",older_adult:"🧓",older_man:"👴",older_woman:"👵",frowning_person:"🙍",frowning_man:"🙍♂️",frowning_woman:"🙍♀️",pouting_face:"🙎",pouting_man:"🙎♂️",pouting_woman:"🙎♀️",no_good:"🙅",no_good_man:"🙅♂️",ng_man:"🙅♂️",no_good_woman:"🙅♀️",ng_woman:"🙅♀️",ok_person:"🙆",ok_man:"🙆♂️",ok_woman:"🙆♀️",tipping_hand_person:"💁",information_desk_person:"💁",tipping_hand_man:"💁♂️",sassy_man:"💁♂️",tipping_hand_woman:"💁♀️",sassy_woman:"💁♀️",raising_hand:"🙋",raising_hand_man:"🙋♂️",raising_hand_woman:"🙋♀️",deaf_person:"🧏",deaf_man:"🧏♂️",deaf_woman:"🧏♀️",bow:"🙇",bowing_man:"🙇♂️",bowing_woman:"🙇♀️",facepalm:"🤦",man_facepalming:"🤦♂️",woman_facepalming:"🤦♀️",shrug:"🤷",man_shrugging:"🤷♂️",woman_shrugging:"🤷♀️",health_worker:"🧑⚕️",man_health_worker:"👨⚕️",woman_health_worker:"👩⚕️",student:"🧑🎓",man_student:"👨🎓",woman_student:"👩🎓",teacher:"🧑🏫",man_teacher:"👨🏫",woman_teacher:"👩🏫",judge:"🧑⚖️",man_judge:"👨⚖️",woman_judge:"👩⚖️",farmer:"🧑🌾",man_farmer:"👨🌾",woman_farmer:"👩🌾",cook:"🧑🍳",man_cook:"👨🍳",woman_cook:"👩🍳",mechanic:"🧑🔧",man_mechanic:"👨🔧",woman_mechanic:"👩🔧",factory_worker:"🧑🏭",man_factory_worker:"👨🏭",woman_factory_worker:"👩🏭",office_worker:"🧑💼",man_office_worker:"👨💼",woman_office_worker:"👩💼",scientist:"🧑🔬",man_scientist:"👨🔬",woman_scientist:"👩🔬",technologist:"🧑💻",man_technologist:"👨💻",woman_technologist:"👩💻",singer:"🧑🎤",man_singer:"👨🎤",woman_singer:"👩🎤",artist:"🧑🎨",man_artist:"👨🎨",woman_artist:"👩🎨",pilot:"🧑✈️",man_pilot:"👨✈️",woman_pilot:"👩✈️",astronaut:"🧑🚀",man_astronaut:"👨🚀",woman_astronaut:"👩🚀",firefighter:"🧑🚒",man_firefighter:"👨🚒",woman_firefighter:"👩🚒",police_officer:"👮",cop:"👮",policeman:"👮♂️",policewoman:"👮♀️",detective:"🕵️",male_detective:"🕵️♂️",female_detective:"🕵️♀️",guard:"💂",guardsman:"💂♂️",guardswoman:"💂♀️",ninja:"🥷",construction_worker:"👷",construction_worker_man:"👷♂️",construction_worker_woman:"👷♀️",person_with_crown:"🫅",prince:"🤴",princess:"👸",person_with_turban:"👳",man_with_turban:"👳♂️",woman_with_turban:"👳♀️",man_with_gua_pi_mao:"👲",woman_with_headscarf:"🧕",person_in_tuxedo:"🤵",man_in_tuxedo:"🤵♂️",woman_in_tuxedo:"🤵♀️",person_with_veil:"👰",man_with_veil:"👰♂️",woman_with_veil:"👰♀️",bride_with_veil:"👰♀️",pregnant_woman:"🤰",pregnant_man:"🫃",pregnant_person:"🫄",breast_feeding:"🤱",woman_feeding_baby:"👩🍼",man_feeding_baby:"👨🍼",person_feeding_baby:"🧑🍼",angel:"👼",santa:"🎅",mrs_claus:"🤶",mx_claus:"🧑🎄",superhero:"🦸",superhero_man:"🦸♂️",superhero_woman:"🦸♀️",supervillain:"🦹",supervillain_man:"🦹♂️",supervillain_woman:"🦹♀️",mage:"🧙",mage_man:"🧙♂️",mage_woman:"🧙♀️",fairy:"🧚",fairy_man:"🧚♂️",fairy_woman:"🧚♀️",vampire:"🧛",vampire_man:"🧛♂️",vampire_woman:"🧛♀️",merperson:"🧜",merman:"🧜♂️",mermaid:"🧜♀️",elf:"🧝",elf_man:"🧝♂️",elf_woman:"🧝♀️",genie:"🧞",genie_man:"🧞♂️",genie_woman:"🧞♀️",zombie:"🧟",zombie_man:"🧟♂️",zombie_woman:"🧟♀️",troll:"🧌",massage:"💆",massage_man:"💆♂️",massage_woman:"💆♀️",haircut:"💇",haircut_man:"💇♂️",haircut_woman:"💇♀️",walking:"🚶",walking_man:"🚶♂️",walking_woman:"🚶♀️",standing_person:"🧍",standing_man:"🧍♂️",standing_woman:"🧍♀️",kneeling_person:"🧎",kneeling_man:"🧎♂️",kneeling_woman:"🧎♀️",person_with_probing_cane:"🧑🦯",man_with_probing_cane:"👨🦯",woman_with_probing_cane:"👩🦯",person_in_motorized_wheelchair:"🧑🦼",man_in_motorized_wheelchair:"👨🦼",woman_in_motorized_wheelchair:"👩🦼",person_in_manual_wheelchair:"🧑🦽",man_in_manual_wheelchair:"👨🦽",woman_in_manual_wheelchair:"👩🦽",runner:"🏃",running:"🏃",running_man:"🏃♂️",running_woman:"🏃♀️",woman_dancing:"💃",dancer:"💃",man_dancing:"🕺",business_suit_levitating:"🕴️",dancers:"👯",dancing_men:"👯♂️",dancing_women:"👯♀️",sauna_person:"🧖",sauna_man:"🧖♂️",sauna_woman:"🧖♀️",climbing:"🧗",climbing_man:"🧗♂️",climbing_woman:"🧗♀️",person_fencing:"🤺",horse_racing:"🏇",skier:"⛷️",snowboarder:"🏂",golfing:"🏌️",golfing_man:"🏌️♂️",golfing_woman:"🏌️♀️",surfer:"🏄",surfing_man:"🏄♂️",surfing_woman:"🏄♀️",rowboat:"🚣",rowing_man:"🚣♂️",rowing_woman:"🚣♀️",swimmer:"🏊",swimming_man:"🏊♂️",swimming_woman:"🏊♀️",bouncing_ball_person:"⛹️",bouncing_ball_man:"⛹️♂️",basketball_man:"⛹️♂️",bouncing_ball_woman:"⛹️♀️",basketball_woman:"⛹️♀️",weight_lifting:"🏋️",weight_lifting_man:"🏋️♂️",weight_lifting_woman:"🏋️♀️",bicyclist:"🚴",biking_man:"🚴♂️",biking_woman:"🚴♀️",mountain_bicyclist:"🚵",mountain_biking_man:"🚵♂️",mountain_biking_woman:"🚵♀️",cartwheeling:"🤸",man_cartwheeling:"🤸♂️",woman_cartwheeling:"🤸♀️",wrestling:"🤼",men_wrestling:"🤼♂️",women_wrestling:"🤼♀️",water_polo:"🤽",man_playing_water_polo:"🤽♂️",woman_playing_water_polo:"🤽♀️",handball_person:"🤾",man_playing_handball:"🤾♂️",woman_playing_handball:"🤾♀️",juggling_person:"🤹",man_juggling:"🤹♂️",woman_juggling:"🤹♀️",lotus_position:"🧘",lotus_position_man:"🧘♂️",lotus_position_woman:"🧘♀️",bath:"🛀",sleeping_bed:"🛌",people_holding_hands:"🧑🤝🧑",two_women_holding_hands:"👭",couple:"👫",two_men_holding_hands:"👬",couplekiss:"💏",couplekiss_man_woman:"👩❤️💋👨",couplekiss_man_man:"👨❤️💋👨",couplekiss_woman_woman:"👩❤️💋👩",couple_with_heart:"💑",couple_with_heart_woman_man:"👩❤️👨",couple_with_heart_man_man:"👨❤️👨",couple_with_heart_woman_woman:"👩❤️👩",family:"👪",family_man_woman_boy:"👨👩👦",family_man_woman_girl:"👨👩👧",family_man_woman_girl_boy:"👨👩👧👦",family_man_woman_boy_boy:"👨👩👦👦",family_man_woman_girl_girl:"👨👩👧👧",family_man_man_boy:"👨👨👦",family_man_man_girl:"👨👨👧",family_man_man_girl_boy:"👨👨👧👦",family_man_man_boy_boy:"👨👨👦👦",family_man_man_girl_girl:"👨👨👧👧",family_woman_woman_boy:"👩👩👦",family_woman_woman_girl:"👩👩👧",family_woman_woman_girl_boy:"👩👩👧👦",family_woman_woman_boy_boy:"👩👩👦👦",family_woman_woman_girl_girl:"👩👩👧👧",family_man_boy:"👨👦",family_man_boy_boy:"👨👦👦",family_man_girl:"👨👧",family_man_girl_boy:"👨👧👦",family_man_girl_girl:"👨👧👧",family_woman_boy:"👩👦",family_woman_boy_boy:"👩👦👦",family_woman_girl:"👩👧",family_woman_girl_boy:"👩👧👦",family_woman_girl_girl:"👩👧👧",speaking_head:"🗣️",bust_in_silhouette:"👤",busts_in_silhouette:"👥",people_hugging:"🫂",footprints:"👣",monkey_face:"🐵",monkey:"🐒",gorilla:"🦍",orangutan:"🦧",dog:"🐶",dog2:"🐕",guide_dog:"🦮",service_dog:"🐕🦺",poodle:"🐩",wolf:"🐺",fox_face:"🦊",raccoon:"🦝",cat:"🐱",cat2:"🐈",black_cat:"🐈⬛",lion:"🦁",tiger:"🐯",tiger2:"🐅",leopard:"🐆",horse:"🐴",moose:"🫎",donkey:"🫏",racehorse:"🐎",unicorn:"🦄",zebra:"🦓",deer:"🦌",bison:"🦬",cow:"🐮",ox:"🐂",water_buffalo:"🐃",cow2:"🐄",pig:"🐷",pig2:"🐖",boar:"🐗",pig_nose:"🐽",ram:"🐏",sheep:"🐑",goat:"🐐",dromedary_camel:"🐪",camel:"🐫",llama:"🦙",giraffe:"🦒",elephant:"🐘",mammoth:"🦣",rhinoceros:"🦏",hippopotamus:"🦛",mouse:"🐭",mouse2:"🐁",rat:"🐀",hamster:"🐹",rabbit:"🐰",rabbit2:"🐇",chipmunk:"🐿️",beaver:"🦫",hedgehog:"🦔",bat:"🦇",bear:"🐻",polar_bear:"🐻❄️",koala:"🐨",panda_face:"🐼",sloth:"🦥",otter:"🦦",skunk:"🦨",kangaroo:"🦘",badger:"🦡",feet:"🐾",paw_prints:"🐾",turkey:"🦃",chicken:"🐔",rooster:"🐓",hatching_chick:"🐣",baby_chick:"🐤",hatched_chick:"🐥",bird:"🐦",penguin:"🐧",dove:"🕊️",eagle:"🦅",duck:"🦆",swan:"🦢",owl:"🦉",dodo:"🦤",feather:"🪶",flamingo:"🦩",peacock:"🦚",parrot:"🦜",wing:"🪽",black_bird:"🐦⬛",goose:"🪿",frog:"🐸",crocodile:"🐊",turtle:"🐢",lizard:"🦎",snake:"🐍",dragon_face:"🐲",dragon:"🐉",sauropod:"🦕","t-rex":"🦖",whale:"🐳",whale2:"🐋",dolphin:"🐬",flipper:"🐬",seal:"🦭",fish:"🐟",tropical_fish:"🐠",blowfish:"🐡",shark:"🦈",octopus:"🐙",shell:"🐚",coral:"🪸",jellyfish:"🪼",snail:"🐌",butterfly:"🦋",bug:"🐛",ant:"🐜",bee:"🐝",honeybee:"🐝",beetle:"🪲",lady_beetle:"🐞",cricket:"🦗",cockroach:"🪳",spider:"🕷️",spider_web:"🕸️",scorpion:"🦂",mosquito:"🦟",fly:"🪰",worm:"🪱",microbe:"🦠",bouquet:"💐",cherry_blossom:"🌸",white_flower:"💮",lotus:"🪷",rosette:"🏵️",rose:"🌹",wilted_flower:"🥀",hibiscus:"🌺",sunflower:"🌻",blossom:"🌼",tulip:"🌷",hyacinth:"🪻",seedling:"🌱",potted_plant:"🪴",evergreen_tree:"🌲",deciduous_tree:"🌳",palm_tree:"🌴",cactus:"🌵",ear_of_rice:"🌾",herb:"🌿",shamrock:"☘️",four_leaf_clover:"🍀",maple_leaf:"🍁",fallen_leaf:"🍂",leaves:"🍃",empty_nest:"🪹",nest_with_eggs:"🪺",mushroom:"🍄",grapes:"🍇",melon:"🍈",watermelon:"🍉",tangerine:"🍊",orange:"🍊",mandarin:"🍊",lemon:"🍋",banana:"🍌",pineapple:"🍍",mango:"🥭",apple:"🍎",green_apple:"🍏",pear:"🍐",peach:"🍑",cherries:"🍒",strawberry:"🍓",blueberries:"🫐",kiwi_fruit:"🥝",tomato:"🍅",olive:"🫒",coconut:"🥥",avocado:"🥑",eggplant:"🍆",potato:"🥔",carrot:"🥕",corn:"🌽",hot_pepper:"🌶️",bell_pepper:"🫑",cucumber:"🥒",leafy_green:"🥬",broccoli:"🥦",garlic:"🧄",onion:"🧅",peanuts:"🥜",beans:"🫘",chestnut:"🌰",ginger_root:"🫚",pea_pod:"🫛",bread:"🍞",croissant:"🥐",baguette_bread:"🥖",flatbread:"🫓",pretzel:"🥨",bagel:"🥯",pancakes:"🥞",waffle:"🧇",cheese:"🧀",meat_on_bone:"🍖",poultry_leg:"🍗",cut_of_meat:"🥩",bacon:"🥓",hamburger:"🍔",fries:"🍟",pizza:"🍕",hotdog:"🌭",sandwich:"🥪",taco:"🌮",burrito:"🌯",tamale:"🫔",stuffed_flatbread:"🥙",falafel:"🧆",egg:"🥚",fried_egg:"🍳",shallow_pan_of_food:"🥘",stew:"🍲",fondue:"🫕",bowl_with_spoon:"🥣",green_salad:"🥗",popcorn:"🍿",butter:"🧈",salt:"🧂",canned_food:"🥫",bento:"🍱",rice_cracker:"🍘",rice_ball:"🍙",rice:"🍚",curry:"🍛",ramen:"🍜",spaghetti:"🍝",sweet_potato:"🍠",oden:"🍢",sushi:"🍣",fried_shrimp:"🍤",fish_cake:"🍥",moon_cake:"🥮",dango:"🍡",dumpling:"🥟",fortune_cookie:"🥠",takeout_box:"🥡",crab:"🦀",lobster:"🦞",shrimp:"🦐",squid:"🦑",oyster:"🦪",icecream:"🍦",shaved_ice:"🍧",ice_cream:"🍨",doughnut:"🍩",cookie:"🍪",birthday:"🎂",cake:"🍰",cupcake:"🧁",pie:"🥧",chocolate_bar:"🍫",candy:"🍬",lollipop:"🍭",custard:"🍮",honey_pot:"🍯",baby_bottle:"🍼",milk_glass:"🥛",coffee:"☕",teapot:"🫖",tea:"🍵",sake:"🍶",champagne:"🍾",wine_glass:"🍷",cocktail:"🍸",tropical_drink:"🍹",beer:"🍺",beers:"🍻",clinking_glasses:"🥂",tumbler_glass:"🥃",pouring_liquid:"🫗",cup_with_straw:"🥤",bubble_tea:"🧋",beverage_box:"🧃",mate:"🧉",ice_cube:"🧊",chopsticks:"🥢",plate_with_cutlery:"🍽️",fork_and_knife:"🍴",spoon:"🥄",hocho:"🔪",knife:"🔪",jar:"🫙",amphora:"🏺",earth_africa:"🌍",earth_americas:"🌎",earth_asia:"🌏",globe_with_meridians:"🌐",world_map:"🗺️",japan:"🗾",compass:"🧭",mountain_snow:"🏔️",mountain:"⛰️",volcano:"🌋",mount_fuji:"🗻",camping:"🏕️",beach_umbrella:"🏖️",desert:"🏜️",desert_island:"🏝️",national_park:"🏞️",stadium:"🏟️",classical_building:"🏛️",building_construction:"🏗️",bricks:"🧱",rock:"🪨",wood:"🪵",hut:"🛖",houses:"🏘️",derelict_house:"🏚️",house:"🏠",house_with_garden:"🏡",office:"🏢",post_office:"🏣",european_post_office:"🏤",hospital:"🏥",bank:"🏦",hotel:"🏨",love_hotel:"🏩",convenience_store:"🏪",school:"🏫",department_store:"🏬",factory:"🏭",japanese_castle:"🏯",european_castle:"🏰",wedding:"💒",tokyo_tower:"🗼",statue_of_liberty:"🗽",church:"⛪",mosque:"🕌",hindu_temple:"🛕",synagogue:"🕍",shinto_shrine:"⛩️",kaaba:"🕋",fountain:"⛲",tent:"⛺",foggy:"🌁",night_with_stars:"🌃",cityscape:"🏙️",sunrise_over_mountains:"🌄",sunrise:"🌅",city_sunset:"🌆",city_sunrise:"🌇",bridge_at_night:"🌉",hotsprings:"♨️",carousel_horse:"🎠",playground_slide:"🛝",ferris_wheel:"🎡",roller_coaster:"🎢",barber:"💈",circus_tent:"🎪",steam_locomotive:"🚂",railway_car:"🚃",bullettrain_side:"🚄",bullettrain_front:"🚅",train2:"🚆",metro:"🚇",light_rail:"🚈",station:"🚉",tram:"🚊",monorail:"🚝",mountain_railway:"🚞",train:"🚋",bus:"🚌",oncoming_bus:"🚍",trolleybus:"🚎",minibus:"🚐",ambulance:"🚑",fire_engine:"🚒",police_car:"🚓",oncoming_police_car:"🚔",taxi:"🚕",oncoming_taxi:"🚖",car:"🚗",red_car:"🚗",oncoming_automobile:"🚘",blue_car:"🚙",pickup_truck:"🛻",truck:"🚚",articulated_lorry:"🚛",tractor:"🚜",racing_car:"🏎️",motorcycle:"🏍️",motor_scooter:"🛵",manual_wheelchair:"🦽",motorized_wheelchair:"🦼",auto_rickshaw:"🛺",bike:"🚲",kick_scooter:"🛴",skateboard:"🛹",roller_skate:"🛼",busstop:"🚏",motorway:"🛣️",railway_track:"🛤️",oil_drum:"🛢️",fuelpump:"⛽",wheel:"🛞",rotating_light:"🚨",traffic_light:"🚥",vertical_traffic_light:"🚦",stop_sign:"🛑",construction:"🚧",anchor:"⚓",ring_buoy:"🛟",boat:"⛵",sailboat:"⛵",canoe:"🛶",speedboat:"🚤",passenger_ship:"🛳️",ferry:"⛴️",motor_boat:"🛥️",ship:"🚢",airplane:"✈️",small_airplane:"🛩️",flight_departure:"🛫",flight_arrival:"🛬",parachute:"🪂",seat:"💺",helicopter:"🚁",suspension_railway:"🚟",mountain_cableway:"🚠",aerial_tramway:"🚡",artificial_satellite:"🛰️",rocket:"🚀",flying_saucer:"🛸",bellhop_bell:"🛎️",luggage:"🧳",hourglass:"⌛",hourglass_flowing_sand:"⏳",watch:"⌚",alarm_clock:"⏰",stopwatch:"⏱️",timer_clock:"⏲️",mantelpiece_clock:"🕰️",clock12:"🕛",clock1230:"🕧",clock1:"🕐",clock130:"🕜",clock2:"🕑",clock230:"🕝",clock3:"🕒",clock330:"🕞",clock4:"🕓",clock430:"🕟",clock5:"🕔",clock530:"🕠",clock6:"🕕",clock630:"🕡",clock7:"🕖",clock730:"🕢",clock8:"🕗",clock830:"🕣",clock9:"🕘",clock930:"🕤",clock10:"🕙",clock1030:"🕥",clock11:"🕚",clock1130:"🕦",new_moon:"🌑",waxing_crescent_moon:"🌒",first_quarter_moon:"🌓",moon:"🌔",waxing_gibbous_moon:"🌔",full_moon:"🌕",waning_gibbous_moon:"🌖",last_quarter_moon:"🌗",waning_crescent_moon:"🌘",crescent_moon:"🌙",new_moon_with_face:"🌚",first_quarter_moon_with_face:"🌛",last_quarter_moon_with_face:"🌜",thermometer:"🌡️",sunny:"☀️",full_moon_with_face:"🌝",sun_with_face:"🌞",ringed_planet:"🪐",star:"⭐",star2:"🌟",stars:"🌠",milky_way:"🌌",cloud:"☁️",partly_sunny:"⛅",cloud_with_lightning_and_rain:"⛈️",sun_behind_small_cloud:"🌤️",sun_behind_large_cloud:"🌥️",sun_behind_rain_cloud:"🌦️",cloud_with_rain:"🌧️",cloud_with_snow:"🌨️",cloud_with_lightning:"🌩️",tornado:"🌪️",fog:"🌫️",wind_face:"🌬️",cyclone:"🌀",rainbow:"🌈",closed_umbrella:"🌂",open_umbrella:"☂️",umbrella:"☔",parasol_on_ground:"⛱️",zap:"⚡",snowflake:"❄️",snowman_with_snow:"☃️",snowman:"⛄",comet:"☄️",fire:"🔥",droplet:"💧",ocean:"🌊",jack_o_lantern:"🎃",christmas_tree:"🎄",fireworks:"🎆",sparkler:"🎇",firecracker:"🧨",sparkles:"✨",balloon:"🎈",tada:"🎉",confetti_ball:"🎊",tanabata_tree:"🎋",bamboo:"🎍",dolls:"🎎",flags:"🎏",wind_chime:"🎐",rice_scene:"🎑",red_envelope:"🧧",ribbon:"🎀",gift:"🎁",reminder_ribbon:"🎗️",tickets:"🎟️",ticket:"🎫",medal_military:"🎖️",trophy:"🏆",medal_sports:"🏅","1st_place_medal":"🥇","2nd_place_medal":"🥈","3rd_place_medal":"🥉",soccer:"⚽",baseball:"⚾",softball:"🥎",basketball:"🏀",volleyball:"🏐",football:"🏈",rugby_football:"🏉",tennis:"🎾",flying_disc:"🥏",bowling:"🎳",cricket_game:"🏏",field_hockey:"🏑",ice_hockey:"🏒",lacrosse:"🥍",ping_pong:"🏓",badminton:"🏸",boxing_glove:"🥊",martial_arts_uniform:"🥋",goal_net:"🥅",golf:"⛳",ice_skate:"⛸️",fishing_pole_and_fish:"🎣",diving_mask:"🤿",running_shirt_with_sash:"🎽",ski:"🎿",sled:"🛷",curling_stone:"🥌",dart:"🎯",yo_yo:"🪀",kite:"🪁",gun:"🔫","8ball":"🎱",crystal_ball:"🔮",magic_wand:"🪄",video_game:"🎮",joystick:"🕹️",slot_machine:"🎰",game_die:"🎲",jigsaw:"🧩",teddy_bear:"🧸",pinata:"🪅",mirror_ball:"🪩",nesting_dolls:"🪆",spades:"♠️",hearts:"♥️",diamonds:"♦️",clubs:"♣️",chess_pawn:"♟️",black_joker:"🃏",mahjong:"🀄",flower_playing_cards:"🎴",performing_arts:"🎭",framed_picture:"🖼️",art:"🎨",thread:"🧵",sewing_needle:"🪡",yarn:"🧶",knot:"🪢",eyeglasses:"👓",dark_sunglasses:"🕶️",goggles:"🥽",lab_coat:"🥼",safety_vest:"🦺",necktie:"👔",shirt:"👕",tshirt:"👕",jeans:"👖",scarf:"🧣",gloves:"🧤",coat:"🧥",socks:"🧦",dress:"👗",kimono:"👘",sari:"🥻",one_piece_swimsuit:"🩱",swim_brief:"🩲",shorts:"🩳",bikini:"👙",womans_clothes:"👚",folding_hand_fan:"🪭",purse:"👛",handbag:"👜",pouch:"👝",shopping:"🛍️",school_satchel:"🎒",thong_sandal:"🩴",mans_shoe:"👞",shoe:"👞",athletic_shoe:"👟",hiking_boot:"🥾",flat_shoe:"🥿",high_heel:"👠",sandal:"👡",ballet_shoes:"🩰",boot:"👢",hair_pick:"🪮",crown:"👑",womans_hat:"👒",tophat:"🎩",mortar_board:"🎓",billed_cap:"🧢",military_helmet:"🪖",rescue_worker_helmet:"⛑️",prayer_beads:"📿",lipstick:"💄",ring:"💍",gem:"💎",mute:"🔇",speaker:"🔈",sound:"🔉",loud_sound:"🔊",loudspeaker:"📢",mega:"📣",postal_horn:"📯",bell:"🔔",no_bell:"🔕",musical_score:"🎼",musical_note:"🎵",notes:"🎶",studio_microphone:"🎙️",level_slider:"🎚️",control_knobs:"🎛️",microphone:"🎤",headphones:"🎧",radio:"📻",saxophone:"🎷",accordion:"🪗",guitar:"🎸",musical_keyboard:"🎹",trumpet:"🎺",violin:"🎻",banjo:"🪕",drum:"🥁",long_drum:"🪘",maracas:"🪇",flute:"🪈",iphone:"📱",calling:"📲",phone:"☎️",telephone:"☎️",telephone_receiver:"📞",pager:"📟",fax:"📠",battery:"🔋",low_battery:"🪫",electric_plug:"🔌",computer:"💻",desktop_computer:"🖥️",printer:"🖨️",keyboard:"⌨️",computer_mouse:"🖱️",trackball:"🖲️",minidisc:"💽",floppy_disk:"💾",cd:"💿",dvd:"📀",abacus:"🧮",movie_camera:"🎥",film_strip:"🎞️",film_projector:"📽️",clapper:"🎬",tv:"📺",camera:"📷",camera_flash:"📸",video_camera:"📹",vhs:"📼",mag:"🔍",mag_right:"🔎",candle:"🕯️",bulb:"💡",flashlight:"🔦",izakaya_lantern:"🏮",lantern:"🏮",diya_lamp:"🪔",notebook_with_decorative_cover:"📔",closed_book:"📕",book:"📖",open_book:"📖",green_book:"📗",blue_book:"📘",orange_book:"📙",books:"📚",notebook:"📓",ledger:"📒",page_with_curl:"📃",scroll:"📜",page_facing_up:"📄",newspaper:"📰",newspaper_roll:"🗞️",bookmark_tabs:"📑",bookmark:"🔖",label:"🏷️",moneybag:"💰",coin:"🪙",yen:"💴",dollar:"💵",euro:"💶",pound:"💷",money_with_wings:"💸",credit_card:"💳",receipt:"🧾",chart:"💹",envelope:"✉️",email:"📧","e-mail":"📧",incoming_envelope:"📨",envelope_with_arrow:"📩",outbox_tray:"📤",inbox_tray:"📥",package:"📦",mailbox:"📫",mailbox_closed:"📪",mailbox_with_mail:"📬",mailbox_with_no_mail:"📭",postbox:"📮",ballot_box:"🗳️",pencil2:"✏️",black_nib:"✒️",fountain_pen:"🖋️",pen:"🖊️",paintbrush:"🖌️",crayon:"🖍️",memo:"📝",pencil:"📝",briefcase:"💼",file_folder:"📁",open_file_folder:"📂",card_index_dividers:"🗂️",date:"📅",calendar:"📆",spiral_notepad:"🗒️",spiral_calendar:"🗓️",card_index:"📇",chart_with_upwards_trend:"📈",chart_with_downwards_trend:"📉",bar_chart:"📊",clipboard:"📋",pushpin:"📌",round_pushpin:"📍",paperclip:"📎",paperclips:"🖇️",straight_ruler:"📏",triangular_ruler:"📐",scissors:"✂️",card_file_box:"🗃️",file_cabinet:"🗄️",wastebasket:"🗑️",lock:"🔒",unlock:"🔓",lock_with_ink_pen:"🔏",closed_lock_with_key:"🔐",key:"🔑",old_key:"🗝️",hammer:"🔨",axe:"🪓",pick:"⛏️",hammer_and_pick:"⚒️",hammer_and_wrench:"🛠️",dagger:"🗡️",crossed_swords:"⚔️",bomb:"💣",boomerang:"🪃",bow_and_arrow:"🏹",shield:"🛡️",carpentry_saw:"🪚",wrench:"🔧",screwdriver:"🪛",nut_and_bolt:"🔩",gear:"⚙️",clamp:"🗜️",balance_scale:"⚖️",probing_cane:"🦯",link:"🔗",chains:"⛓️",hook:"🪝",toolbox:"🧰",magnet:"🧲",ladder:"🪜",alembic:"⚗️",test_tube:"🧪",petri_dish:"🧫",dna:"🧬",microscope:"🔬",telescope:"🔭",satellite:"📡",syringe:"💉",drop_of_blood:"🩸",pill:"💊",adhesive_bandage:"🩹",crutch:"🩼",stethoscope:"🩺",x_ray:"🩻",door:"🚪",elevator:"🛗",mirror:"🪞",window:"🪟",bed:"🛏️",couch_and_lamp:"🛋️",chair:"🪑",toilet:"🚽",plunger:"🪠",shower:"🚿",bathtub:"🛁",mouse_trap:"🪤",razor:"🪒",lotion_bottle:"🧴",safety_pin:"🧷",broom:"🧹",basket:"🧺",roll_of_paper:"🧻",bucket:"🪣",soap:"🧼",bubbles:"🫧",toothbrush:"🪥",sponge:"🧽",fire_extinguisher:"🧯",shopping_cart:"🛒",smoking:"🚬",coffin:"⚰️",headstone:"🪦",funeral_urn:"⚱️",nazar_amulet:"🧿",hamsa:"🪬",moyai:"🗿",placard:"🪧",identification_card:"🪪",atm:"🏧",put_litter_in_its_place:"🚮",potable_water:"🚰",wheelchair:"♿",mens:"🚹",womens:"🚺",restroom:"🚻",baby_symbol:"🚼",wc:"🚾",passport_control:"🛂",customs:"🛃",baggage_claim:"🛄",left_luggage:"🛅",warning:"⚠️",children_crossing:"🚸",no_entry:"⛔",no_entry_sign:"🚫",no_bicycles:"🚳",no_smoking:"🚭",do_not_litter:"🚯","non-potable_water":"🚱",no_pedestrians:"🚷",no_mobile_phones:"📵",underage:"🔞",radioactive:"☢️",biohazard:"☣️",arrow_up:"⬆️",arrow_upper_right:"↗️",arrow_right:"➡️",arrow_lower_right:"↘️",arrow_down:"⬇️",arrow_lower_left:"↙️",arrow_left:"⬅️",arrow_upper_left:"↖️",arrow_up_down:"↕️",left_right_arrow:"↔️",leftwards_arrow_with_hook:"↩️",arrow_right_hook:"↪️",arrow_heading_up:"⤴️",arrow_heading_down:"⤵️",arrows_clockwise:"🔃",arrows_counterclockwise:"🔄",back:"🔙",end:"🔚",on:"🔛",soon:"🔜",top:"🔝",place_of_worship:"🛐",atom_symbol:"⚛️",om:"🕉️",star_of_david:"✡️",wheel_of_dharma:"☸️",yin_yang:"☯️",latin_cross:"✝️",orthodox_cross:"☦️",star_and_crescent:"☪️",peace_symbol:"☮️",menorah:"🕎",six_pointed_star:"🔯",khanda:"🪯",aries:"♈",taurus:"♉",gemini:"♊",cancer:"♋",leo:"♌",virgo:"♍",libra:"♎",scorpius:"♏",sagittarius:"♐",capricorn:"♑",aquarius:"♒",pisces:"♓",ophiuchus:"⛎",twisted_rightwards_arrows:"🔀",repeat:"🔁",repeat_one:"🔂",arrow_forward:"▶️",fast_forward:"⏩",next_track_button:"⏭️",play_or_pause_button:"⏯️",arrow_backward:"◀️",rewind:"⏪",previous_track_button:"⏮️",arrow_up_small:"🔼",arrow_double_up:"⏫",arrow_down_small:"🔽",arrow_double_down:"⏬",pause_button:"⏸️",stop_button:"⏹️",record_button:"⏺️",eject_button:"⏏️",cinema:"🎦",low_brightness:"🔅",high_brightness:"🔆",signal_strength:"📶",wireless:"🛜",vibration_mode:"📳",mobile_phone_off:"📴",female_sign:"♀️",male_sign:"♂️",transgender_symbol:"⚧️",heavy_multiplication_x:"✖️",heavy_plus_sign:"➕",heavy_minus_sign:"➖",heavy_division_sign:"➗",heavy_equals_sign:"🟰",infinity:"♾️",bangbang:"‼️",interrobang:"⁉️",question:"❓",grey_question:"❔",grey_exclamation:"❕",exclamation:"❗",heavy_exclamation_mark:"❗",wavy_dash:"〰️",currency_exchange:"💱",heavy_dollar_sign:"💲",medical_symbol:"⚕️",recycle:"♻️",fleur_de_lis:"⚜️",trident:"🔱",name_badge:"📛",beginner:"🔰",o:"⭕",white_check_mark:"✅",ballot_box_with_check:"☑️",heavy_check_mark:"✔️",x:"❌",negative_squared_cross_mark:"❎",curly_loop:"➰",loop:"➿",part_alternation_mark:"〽️",eight_spoked_asterisk:"✳️",eight_pointed_black_star:"✴️",sparkle:"❇️",copyright:"©️",registered:"®️",tm:"™️",hash:"#️⃣",asterisk:"*️⃣",zero:"0️⃣",one:"1️⃣",two:"2️⃣",three:"3️⃣",four:"4️⃣",five:"5️⃣",six:"6️⃣",seven:"7️⃣",eight:"8️⃣",nine:"9️⃣",keycap_ten:"🔟",capital_abcd:"🔠",abcd:"🔡",symbols:"🔣",abc:"🔤",a:"🅰️",ab:"🆎",b:"🅱️",cl:"🆑",cool:"🆒",free:"🆓",information_source:"ℹ️",id:"🆔",m:"Ⓜ️",new:"🆕",ng:"🆖",o2:"🅾️",ok:"🆗",parking:"🅿️",sos:"🆘",up:"🆙",vs:"🆚",koko:"🈁",sa:"🈂️",ideograph_advantage:"🉐",accept:"🉑",congratulations:"㊗️",secret:"㊙️",u6e80:"🈵",red_circle:"🔴",orange_circle:"🟠",yellow_circle:"🟡",green_circle:"🟢",large_blue_circle:"🔵",purple_circle:"🟣",brown_circle:"🟤",black_circle:"⚫",white_circle:"⚪",red_square:"🟥",orange_square:"🟧",yellow_square:"🟨",green_square:"🟩",blue_square:"🟦",purple_square:"🟪",brown_square:"🟫",black_large_square:"⬛",white_large_square:"⬜",black_medium_square:"◼️",white_medium_square:"◻️",black_medium_small_square:"◾",white_medium_small_square:"◽",black_small_square:"▪️",white_small_square:"▫️",large_orange_diamond:"🔶",large_blue_diamond:"🔷",small_orange_diamond:"🔸",small_blue_diamond:"🔹",small_red_triangle:"🔺",small_red_triangle_down:"🔻",diamond_shape_with_a_dot_inside:"💠",radio_button:"🔘",white_square_button:"🔳",black_square_button:"🔲",checkered_flag:"🏁",triangular_flag_on_post:"🚩",crossed_flags:"🎌",black_flag:"🏴",white_flag:"🏳️",rainbow_flag:"🏳️🌈",transgender_flag:"🏳️⚧️",pirate_flag:"🏴☠️",ascension_island:"🇦🇨",andorra:"🇦🇩",united_arab_emirates:"🇦🇪",afghanistan:"🇦🇫",antigua_barbuda:"🇦🇬",anguilla:"🇦🇮",albania:"🇦🇱",armenia:"🇦🇲",angola:"🇦🇴",antarctica:"🇦🇶",argentina:"🇦🇷",american_samoa:"🇦🇸",austria:"🇦🇹",australia:"🇦🇺",aruba:"🇦🇼",aland_islands:"🇦🇽",azerbaijan:"🇦🇿",bosnia_herzegovina:"🇧🇦",barbados:"🇧🇧",bangladesh:"🇧🇩",belgium:"🇧🇪",burkina_faso:"🇧🇫",bulgaria:"🇧🇬",bahrain:"🇧🇭",burundi:"🇧🇮",benin:"🇧🇯",st_barthelemy:"🇧🇱",bermuda:"🇧🇲",brunei:"🇧🇳",bolivia:"🇧🇴",caribbean_netherlands:"🇧🇶",brazil:"🇧🇷",bahamas:"🇧🇸",bhutan:"🇧🇹",bouvet_island:"🇧🇻",botswana:"🇧🇼",belarus:"🇧🇾",belize:"🇧🇿",canada:"🇨🇦",cocos_islands:"🇨🇨",congo_kinshasa:"🇨🇩",central_african_republic:"🇨🇫",congo_brazzaville:"🇨🇬",switzerland:"🇨🇭",cote_divoire:"🇨🇮",cook_islands:"🇨🇰",chile:"🇨🇱",cameroon:"🇨🇲",cn:"🇨🇳",colombia:"🇨🇴",clipperton_island:"🇨🇵",costa_rica:"🇨🇷",cuba:"🇨🇺",cape_verde:"🇨🇻",curacao:"🇨🇼",christmas_island:"🇨🇽",cyprus:"🇨🇾",czech_republic:"🇨🇿",de:"🇩🇪",diego_garcia:"🇩🇬",djibouti:"🇩🇯",denmark:"🇩🇰",dominica:"🇩🇲",dominican_republic:"🇩🇴",algeria:"🇩🇿",ceuta_melilla:"🇪🇦",ecuador:"🇪🇨",estonia:"🇪🇪",egypt:"🇪🇬",western_sahara:"🇪🇭",eritrea:"🇪🇷",es:"🇪🇸",ethiopia:"🇪🇹",eu:"🇪🇺",european_union:"🇪🇺",finland:"🇫🇮",fiji:"🇫🇯",falkland_islands:"🇫🇰",micronesia:"🇫🇲",faroe_islands:"🇫🇴",fr:"🇫🇷",gabon:"🇬🇦",gb:"🇬🇧",uk:"🇬🇧",grenada:"🇬🇩",georgia:"🇬🇪",french_guiana:"🇬🇫",guernsey:"🇬🇬",ghana:"🇬🇭",gibraltar:"🇬🇮",greenland:"🇬🇱",gambia:"🇬🇲",guinea:"🇬🇳",guadeloupe:"🇬🇵",equatorial_guinea:"🇬🇶",greece:"🇬🇷",south_georgia_south_sandwich_islands:"🇬🇸",guatemala:"🇬🇹",guam:"🇬🇺",guinea_bissau:"🇬🇼",guyana:"🇬🇾",hong_kong:"🇭🇰",heard_mcdonald_islands:"🇭🇲",honduras:"🇭🇳",croatia:"🇭🇷",haiti:"🇭🇹",hungary:"🇭🇺",canary_islands:"🇮🇨",indonesia:"🇮🇩",ireland:"🇮🇪",israel:"🇮🇱",isle_of_man:"🇮🇲",india:"🇮🇳",british_indian_ocean_territory:"🇮🇴",iraq:"🇮🇶",iran:"🇮🇷",iceland:"🇮🇸",it:"🇮🇹",jersey:"🇯🇪",jamaica:"🇯🇲",jordan:"🇯🇴",jp:"🇯🇵",kenya:"🇰🇪",kyrgyzstan:"🇰🇬",cambodia:"🇰🇭",kiribati:"🇰🇮",comoros:"🇰🇲",st_kitts_nevis:"🇰🇳",north_korea:"🇰🇵",kr:"🇰🇷",kuwait:"🇰🇼",cayman_islands:"🇰🇾",kazakhstan:"🇰🇿",laos:"🇱🇦",lebanon:"🇱🇧",st_lucia:"🇱🇨",liechtenstein:"🇱🇮",sri_lanka:"🇱🇰",liberia:"🇱🇷",lesotho:"🇱🇸",lithuania:"🇱🇹",luxembourg:"🇱🇺",latvia:"🇱🇻",libya:"🇱🇾",morocco:"🇲🇦",monaco:"🇲🇨",moldova:"🇲🇩",montenegro:"🇲🇪",st_martin:"🇲🇫",madagascar:"🇲🇬",marshall_islands:"🇲🇭",macedonia:"🇲🇰",mali:"🇲🇱",myanmar:"🇲🇲",mongolia:"🇲🇳",macau:"🇲🇴",northern_mariana_islands:"🇲🇵",martinique:"🇲🇶",mauritania:"🇲🇷",montserrat:"🇲🇸",malta:"🇲🇹",mauritius:"🇲🇺",maldives:"🇲🇻",malawi:"🇲🇼",mexico:"🇲🇽",malaysia:"🇲🇾",mozambique:"🇲🇿",namibia:"🇳🇦",new_caledonia:"🇳🇨",niger:"🇳🇪",norfolk_island:"🇳🇫",nigeria:"🇳🇬",nicaragua:"🇳🇮",netherlands:"🇳🇱",norway:"🇳🇴",nepal:"🇳🇵",nauru:"🇳🇷",niue:"🇳🇺",new_zealand:"🇳🇿",oman:"🇴🇲",panama:"🇵🇦",peru:"🇵🇪",french_polynesia:"🇵🇫",papua_new_guinea:"🇵🇬",philippines:"🇵🇭",pakistan:"🇵🇰",poland:"🇵🇱",st_pierre_miquelon:"🇵🇲",pitcairn_islands:"🇵🇳",puerto_rico:"🇵🇷",palestinian_territories:"🇵🇸",portugal:"🇵🇹",palau:"🇵🇼",paraguay:"🇵🇾",qatar:"🇶🇦",reunion:"🇷🇪",romania:"🇷🇴",serbia:"🇷🇸",ru:"🇷🇺",rwanda:"🇷🇼",saudi_arabia:"🇸🇦",solomon_islands:"🇸🇧",seychelles:"🇸🇨",sudan:"🇸🇩",sweden:"🇸🇪",singapore:"🇸🇬",st_helena:"🇸🇭",slovenia:"🇸🇮",svalbard_jan_mayen:"🇸🇯",slovakia:"🇸🇰",sierra_leone:"🇸🇱",san_marino:"🇸🇲",senegal:"🇸🇳",somalia:"🇸🇴",suriname:"🇸🇷",south_sudan:"🇸🇸",sao_tome_principe:"🇸🇹",el_salvador:"🇸🇻",sint_maarten:"🇸🇽",syria:"🇸🇾",swaziland:"🇸🇿",tristan_da_cunha:"🇹🇦",turks_caicos_islands:"🇹🇨",chad:"🇹🇩",french_southern_territories:"🇹🇫",togo:"🇹🇬",thailand:"🇹🇭",tajikistan:"🇹🇯",tokelau:"🇹🇰",timor_leste:"🇹🇱",turkmenistan:"🇹🇲",tunisia:"🇹🇳",tonga:"🇹🇴",tr:"🇹🇷",trinidad_tobago:"🇹🇹",tuvalu:"🇹🇻",taiwan:"🇹🇼",tanzania:"🇹🇿",ukraine:"🇺🇦",uganda:"🇺🇬",us_outlying_islands:"🇺🇲",united_nations:"🇺🇳",us:"🇺🇸",uruguay:"🇺🇾",uzbekistan:"🇺🇿",vatican_city:"🇻🇦",st_vincent_grenadines:"🇻🇨",venezuela:"🇻🇪",british_virgin_islands:"🇻🇬",us_virgin_islands:"🇻🇮",vietnam:"🇻🇳",vanuatu:"🇻🇺",wallis_futuna:"🇼🇫",samoa:"🇼🇸",kosovo:"🇽🇰",yemen:"🇾🇪",mayotte:"🇾🇹",south_africa:"🇿🇦",zambia:"🇿🇲",zimbabwe:"🇿🇼",england:"🏴",scotland:"🏴",wales:"🏴"},Yo={angry:[">:(",">:-("],blush:[':")',':-")'],broken_heart:["</3","<\\3"],confused:[":/",":-/"],cry:[":'(",":'-(",":,(",":,-("],frowning:[":(",":-("],heart:["<3"],imp:["]:(","]:-("],innocent:["o:)","O:)","o:-)","O:-)","0:)","0:-)"],joy:[":')",":'-)",":,)",":,-)",":'D",":'-D",":,D",":,-D"],kissing:[":*",":-*"],laughing:["x-)","X-)"],neutral_face:[":|",":-|"],open_mouth:[":o",":-o",":O",":-O"],rage:[":@",":-@"],smile:[":D",":-D"],smiley:[":)",":-)"],smiling_imp:["]:)","]:-)"],sob:[":,'(",":,'-(",";(",";-("],stuck_out_tongue:[":P",":-P"],sunglasses:["8-)","B-)"],sweat:[",:(",",:-("],sweat_smile:[",:)",",:-)"],unamused:[":s",":-S",":z",":-Z",":$",":-$"],wink:[";)",";-)"]};function Jo(e,t){return e[t].content}var Xo=function(e){if(!1===(null===(t=window)||void 0===t||null===(t=t.wpGfmConfig)||void 0===t||null===(t=t.features)||void 0===t?void 0:t.iframeSafeMode))return window.document;var t,n=e&&"current"in e?e.current:e;return(null==n?void 0:n.ownerDocument)||window.document},Qo=function(e){return(null==e?void 0:e.defaultView)||window},ea=n(859),ta=n.n(ea),na=n(341),ra=n.n(na),oa=n(286),aa=n.n(oa),ia=n(304),ua=n.n(ia),sa=function(e){var t=new Set;return String(e||"").split(",").forEach(function(e){var n=e.trim();if(n){var r=n.match(/^(\d+)\s*-\s*(\d+)$/);if(r){var o=parseInt(r[1],10),a=parseInt(r[2],10);if(o>a){var i=[a,o];o=i[0],a=i[1]}for(var u=o;u<=a;u++)t.add(u)}else/^\d+$/.test(n)&&t.add(parseInt(n,10))}}),Array.from(t).sort(function(e,t){return e-t})},la=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e||!e.includes('class="shiki"'))return e;var n=!!t.showLineNumbers,r=!!t.advancedSyntax,o="number"==typeof t.collapseLines?t.collapseLines:30,a=t.labels||{};if(!n&&!r)return e;var i=document.createElement("div");return i.innerHTML=e,i.querySelectorAll("pre.shiki").forEach(function(e){n&&e.classList.add("gfmr-line-numbers");var t=e.getAttribute("data-gfmr-hl"),i=e.getAttribute("data-gfmr-filename"),u=e.hasAttribute("data-gfmr-collapse");if(e.removeAttribute("data-gfmr-hl"),e.removeAttribute("data-gfmr-filename"),e.removeAttribute("data-gfmr-collapse"),r){var s=e.querySelectorAll("code .line");if(t){var l=new Set(sa(t));s.forEach(function(e,t){l.has(t+1)&&e.classList.add("gfmr-hl")})}var c=s.length,f=u||o>0&&c>o,p=!!i;if(p||f){var d=document.createElement("div");if(d.className="gfmr-code-enhanced",f&&(d.classList.add("gfmr-code-collapsible"),d.setAttribute("data-gfmr-collapsed","true")),e.replaceWith(d),p){var h=document.createElement("div");h.className="gfmr-code-filename",h.textContent=i,d.appendChild(h)}if(d.appendChild(e),f){var m=document.createElement("button");m.type="button",m.className="gfmr-code-collapse-toggle",m.setAttribute("aria-expanded","false"),m.setAttribute("data-gfmr-lines",String(c)),m.textContent=a.show||"Show all lines",d.appendChild(m)}}}}),i.innerHTML};function ca(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",o=n.toStringTag||"@@toStringTag";function a(n,r,o,a){var s=r&&r.prototype instanceof u?r:u,l=Object.create(s.prototype);return fa(l,"_invoke",function(n,r,o){var a,u,s,l=0,c=o||[],f=!1,p={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,n){return a=t,u=0,s=e,p.n=n,i}};function d(n,r){for(u=n,s=r,t=0;!f&&l&&!o&&t<c.length;t++){var o,a=c[t],d=p.p,h=a[2];n>3?(o=h===r)&&(s=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=e):a[0]<=d&&((o=n<2&&d<a[1])?(u=0,p.v=r,p.n=a[1]):d<h&&(o=n<3||a[0]>r||r>h)&&(a[4]=n,a[5]=r,p.n=h,u=0))}if(o||n>1)return i;throw f=!0,r}return function(o,c,h){if(l>1)throw TypeError("Generator is already running");for(f&&1===c&&d(c,h),u=c,s=h;(t=u<2?e:s)||!f;){a||(u?u<3?(u>1&&(p.n=-1),d(u,s)):p.n=s:p.v=s);try{if(l=2,a){if(u||(o="next"),t=a[o]){if(!(t=t.call(a,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,u<2&&(u=0)}else 1===u&&(t=a.return)&&t.call(a),u<2&&(s=TypeError("The iterator does not provide a '"+o+"' method"),u=1);a=e}else if((t=(f=p.n<0)?s:n.call(r,p))!==i)break}catch(t){a=e,u=1,s=t}finally{l=1}}return{value:t,done:f}}}(n,o,a),!0),l}var i={};function u(){}function s(){}function l(){}t=Object.getPrototypeOf;var c=[][r]?t(t([][r]())):(fa(t={},r,function(){return this}),t),f=l.prototype=u.prototype=Object.create(c);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,fa(e,o,"GeneratorFunction")),e.prototype=Object.create(f),e}return s.prototype=l,fa(f,"constructor",l),fa(l,"constructor",s),s.displayName="GeneratorFunction",fa(l,o,"GeneratorFunction"),fa(f),fa(f,o,"Generator"),fa(f,r,function(){return this}),fa(f,"toString",function(){return"[object Generator]"}),(ca=function(){return{w:a,m:p}})()}function fa(e,t,n,r){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}fa=function(e,t,n,r){function a(t,n){fa(e,t,function(e){return this._invoke(t,n,e)})}t?o?o(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(a("next",0),a("throw",1),a("return",2))},fa(e,t,n,r)}function pa(e){return function(e){if(Array.isArray(e))return da(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return da(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?da(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function da(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function ha(e){return ha="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ha(e)}function ma(e,t,n,r,o,a,i){try{var u=e[a](i),s=u.value}catch(e){return void n(e)}u.done?t(s):Promise.resolve(s).then(r,o)}function ga(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var a=e.apply(t,n);function i(e){ma(a,r,o,i,u,"next",e)}function u(e){ma(a,r,o,i,u,"throw",e)}i(void 0)})}}var _a=function(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")},ba=new Io({html:!0,breaks:!0,linkify:!0,typographer:!0,highlight:function(e,t){var n=t?' class="language-'.concat(t,'"'):"";return'<pre class="gfmr-code-fallback"><code'.concat(n,">").concat(_a(e),"</code></pre>")}}).use(No(),{enabled:!0}).use(function(e){const t=e.helpers.parseLinkLabel,n=e.utils.isSpace;e.renderer.rules.footnote_ref=zo,e.renderer.rules.footnote_block_open=$o,e.renderer.rules.footnote_block_close=Go,e.renderer.rules.footnote_open=Uo,e.renderer.rules.footnote_close=Ho,e.renderer.rules.footnote_anchor=Wo,e.renderer.rules.footnote_caption=qo,e.renderer.rules.footnote_anchor_name=Po,e.block.ruler.before("reference","footnote_def",function(e,t,r,o){const a=e.bMarks[t]+e.tShift[t],i=e.eMarks[t];if(a+4>i)return!1;if(91!==e.src.charCodeAt(a))return!1;if(94!==e.src.charCodeAt(a+1))return!1;let u;for(u=a+2;u<i;u++){if(32===e.src.charCodeAt(u))return!1;if(93===e.src.charCodeAt(u))break}if(u===a+2)return!1;if(u+1>=i||58!==e.src.charCodeAt(++u))return!1;if(o)return!0;u++,e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.refs||(e.env.footnotes.refs={});const s=e.src.slice(a+2,u-2);e.env.footnotes.refs[`:${s}`]=-1;const l=new e.Token("footnote_reference_open","",1);l.meta={label:s},l.level=e.level++,e.tokens.push(l);const c=e.bMarks[t],f=e.tShift[t],p=e.sCount[t],d=e.parentType,h=u,m=e.sCount[t]+u-(e.bMarks[t]+e.tShift[t]);let g=m;for(;u<i;){const t=e.src.charCodeAt(u);if(!n(t))break;9===t?g+=4-g%4:g++,u++}e.tShift[t]=u-h,e.sCount[t]=g-m,e.bMarks[t]=h,e.blkIndent+=4,e.parentType="footnote",e.sCount[t]<e.blkIndent&&(e.sCount[t]+=e.blkIndent),e.md.block.tokenize(e,t,r,!0),e.parentType=d,e.blkIndent-=4,e.tShift[t]=f,e.sCount[t]=p,e.bMarks[t]=c;const _=new e.Token("footnote_reference_close","",-1);return _.level=--e.level,e.tokens.push(_),!0},{alt:["paragraph","reference"]}),e.inline.ruler.after("image","footnote_inline",function(e,n){const r=e.posMax,o=e.pos;if(o+2>=r)return!1;if(94!==e.src.charCodeAt(o))return!1;if(91!==e.src.charCodeAt(o+1))return!1;const a=o+2,i=t(e,o+1);if(i<0)return!1;if(!n){e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.list||(e.env.footnotes.list=[]);const t=e.env.footnotes.list.length,n=[];e.md.inline.parse(e.src.slice(a,i),e.md,e.env,n),e.push("footnote_ref","",0).meta={id:t},e.env.footnotes.list[t]={content:e.src.slice(a,i),tokens:n}}return e.pos=i+1,e.posMax=r,!0}),e.inline.ruler.after("footnote_inline","footnote_ref",function(e,t){const n=e.posMax,r=e.pos;if(r+3>n)return!1;if(!e.env.footnotes||!e.env.footnotes.refs)return!1;if(91!==e.src.charCodeAt(r))return!1;if(94!==e.src.charCodeAt(r+1))return!1;let o;for(o=r+2;o<n;o++){if(32===e.src.charCodeAt(o))return!1;if(10===e.src.charCodeAt(o))return!1;if(93===e.src.charCodeAt(o))break}if(o===r+2)return!1;if(o>=n)return!1;o++;const a=e.src.slice(r+2,o-1);if(void 0===e.env.footnotes.refs[`:${a}`])return!1;if(!t){let t;e.env.footnotes.list||(e.env.footnotes.list=[]),e.env.footnotes.refs[`:${a}`]<0?(t=e.env.footnotes.list.length,e.env.footnotes.list[t]={label:a,count:0},e.env.footnotes.refs[`:${a}`]=t):t=e.env.footnotes.refs[`:${a}`];const n=e.env.footnotes.list[t].count;e.env.footnotes.list[t].count++,e.push("footnote_ref","",0).meta={id:t,subId:n,label:a}}return e.pos=o,e.posMax=n,!0}),e.core.ruler.after("inline","footnote_tail",function(e){let t,n,r,o=!1;const a={};if(!e.env.footnotes)return;if(e.tokens=e.tokens.filter(function(e){return"footnote_reference_open"===e.type?(o=!0,n=[],r=e.meta.label,!1):"footnote_reference_close"===e.type?(o=!1,a[":"+r]=n,!1):(o&&n.push(e),!o)}),!e.env.footnotes.list)return;const i=e.env.footnotes.list;e.tokens.push(new e.Token("footnote_block_open","",1));for(let n=0,r=i.length;n<r;n++){const r=new e.Token("footnote_open","",1);if(r.meta={id:n,label:i[n].label},e.tokens.push(r),i[n].tokens){t=[];const r=new e.Token("paragraph_open","p",1);r.block=!0,t.push(r);const o=new e.Token("inline","",0);o.children=i[n].tokens,o.content=i[n].content,t.push(o);const a=new e.Token("paragraph_close","p",-1);a.block=!0,t.push(a)}else i[n].label&&(t=a[`:${i[n].label}`]);let o;t&&(e.tokens=e.tokens.concat(t)),o="paragraph_close"===e.tokens[e.tokens.length-1].type?e.tokens.pop():null;const u=i[n].count>0?i[n].count:1;for(let t=0;t<u;t++){const r=new e.Token("footnote_anchor","",0);r.meta={id:n,subId:t,label:i[n].label},e.tokens.push(r)}o&&e.tokens.push(o),e.tokens.push(new e.Token("footnote_close","",-1))}e.tokens.push(new e.Token("footnote_block_close","",-1))})}).use(function(e){function t(e,t){const n=[],r=t.length;for(let o=0;o<r;o++){const r=t[o];if(61!==r.marker)continue;if(-1===r.end)continue;const a=t[r.end],i=e.tokens[r.token];i.type="mark_open",i.tag="mark",i.nesting=1,i.markup="==",i.content="";const u=e.tokens[a.token];u.type="mark_close",u.tag="mark",u.nesting=-1,u.markup="==",u.content="","text"===e.tokens[a.token-1].type&&"="===e.tokens[a.token-1].content&&n.push(a.token-1)}for(;n.length;){const t=n.pop();let r=t+1;for(;r<e.tokens.length&&"mark_close"===e.tokens[r].type;)r++;if(r--,t!==r){const n=e.tokens[r];e.tokens[r]=e.tokens[t],e.tokens[t]=n}}}e.inline.ruler.before("emphasis","mark",function(e,t){const n=e.pos,r=e.src.charCodeAt(n);if(t)return!1;if(61!==r)return!1;const o=e.scanDelims(e.pos,!0);let a=o.length;const i=String.fromCharCode(r);if(a<2)return!1;a%2&&(e.push("text","",0).content=i,a--);for(let t=0;t<a;t+=2)e.push("text","",0).content=i+i,(o.can_open||o.can_close)&&e.delimiters.push({marker:r,length:0,jump:t/2,token:e.tokens.length-1,end:-1,open:o.can_open,close:o.can_close});return e.pos+=o.length,!0}),e.inline.ruler2.before("emphasis","mark",function(e){let n;const r=e.tokens_meta,o=(e.tokens_meta||[]).length;for(t(e,e.delimiters),n=0;n<o;n++)r[n]&&r[n].delimiters&&t(e,r[n].delimiters)})}).use(Vo()).use(function(e,t){const n={defs:Ko,shortcuts:Yo,enabled:[]};!function(e,t){const n=function(e){let t=e.defs;e.enabled.length&&(t=Object.keys(t).reduce((n,r)=>(e.enabled.indexOf(r)>=0&&(n[r]=t[r]),n),{}));const n=Object.keys(e.shortcuts).reduce((n,r)=>t[r]?Array.isArray(e.shortcuts[r])?(e.shortcuts[r].forEach(e=>{n[e]=r}),n):(n[e.shortcuts[r]]=r,n):n,{}),r=Object.keys(t);let o;o=0===r.length?"^$":r.map(e=>`:${e}:`).concat(Object.keys(n)).sort().reverse().map(e=>function(e){return e.replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&")}(e)).join("|");const a=RegExp(o),i=RegExp(o,"g");return{defs:t,shortcuts:n,scanRE:a,replaceRE:i}}(Object.assign({},{defs:{},shortcuts:{},enabled:[]},t||{}));e.renderer.rules.emoji=Jo,e.core.ruler.after("linkify","emoji",function(e,t,n,r,o){const a=e.utils.arrayReplaceAt,i=e.utils.lib.ucmicro,u=new RegExp([i.Z.source,i.P.source,i.Cc.source].join("|"));function s(e,r,a){let i=0;const s=[];if(e.replace(o,function(r,o,l){let c;if(Object.prototype.hasOwnProperty.call(n,r)){if(c=n[r],o>0&&!u.test(l[o-1]))return;if(o+r.length<l.length&&!u.test(l[o+r.length]))return}else c=r.slice(1,-1);if(o>i){const t=new a("text","",0);t.content=e.slice(i,o),s.push(t)}const f=new a("emoji","",0);f.markup=c,f.content=t[c],s.push(f),i=o+r.length}),i<e.length){const t=new a("text","",0);t.content=e.slice(i),s.push(t)}return s}return function(e){let t;const n=e.tokens;let o=0;for(let i=0,u=n.length;i<u;i++){if("inline"!==n[i].type)continue;let u=n[i].children;for(let l=u.length-1;l>=0;l--)t=u[l],"link_open"!==t.type&&"link_close"!==t.type||"auto"===t.info&&(o-=t.nesting),"text"===t.type&&0===o&&r.test(t.content)&&(n[i].children=u=a(u,l,s(t.content,t.level,e.Token)))}}}(e,n.defs,n.shortcuts,n.scanRE,n.replaceRE))}(e,Object.assign({},n,t||{}))},{shortcuts:{}}).use(ra().markdownItGfmrAlerts).use(aa().markdownItGfmrHeadingAnchor,{title:(0,i.__)("Permalink to this heading","markdown-renderer-for-github")}),ya=function(){return ba},Da=null,ka=null,wa=0,va=function(e){var t=1e3*Math.pow(2,e);return Math.min(t,8e3)},Fa=function(e){return new Promise(function(t){return setTimeout(t,e)})},Ca=function(){return window.wpGfmBuildLocalAssetUrl?window.wpGfmBuildLocalAssetUrl("assets/libs/shiki/shiki.min.js"):window.wpGfmConfig&&window.wpGfmConfig.pluginUrl?window.wpGfmConfig.pluginUrl+"assets/libs/shiki/shiki.min.js":"/wp-content/plugins/markdown-renderer-for-github/assets/libs/shiki/shiki.min.js"},Ea=function(){var e=ga(ca().m(function e(){var t,n,r,o,a,i,u,s=arguments;return ca().w(function(e){for(;;)switch(e.n){case 0:if(n=s.length>0&&void 0!==s[0]?s[0]:window.document,!(r=Qo(n)).shiki){e.n=1;break}return console.log("[WP GFM Editor] Shiki already loaded globally"),e.a(2,r.shiki);case 1:return(o=n.createElement("script")).src=Ca(),o.async=!0,console.log("[WP GFM Editor] Loading Shiki locally:",o.src),e.n=2,new Promise(function(e,t){o.onload=e,o.onerror=function(){return t(new Error("Script load failed: ".concat(o.src)))},n.head.appendChild(o)});case 2:if(r.shiki&&r.shiki.createHighlighter){e.n=3;break}throw new Error("Shiki global object not found after local asset load");case 3:return console.log("[WP GFM Editor] Shiki loaded successfully from local assets"),a=r.shiki.createHighlighter,i=((null===(t=window.wpGfmConfig)||void 0===t||null===(t=t.theme)||void 0===t?void 0:t.customThemes)||[]).filter(function(e){return e&&e.theme&&"object"===ha(e.theme)}).map(function(e){return e.theme}),e.n=4,a({themes:["github-dark","github-light"].concat(pa(i)),langs:["javascript","typescript","python","ruby","go","rust","bash","css","html","json","yaml","xml","sql","php","java","csharp","cpp","diff","markdown"]});case 4:return u=e.v,e.a(2,u)}},e)}));return function(){return e.apply(this,arguments)}}(),Aa=function(e){ba=ba.set({highlight:function(t,n,r){try{var o,a,i,u,s,l=function(e){var t=String(e||"").trim(),n=t.match(/\{([^}]*)\}/),r=n?sa(n[1]):[],o=t.replace(/\{[^}]*\}/g," "),a=/(?:^|\s)collapse(?=\s|$)/i.test(o),i=(o=o.replace(/(?:^|\s)collapse(?=\s|$)/i," ")).trim().split(/\s+/)[0]||"",u=i,s=null,l=i.indexOf(":");-1!==l&&(u=i.slice(0,l),s=i.slice(l+1)||null);var c="diff"===u.toLowerCase();return{lang:u,filename:s,highlightLines:r,isDiff:c,collapse:a}}((n||"")+(r?" ".concat(r):"")),c=l.lang;if(!c||""===c.trim())return"<pre><code>".concat(_a(t),"</code></pre>");var f=c.toLowerCase().trim(),p=ta()[f]||f;if("chart"===p||"chart-pro"===p)return'<pre><code class="language-'.concat(p,'">').concat(_a(t),"</code></pre>");if("math"===p)return'<pre><code class="language-math">'.concat(_a(t),"</code></pre>");if("plantuml"===p||"puml"===p)return'<pre><code class="language-'.concat(p,'">').concat(_a(t),"</code></pre>");var d,h=e.getLoadedLanguages();if("mermaid"===p)d="plaintext";else if(h.includes(p))d=p;else{var m=ua()[p];d=m&&h.includes(m)?m:"plaintext"}var g=null!==(o=null===(a=window.wpGfmConfig)||void 0===a||null===(a=a.theme)||void 0===a?void 0:a.shiki_theme)&&void 0!==o?o:null!==(i=(u=window).matchMedia)&&void 0!==i&&i.call(u,"(prefers-color-scheme: dark)").matches?"github-dark":"github-light";"auto"===g&&(g=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"github-dark":"github-light");var _=e.codeToHtml(t,{lang:d,theme:g}),b=null===(s=window.wpGfmConfig)||void 0===s?void 0:s.codeFeatures;return null!=b&&b.advancedSyntax?function(e,t){var n=[];return t.filename&&n.push('data-gfmr-filename="'.concat(function(e){return _a(String(e)).replace(/"/g,""")}(t.filename),'"')),t.highlightLines&&t.highlightLines.length&&n.push('data-gfmr-hl="'.concat(t.highlightLines.join(","),'"')),t.collapse&&n.push('data-gfmr-collapse="1"'),n.length?e.replace("<pre","<pre ".concat(n.join(" "))):e}(_,l):_}catch(e){return console.warn("[WP GFM Editor] Highlighting failed:",e),'<pre><code class="language-'.concat(n||"plaintext",'">').concat(_a(t),"</code></pre>")}}})},xa=function(){var e=ga(ca().m(function e(){var t,n=arguments;return ca().w(function(e){for(;;)switch(e.n){case 0:if(t=n.length>0&&void 0!==n[0]?n[0]:window.document,!Da){e.n=1;break}return e.a(2,Da);case 1:if(!ka){e.n=2;break}return e.a(2,ka);case 2:return ka=ga(ca().m(function e(){var n,r,o;return ca().w(function(e){for(;;)switch(e.p=e.n){case 0:if(!(wa<=3)){e.n=7;break}return e.p=1,e.n=2,Ea(t);case 2:if(!(n=e.v)){e.n=3;break}return Da=n,Aa(n),wa=0,e.a(2,Da);case 3:e.n=6;break;case 4:if(e.p=4,o=e.v,!(wa>=3)){e.n=5;break}return console.error("[WP GFM Editor] Failed to load Shiki after ".concat(wa+1," attempts:"),o),console.log("[WP GFM Editor] Available globals:",{wpGfmBuildLocalAssetUrl:ha(window.wpGfmBuildLocalAssetUrl),wpGfmConfig:ha(window.wpGfmConfig),wpGfmConfigContent:window.wpGfmConfig}),ka=null,e.a(2,null);case 5:return r=va(wa),console.warn("[WP GFM Editor] Shiki load attempt ".concat(wa+1," failed, retrying in ").concat(r,"ms..."),o.message),wa++,e.n=6,Fa(r);case 6:e.n=0;break;case 7:return e.a(2,null)}},e,null,[[1,4]])}))(),e.a(2,ka)}},e)}));return function(){return e.apply(this,arguments)}}(),Sa=function(){return Da};function Ba(e){return Ba="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ba(e)}function Ta(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function La(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ta(Object(n),!0).forEach(function(t){ja(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ta(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ja(e,t,n){return(t=function(e){var t=function(e){if("object"!=Ba(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=Ba(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Ba(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ma(e,t,n){var r=La({},e[t]||{}),o=Number(n);return Number.isInteger(o)&&o>0?r.featuredImage=o:delete r.featuredImage,La(La({},e),{},ja({},t,r))}function Oa(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Ia(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Oa(Object(n),!0).forEach(function(t){Ra(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Oa(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Ra(e,t,n){return(t=function(e){var t=function(e){if("object"!=Na(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=Na(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Na(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Na(e){return Na="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Na(e)}function Pa(e,t){var n=e?e[t]:void 0;return n&&"object"===Na(n)&&!Array.isArray(n)?n:{}}function qa(e,t,n,r){var o=Ia({},Pa(e,t)),a="string"==typeof r?r:"";return a?o[n]=a:delete o[n],Ia(Ia({},e||{}),{},Ra({},t,o))}var za=function(e,t){var n=t.presentProp,r=t.promiseProp,o=t.inject;if(e[n])return Promise.resolve(!0);if(e[r])return e[r];var a=o().finally(function(){delete e[r]});return e[r]=a,a},$a=new Set(["script","iframe","object","embed","link","meta","base","audio","video","animate","animatetransform","animatemotion","set","mpath","discard"]),Ga=new Set(["href","xlink:href","src","srcset","data","action","formaction"]),Ua=new Set(["http","https","mailto","tel","ftp"]),Ha=/^data:image\/(?:png|jpe?g|gif|webp);base64,/i,Wa=/^data:image\/(?:png|webp|jpe?g|gif);base64,[A-Za-z0-9+/]+={0,2}$/,Za=/expression\(|javascript:|vbscript:|@import|url\(\s*['"]?\s*(?:javascript|vbscript|data:text)/i,Va=function(e){var t=String(e).trim();if(""===t)return!0;if(/^[#/.]/.test(t))return!0;var n=t.match(/^([a-z][a-z0-9+.-]*):/i);if(!n)return!0;var r=n[1].toLowerCase();return"data"===r?Ha.test(t):Ua.has(r)},Ka=function(e){var t=e.tagName?e.tagName.toLowerCase():"";if($a.has(t))e.remove();else{if("style"===t){var n=e.textContent||"";Za.test(n)&&(e.textContent=n.replace(/@import[^;]*;?/gi,"").replace(/expression\([^)]*\)/gi,"").replace(/(?:javascript|vbscript):/gi,""))}for(var r=0,o=Array.from(e.attributes||[]);r<o.length;r++){var a=o[r],i=a.name.toLowerCase();i.startsWith("on")?e.removeAttribute(a.name):!Ga.has(i)||Va(a.value)?"style"===i&&Za.test(a.value)&&e.removeAttribute(a.name):e.removeAttribute(a.name)}for(var u=0,s=Array.from(e.children);u<s.length;u++){var l=s[u];Ka(l)}}},Ya=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1048576;if("string"!=typeof e||!Wa.test(e))return!1;var n=e.slice(e.indexOf(",")+1);return Math.floor(3*n.length/4)<=t},Ja="gfmr_diag_",Xa=function(){return Math.floor(Date.now()/1e3)},Qa=function(){try{var e;return"undefined"==typeof window||null!==(e=window.wpGfmConfig)&&void 0!==e&&e.disableDiagramPersistence?null:window.localStorage||null}catch(e){return null}},ei=function(e,t){return"".concat(Ja).concat(e,"_").concat(function(e){for(var t=0,n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t&=t;return Math.abs(t).toString(16)}(t),"_").concat(t.length)},ti=function(e,t){try{e.removeItem(t)}catch(e){}},ni=function(e,t){var n=Qa();if(!n||"string"!=typeof t)return null;var r,o,a=ei(e,t);try{r=n.getItem(a)}catch(e){return null}if(!r)return null;try{o=JSON.parse(r)}catch(e){return ti(n,a),null}if(!o||1!==o.v||o.k!==t||"number"!=typeof o.ts)return ti(n,a),null;if(Xa()-o.ts>604800)return ti(n,a),null;var i=function(e,t){return"string"!=typeof t||""===t?null:"mermaid"===e?function(e){if("string"!=typeof e||-1===e.indexOf("<svg"))return"";var t;try{t=(new DOMParser).parseFromString(e,"text/html")}catch(e){return""}var n=t&&t.body;if(!n)return"";var r=Array.from(n.children).filter(function(e){return e.tagName&&"svg"===e.tagName.toLowerCase()});if(0===r.length)return"";r.forEach(Ka);var o=r.map(function(e){return e.outerHTML}).join("");return!o||/<script/i.test(o)?"":o}(t)||null:"chart"===e&&Ya(t)?t:null}(e,o.p);return i||(ti(n,a),null)},ri=function(e,t,n){var r=Qa();if(r&&"string"==typeof t&&!("string"!=typeof n||""===n||n.length>204800)&&("chart"!==e||Ya(n))){var o=ei(e,t),a=JSON.stringify({v:1,k:t,ts:Xa(),p:n});try{r.setItem(o,a)}catch(e){!function(e){try{for(var t=[],n=0;n<e.length;n++){var r=e.key(n);r&&0===r.indexOf(Ja)&&t.push(r)}t.forEach(function(t){return ti(e,t)})}catch(e){}}(r);try{r.setItem(o,a)}catch(e){}}}};function oi(e){if(null!=e){var t=e["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],n=0;if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length))return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}throw new TypeError(ai(e)+" is not iterable")}function ai(e){return ai="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ai(e)}function ii(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ui(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ii(Object(n),!0).forEach(function(t){si(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ii(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function si(e,t,n){return(t=function(e){var t=function(e){if("object"!=ai(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=ai(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==ai(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function li(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return ci(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ci(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var _n=0,r=function(){};return{s:r,n:function(){return _n>=e.length?{done:!0}:{done:!1,value:e[_n++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,i=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){i=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(i)throw o}}}}function ci(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function fi(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",o=n.toStringTag||"@@toStringTag";function a(n,r,o,a){var s=r&&r.prototype instanceof u?r:u,l=Object.create(s.prototype);return pi(l,"_invoke",function(n,r,o){var a,u,s,l=0,c=o||[],f=!1,p={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,n){return a=t,u=0,s=e,p.n=n,i}};function d(n,r){for(u=n,s=r,t=0;!f&&l&&!o&&t<c.length;t++){var o,a=c[t],d=p.p,h=a[2];n>3?(o=h===r)&&(s=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=e):a[0]<=d&&((o=n<2&&d<a[1])?(u=0,p.v=r,p.n=a[1]):d<h&&(o=n<3||a[0]>r||r>h)&&(a[4]=n,a[5]=r,p.n=h,u=0))}if(o||n>1)return i;throw f=!0,r}return function(o,c,h){if(l>1)throw TypeError("Generator is already running");for(f&&1===c&&d(c,h),u=c,s=h;(t=u<2?e:s)||!f;){a||(u?u<3?(u>1&&(p.n=-1),d(u,s)):p.n=s:p.v=s);try{if(l=2,a){if(u||(o="next"),t=a[o]){if(!(t=t.call(a,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,u<2&&(u=0)}else 1===u&&(t=a.return)&&t.call(a),u<2&&(s=TypeError("The iterator does not provide a '"+o+"' method"),u=1);a=e}else if((t=(f=p.n<0)?s:n.call(r,p))!==i)break}catch(t){a=e,u=1,s=t}finally{l=1}}return{value:t,done:f}}}(n,o,a),!0),l}var i={};function u(){}function s(){}function l(){}t=Object.getPrototypeOf;var c=[][r]?t(t([][r]())):(pi(t={},r,function(){return this}),t),f=l.prototype=u.prototype=Object.create(c);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,pi(e,o,"GeneratorFunction")),e.prototype=Object.create(f),e}return s.prototype=l,pi(f,"constructor",l),pi(l,"constructor",s),s.displayName="GeneratorFunction",pi(l,o,"GeneratorFunction"),pi(f),pi(f,o,"Generator"),pi(f,r,function(){return this}),pi(f,"toString",function(){return"[object Generator]"}),(fi=function(){return{w:a,m:p}})()}function pi(e,t,n,r){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}pi=function(e,t,n,r){function a(t,n){pi(e,t,function(e){return this._invoke(t,n,e)})}t?o?o(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(a("next",0),a("throw",1),a("return",2))},pi(e,t,n,r)}function di(e,t,n,r,o,a,i){try{var u=e[a](i),s=u.value}catch(e){return void n(e)}u.done?t(s):Promise.resolve(s).then(r,o)}function hi(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var a=e.apply(t,n);function i(e){di(a,r,o,i,u,"next",e)}function u(e){di(a,r,o,i,u,"throw",e)}i(void 0)})}}var mi=new WeakMap,gi=function(){var e,t,n,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.wpGfmConfig||{},o=(null==r||null===(e=r.mermaid)||void 0===e?void 0:e.theme)||"auto";if("dark"===o)return"dark";if("light"===o)return"default";var a,i,u=(null==r||null===(t=r.theme)||void 0===t?void 0:t.shiki_theme)||"auto";if("auto"===u&&(u=null!==(a=(i=window).matchMedia)&&void 0!==a&&a.call(i,"(prefers-color-scheme: dark)").matches?"github-dark":"github-light"),"github-dark"===u)return"dark";if("github-light"===u)return"default";var s=null==r||null===(n=r.theme)||void 0===n?void 0:n.customThemes,l=Array.isArray(s)?s.find(function(e){return(null==e?void 0:e.name)===u}):null;return"dark"===(null==l?void 0:l.type)?"dark":"default"},_i=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window.wpGfmConfig||{},n="string"==typeof e?e.trimStart():"";return!n||n.startsWith("---")||/^%%\{\s*init\b/i.test(n)?e:'%%{init: {"theme":"'.concat(gi(t),'"}}%%\n').concat(e)},bi=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:50,t=new Map;return mi.set(t,e),t},yi=function(e,t,n){var r;if(e){var o=null!==(r=mi.get(e))&&void 0!==r?r:50;e.size>=o&&!e.has(t)&&e.delete(e.keys().next().value),e.set(t,n)}},Di=function(){var e=hi(fi().m(function e(t,n,r){var o,a;return fi().w(function(e){for(;;)switch(e.n){case 0:if(!(o=null==t?void 0:t.get(n))){e.n=1;break}return e.a(2,o);case 1:return e.n=2,r();case 2:return a=e.v,yi(t,n,a),e.a(2,a)}},e)}));return function(_x,t,n){return e.apply(this,arguments)}}(),ki=function(e,t,n,r){if(!e)return[];var o,a=li(t);try{for(a.s();!(o=a.n()).done;){var i=o.value,u=e.querySelectorAll(i);if(u.length>0)return Array.from(u)}}catch(e){a.e(e)}finally{a.f()}var s,l=[],c=li(n);try{for(c.s();!(s=c.n()).done;){var f,p=s.value,d=li(e.querySelectorAll(p));try{for(d.s();!(f=d.n()).done;){var h=f.value;r(h)&&l.push(h)}}catch(e){d.e(e)}finally{d.f()}if(l.length>0)break}}catch(e){c.e(e)}finally{c.f()}return l},wi=function(e){return function(e){if(!e)return!1;var t=Qe.some(function(t){return e.startsWith(t)})||et.some(function(t){return e.includes(t)}),n=tt.some(function(t){return e.includes(t)});return t&&!n}((e.textContent||"").trim().replace(/\s+/g," "))},vi=function(e){return t=(e.textContent||"").trim(),n=(t||"").trim(),ot.some(function(e){return n.startsWith(e)});var t,n},Fi=function(e){return ki(e,nt,rt,wi).filter(function(e){return!function(e){return"function"==typeof e.closest&&null!==e.closest("[data-mermaid-rendered]")}(e)})},Ci="code.language-chart:not([data-gfmr-chart-processed]), code.language-chart-pro:not([data-gfmr-chart-processed])",Ei=function(e){var t=e||("undefined"!=typeof window?window.document:null);if(!t)return Promise.resolve(!1);var n=Qo(t);return za(n,{presentProp:"Chart",promiseProp:"__gfmrChartLoadPromise",inject:function(){var e,n=(null===(e=window.wpGfmConfig)||void 0===e?void 0:e.pluginUrl)||"/wp-content/plugins/markdown-renderer-for-github/";return new Promise(function(e,r){var o=t.createElement("script");o.src=n+"assets/libs/chartjs/chart.umd.min.js",o.onload=e,o.onerror=r,t.head.appendChild(o)}).then(function(){return dt("[Chart.js] Library loaded"),!0}).catch(function(e){return console.warn("[WP GFM Editor] Failed to load Chart.js:",e),!1})}})},Ai=ui({mermaid:"mermaid",chart:"chart","chart-pro":"chart",chartjs:"chart",plantuml:"plantuml",puml:"plantuml",uml:"plantuml"},Object.fromEntries(st.map(function(e){return[e,"plantuml"]}))),xi=0,Si=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.cloneNode(!0);n.querySelectorAll("span").forEach(function(e){var t=document.createTextNode(e.textContent);e.parentNode.replaceChild(t,e)});var r=n.textContent||n.innerText||"";return r=r.replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&").replace(/"/g,'"').replace(/'/g,"'"),t.decodeNbsp&&(r=r.replace(/ /g," ")),t.trim?r.trim():r},Bi=function(e){return Si(e,{trim:!0,decodeNbsp:!0})},Ti=Si,Li=function(e){if(!e||!e.includes('class="shiki"'))return e;var t=document.createElement("div");return t.innerHTML=e,t.querySelectorAll("pre.shiki").forEach(function(e){var t=e.querySelector("code");if(t){var n=t.querySelectorAll(".line"),r=!1;n.forEach(function(e){var t=(e.textContent||"").trim();t?t.startsWith("+")&&!t.startsWith("+++")?(e.classList.add("diff","add"),r=!0):t.startsWith("-")&&!t.startsWith("---")?(e.classList.add("diff","remove"),r=!0):t.startsWith("@@")&&(e.classList.add("diff","hunk"),r=!0):e.remove()}),r&&e.classList.add("has-diff")}}),t.innerHTML},ji=function(){var e=hi(fi().m(function e(t,n){var r,o,a,i,u,s,l,c,f,p,d,h,m,g,_,b,y,D,k=arguments;return fi().w(function(e){for(;;)switch(e.n){case 0:if(r=k.length>2&&void 0!==k[2]?k[2]:null,t){e.n=1;break}return e.a(2,0);case 1:if(o=n||t.ownerDocument||window.document,a=Qo(o),0!==(i=t.querySelectorAll(Ci)).length){e.n=2;break}return e.a(2,0);case 2:return dt("[Chart.js] Found ".concat(i.length," chart blocks")),e.n=3,Ei(o);case 3:if(e.v){e.n=4;break}return e.a(2,0);case 4:u=function(e,t){var n=ui({},e);for(var r in t)t[r]&&"object"===ai(t[r])&&!Array.isArray(t[r])?n[r]=u(e[r]||{},t[r]):void 0===e[r]&&(n[r]=t[r]);return n},s=function(){return{isDark:!1,colors:{text:"#24292f",grid:"#d0d7de",border:"#d0d7de",bg:"#ffffff"}}}(),l=!1,c=function(){var e,t;l||(l=!0,a.Chart.defaults.color=s.colors.text,a.Chart.defaults.borderColor=s.colors.border,a.Chart.defaults.scale&&(a.Chart.defaults.scale.grid=a.Chart.defaults.scale.grid||{},a.Chart.defaults.scale.grid.color=s.colors.grid,a.Chart.defaults.scale.ticks=a.Chart.defaults.scale.ticks||{},a.Chart.defaults.scale.ticks.color=s.colors.text),null!==(e=a.Chart.defaults.plugins)&&void 0!==e&&null!==(e=e.legend)&&void 0!==e&&e.labels&&(a.Chart.defaults.plugins.legend.labels.color=s.colors.text),null!==(t=a.Chart.defaults.plugins)&&void 0!==t&&t.title&&(a.Chart.defaults.plugins.title.color=s.colors.text))},f=function(e){var t=o.createElement("div");return t.className="gfmr-chart-container gfmr-chart-image",t.style.cssText="position: relative; width: 100%; max-width: 800px; margin: 1rem auto; padding: 1rem; display: flex; justify-content: center; box-sizing: border-box;",t.innerHTML='<img src="'.concat(e,'" alt="Chart" style="max-width: 100%; height: auto;" />'),t},p=function(e,t){var n=e.closest("pre")||e.parentElement;null!=n&&n.parentNode&&n.parentNode.replaceChild(t,n)},d={responsive:!0,maintainAspectRatio:!0,animation:!1,color:s.colors.text,borderColor:s.colors.border,scales:{x:{grid:{color:s.colors.grid},ticks:{color:s.colors.text}},y:{grid:{color:s.colors.grid},ticks:{color:s.colors.text}}},plugins:{legend:{labels:{color:s.colors.text}},title:{color:s.colors.text},tooltip:{backgroundColor:"rgba(255, 255, 255, 0.95)",titleColor:s.colors.text,bodyColor:s.colors.text,borderColor:s.colors.border,borderWidth:1}}},h=function(){var e=hi(fi().m(function e(t){var n,i,s,l;return fi().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,t.setAttribute("data-gfmr-chart-processed","true"),n=Bi(t),dt("[Chart.js] Extracted content:",n.substring(0,100)),e.n=1,Di(r,n,hi(fi().m(function e(){var t,i,s,l,f,p,h,m;return fi().w(function(e){for(;;)switch(e.p=e.n){case 0:if(!(t=r?ni("chart",n):null)){e.n=1;break}return e.a(2,t);case 1:return(i=JSON.parse(n)).options=u(d,i.options||{}),(s=o.createElement("div")).style.width="600px",s.style.height="400px",s.style.position="absolute",s.style.left="-9999px",o.body.appendChild(s),l=o.createElement("canvas"),s.appendChild(l),c(),f=null,e.p=2,f=new a.Chart(l.getContext("2d"),i),p=f.toBase64Image("image/png",1),r&&ri("chart",n,p),e.a(2,p);case 3:return e.p=3,null===(h=f)||void 0===h||h.destroy(),null===(m=s.parentNode)||void 0===m||m.removeChild(s),e.f(3);case 4:return e.a(2)}},e,null,[[2,,3,4]])})));case 1:return i=e.v,p(t,f(i)),e.a(2,!0);case 2:return e.p=2,l=e.v,console.warn("[WP GFM Editor] Chart render error:",l),(s=o.createElement("div")).className="gfmr-chart-error",s.innerHTML='<div class="gfmr-chart-error-content"><strong>Chart Error:</strong> '.concat(l.message,"</div>"),p(t,s),e.a(2,!0)}},e,null,[[0,2]])}));return function(t){return e.apply(this,arguments)}}(),m=4,g=0,_=Array.from(i),b=0;case 5:if(!(b<_.length)){e.n=8;break}return y=_.slice(b,b+m),e.n=6,Promise.allSettled(y.map(h));case 6:D=e.v,g+=D.filter(function(e){return"fulfilled"===e.status&&e.value}).length;case 7:b+=m,e.n=5;break;case 8:return e.a(2,g)}},e)}));return function(t,n){return e.apply(this,arguments)}}(),Mi=function(){var e=hi(fi().m(function e(t,n){var r,o,a,i,u,s,l,c,f,p,d,h=arguments;return fi().w(function(e){for(;;)switch(e.n){case 0:if(o=h.length>2&&void 0!==h[2]?h[2]:"editor",a=h.length>3&&void 0!==h[3]?h[3]:null,i=h.length>4&&void 0!==h[4]?h[4]:null,dt("processMermaidBlocksLocal called"),dt("Container HTML preview:",null==t||null===(r=t.innerHTML)||void 0===r?void 0:r.substring(0,200)),t){e.n=1;break}return e.a(2,0);case 1:return u=t.ownerDocument||window.document,s=Qo(u),e.n=2,n();case 2:if(e.v){e.n=3;break}return dt("Mermaid not available"),e.a(2,0);case 3:if(dt("Mermaid is available"),l=Fi(t),dt("Mermaid detection result: ".concat(l.length," blocks")),0!==l.length){e.n=4;break}return e.a(2,0);case 4:c=function(e,t){e.innerHTML=t,e.setAttribute("data-mermaid-rendered","true"),e.setAttribute("data-mermaid-context",o)},f=0,p=fi().m(function e(){var t,n,r,o,p,h,m,g,_,b,y,D;return fi().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t=l[d],e.p=1,n=Ti(t),(r=t.parentElement)&&null!=n&&n.trim()){e.n=2;break}return e.a(2,1);case 2:return(o=u.createElement("div")).className="gfmr-mermaid-container",o.style.cssText=mt(a||"transparent"),p="gfmr-editor-mermaid-".concat(++xi,"-").concat(d),(h=u.createElement("div")).id=p,h.className="gfmr-mermaid",o.appendChild(h),r.parentNode.replaceChild(o,r),m=n.trim(),g=_i(m),_=g,e.p=3,e.n=4,Di(i,_,hi(fi().m(function e(){var t,n,r;return fi().w(function(e){for(;;)switch(e.n){case 0:if(!(t=i?ni("mermaid",_):null)){e.n=1;break}return e.a(2,t);case 1:return e.n=2,s.mermaid.render(p+"-svg",g);case 2:if(n=e.v,r="",!n||"object"!==ai(n)||!n.svg){e.n=3;break}r=n.svg,e.n=5;break;case 3:if("string"!=typeof n){e.n=4;break}r=n,e.n=5;break;case 4:throw new Error("Invalid render result format");case 5:return i&&ri("mermaid",_,r),e.a(2,r)}},e)})));case 4:b=e.v,c(h,b),f++,e.n=6;break;case 5:e.p=5,y=e.v,console.error("[WP GFM Editor] ❌ Render error for block ".concat(d,":"),y),h.innerHTML=gt(y.message,n);case 6:e.n=8;break;case 7:e.p=7,D=e.v,console.error("[WP GFM Editor] ❌ Processing error for block ".concat(d,":"),D);case 8:return e.a(2)}},e,null,[[3,5],[1,7]])}),d=0;case 5:if(!(d<l.length)){e.n=8;break}return e.d(oi(p()),6);case 6:if(!e.v){e.n=7;break}return e.a(3,7);case 7:d++,e.n=5;break;case 8:return e.a(2,f)}},e)}));return function(t,n){return e.apply(this,arguments)}}(),Oi=function(){var e=hi(fi().m(function e(t,n,r){var o,a,i,u,s,l,c,f,p,d=arguments;return fi().w(function(e){for(;;)switch(e.p=e.n){case 0:return o=d.length>3&&void 0!==d[3]?d[3]:"",(a=new FormData).append("action","gfmr_render_plantuml"),a.append("nonce",n.nonce),a.append("content",t),o&&a.append("lang",o),i=new AbortController,u=setTimeout(function(){return i.abort()},1e4),s=r&&ft?AbortSignal.any([r,i.signal]):r||i.signal,e.p=1,e.n=2,fetch(n.ajaxUrl,{method:"POST",body:a,signal:s});case 2:if((c=e.v).ok){e.n=3;break}throw new Error("HTTP ".concat(c.status));case 3:return e.n=4,c.json();case 4:if((f=e.v).success){e.n=5;break}throw new Error((null===(p=f.data)||void 0===p?void 0:p.message)||"PlantUML render failed");case 5:return e.a(2,(null===(l=f.data)||void 0===l?void 0:l.svg)||f.data||"");case 6:return e.p=6,clearTimeout(u),e.f(6);case 7:return e.a(2)}},e,null,[[1,,6,7]])}));return function(t,n,r){return e.apply(this,arguments)}}(),Ii=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=(null==t?void 0:t.c4Labels)||{},o=e.createElement("div");o.className="gfmr-c4-blocked";var a=e.createElement("div");a.className="gfmr-c4-upgrade-prompt";var i=e.createElement("h4");i.textContent=r.title||"C4 Model diagrams are a Pro feature",a.appendChild(i);var u=e.createElement("p");u.textContent=r.body||"C4 architecture diagrams require the Pro version.",a.appendChild(u);var s=(null==t?void 0:t.c4UpgradeUrl)||"";if(s){var l=e.createElement("a");l.className="gfmr-upgrade-button",l.href=s,l.target="_blank",l.rel="noopener noreferrer",l.textContent=r.cta||"Learn more",a.appendChild(l)}if(o.appendChild(a),n){var c=e.createElement("details");c.className="gfmr-c4-source";var f=e.createElement("summary");f.textContent=r.source||"Original Content",c.appendChild(f);var p=e.createElement("pre"),d=e.createElement("code");d.textContent=n,p.appendChild(d),c.appendChild(p),o.appendChild(c)}return o},Ri=function(){var e=hi(fi().m(function e(t,n){var r,o,a,i,u,s,l,c,f,p=arguments;return fi().w(function(e){for(;;)switch(e.n){case 0:if(o=p.length>2&&void 0!==p[2]?p[2]:null,null!=(a=null===(r=window.wpGfmConfig)||void 0===r?void 0:r.plantuml)&&a.enabled){e.n=1;break}return e.a(2,0);case 1:if(t){e.n=2;break}return e.a(2,0);case 2:if(i=t.ownerDocument||window.document,u=ki(t,it,ut,vi).map(function(e){return{el:e,lang:""}}),s=Array.from(t.querySelectorAll(lt)).map(function(e){return{el:e,lang:ct(e)||"c4"}}),0!==(l=u.concat(s)).length){e.n=3;break}return e.a(2,0);case 3:return dt("[PlantUML] Found ".concat(u.length," block(s), ").concat(s.length," C4 block(s)")),c=0,f=new Map,e.n=4,Promise.allSettled(l.map(function(){var e=hi(fi().m(function e(t){var r,u,s,l,p,d,h,m,g,_,b,y,D,k,w,v,F,C;return fi().w(function(e){for(;;)switch(e.p=e.n){case 0:if(u=t.el,s=t.lang,!u.getAttribute("data-gfmr-plantuml-processed")){e.n=1;break}return e.a(2);case 1:if(u.setAttribute("data-gfmr-plantuml-processed","1"),l=Si(u).trim()){e.n=2;break}return e.a(2);case 2:if(p=u.closest("pre")||u.parentElement){e.n=3;break}return e.a(2);case 3:if(!s||!1!==a.c4Enabled){e.n=4;break}return null===(d=p.parentNode)||void 0===d||d.replaceChild(Ii(i,a,l),p),c++,e.a(2);case 4:if(s||_t(l)){e.n=5;break}return(m=i.createElement("div")).className="gfmr-plantuml-placeholder",null===(h=p.parentNode)||void 0===h||h.replaceChild(m,p),e.a(2);case 5:return(g=i.createElement("div")).className="gfmr-plantuml-loading",null===(r=p.parentNode)||void 0===r||r.insertBefore(g,p.nextSibling),_=s?"".concat(s,"\n").concat(l):l,e.p=6,e.n=7,Di(o,_,function(){var e=f.get(_);return e||(e=Oi(l,a,n,s).finally(function(){return f.delete(_)}),f.set(_,e)),e});case 7:y=e.v,(D=i.createElement("div")).className="gfmr-plantuml-container",(k=i.createElement("div")).className="gfmr-plantuml-rendered",k.innerHTML=y,D.appendChild(k),null===(b=p.parentNode)||void 0===b||b.replaceChild(D,p),c++,e.n=10;break;case 8:if(e.p=8,"AbortError"!==(C=e.v).name){e.n=9;break}return e.a(2);case 9:console.warn("[WP GFM Editor] PlantUML render error:",C),(v=i.createElement("div")).className="gfmr-plantuml-error",v.textContent=C.message||"PlantUML render failed",null===(w=p.parentNode)||void 0===w||w.replaceChild(v,p),c++;case 10:return e.p=10,null===(F=g.parentNode)||void 0===F||F.removeChild(g),e.f(10);case 11:return e.a(2)}},e,null,[[6,8,10,11]])}));return function(t){return e.apply(this,arguments)}}()));case 4:return e.a(2,c)}},e)}));return function(t,n){return e.apply(this,arguments)}}();function Ni(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",o=n.toStringTag||"@@toStringTag";function a(n,r,o,a){var s=r&&r.prototype instanceof u?r:u,l=Object.create(s.prototype);return Pi(l,"_invoke",function(n,r,o){var a,u,s,l=0,c=o||[],f=!1,p={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,n){return a=t,u=0,s=e,p.n=n,i}};function d(n,r){for(u=n,s=r,t=0;!f&&l&&!o&&t<c.length;t++){var o,a=c[t],d=p.p,h=a[2];n>3?(o=h===r)&&(s=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=e):a[0]<=d&&((o=n<2&&d<a[1])?(u=0,p.v=r,p.n=a[1]):d<h&&(o=n<3||a[0]>r||r>h)&&(a[4]=n,a[5]=r,p.n=h,u=0))}if(o||n>1)return i;throw f=!0,r}return function(o,c,h){if(l>1)throw TypeError("Generator is already running");for(f&&1===c&&d(c,h),u=c,s=h;(t=u<2?e:s)||!f;){a||(u?u<3?(u>1&&(p.n=-1),d(u,s)):p.n=s:p.v=s);try{if(l=2,a){if(u||(o="next"),t=a[o]){if(!(t=t.call(a,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,u<2&&(u=0)}else 1===u&&(t=a.return)&&t.call(a),u<2&&(s=TypeError("The iterator does not provide a '"+o+"' method"),u=1);a=e}else if((t=(f=p.n<0)?s:n.call(r,p))!==i)break}catch(t){a=e,u=1,s=t}finally{l=1}}return{value:t,done:f}}}(n,o,a),!0),l}var i={};function u(){}function s(){}function l(){}t=Object.getPrototypeOf;var c=[][r]?t(t([][r]())):(Pi(t={},r,function(){return this}),t),f=l.prototype=u.prototype=Object.create(c);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,Pi(e,o,"GeneratorFunction")),e.prototype=Object.create(f),e}return s.prototype=l,Pi(f,"constructor",l),Pi(l,"constructor",s),s.displayName="GeneratorFunction",Pi(l,o,"GeneratorFunction"),Pi(f),Pi(f,o,"Generator"),Pi(f,r,function(){return this}),Pi(f,"toString",function(){return"[object Generator]"}),(Ni=function(){return{w:a,m:p}})()}function Pi(e,t,n,r){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}Pi=function(e,t,n,r){function a(t,n){Pi(e,t,function(e){return this._invoke(t,n,e)})}t?o?o(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(a("next",0),a("throw",1),a("return",2))},Pi(e,t,n,r)}function qi(e,t,n,r,o,a,i){try{var u=e[a](i),s=u.value}catch(e){return void n(e)}u.done?t(s):Promise.resolve(s).then(r,o)}var zi="code.language-math:not([data-gfmr-math-processed]), pre.language-math > code:not([data-gfmr-math-processed])",$i=[/\$\$[\s\S]+?\$\$/,/(?<!\$)\$(?!\$)[^$\n]+\$(?!\$)/,/\\\([^)]+\\\)/,/\\\[[\s\S]+?\\\]/,/\[latex\][\s\S]*?\[\/latex\]/i],Gi=function(e){var t;if("function"==typeof window.wpGfmBuildAssetUrl)return window.wpGfmBuildAssetUrl(e);var n=(null===(t=window.wpGfmConfig)||void 0===t?void 0:t.pluginUrl)||"/wp-content/plugins/markdown-renderer-for-github/";return"".concat(n.replace(/\/+$/,""),"/").concat(e.replace(/^\/+/,""))},Ui=function(e,t){var n=null==e?void 0:e.ownerDocument;if(!e||!n)return[];for(var r,o=n.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode:function(e){return function(e){var t;return Boolean(null===(t=e.parentElement)||void 0===t?void 0:t.closest("code, pre, style, script, svg, math, textarea, noscript, .katex, .gfmr-math"))}(e)?NodeFilter.FILTER_REJECT:t(e.textContent)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}}),a=[];null!==(r=o.nextNode());)a.push(r);return a},Hi=function(e,t,n,r){var o,a=n.tagName,i=n.className,u=n.displayMode,s=e.textContent,l=e.ownerDocument,c=[],f=0,p=0;for(t.lastIndex=0;null!==(o=t.exec(s));){o.index>f&&c.push(l.createTextNode(s.slice(f,o.index)));var d=l.createElement(a);d.className=i;try{r.render(o[1].trim(),d,{displayMode:u,throwOnError:!1,output:"html"})}catch(e){console.warn("[WP GFM Editor] KaTeX render error:",e),d.textContent=o[0]}c.push(d),f=t.lastIndex,p++}return 0===p?0:(f<s.length&&c.push(l.createTextNode(s.slice(f))),c.forEach(function(t){e.parentNode.insertBefore(t,e)}),e.parentNode.removeChild(e),p)},Wi=function(e,t){var n=e.querySelectorAll(zi),r=e.ownerDocument||window.document,o=0;return n.forEach(function(e){e.setAttribute("data-gfmr-math-processed","true");var n=(e.textContent||"").trim();if(n){var a=r.createElement("div");a.className="gfmr-math gfmr-math-block";try{t.render(n,a,{displayMode:!0,throwOnError:!1,output:"html"})}catch(e){console.warn("[WP GFM Editor] KaTeX fence render error:",e),a.textContent=n}var i=e.closest("pre")||e;i.parentNode&&(i.parentNode.replaceChild(a,i),o++)}}),o},Zi=function(e){var t;return!!e&&(!(null===(t=e.querySelector)||void 0===t||!t.call(e,zi))||Ui(e,function(e){return $i.some(function(t){return t.test(e)})}).length>0)},Vi=function(e){var t=e||("undefined"!=typeof window?window.document:null);if(!t)return Promise.resolve(!1);var n=Qo(t);return za(n,{presentProp:"katex",promiseProp:"__gfmrKaTeXLoadPromise",inject:function(){return new Promise(function(e){if(!t.querySelector('link[href*="katex"]')){var n=t.createElement("link");n.rel="stylesheet",n.href=Gi("assets/libs/katex/katex.min.css"),t.head.appendChild(n)}var r=t.createElement("script");r.src=Gi("assets/libs/katex/katex.min.js"),r.onload=function(){return e(!0)},r.onerror=function(t){console.warn("[WP GFM Editor] Failed to load KaTeX:",t),e(!1)},t.head.appendChild(r)}).then(function(){return Boolean(n.katex)})}})},Ki=function(){var e,t=(e=Ni().m(function e(t){var n,r,o,a;return Ni().w(function(e){for(;;)switch(e.n){case 0:if(Zi(t)){e.n=1;break}return e.a(2,0);case 1:return n=t.ownerDocument||window.document,e.n=2,Vi(n);case 2:if(r=e.v,o=Qo(n),r&&o.katex){e.n=3;break}return e.a(2,0);case 3:return a=0,a+=Wi(t,o.katex),Ui(t,function(e){return/\$\$[\s\S]+?\$\$/.test(e)}).forEach(function(e){a+=Hi(e,/\$\$([\s\S]+?)\$\$/g,{tagName:"div",className:"gfmr-math gfmr-math-block",displayMode:!0},o.katex)}),Ui(t,function(e){return/(?<!\$)\$(?!\$)[^$\n]+\$(?!\$)/.test(e)}).forEach(function(e){a+=Hi(e,/(?<!\$)\$(?!\$)([^$\n]+)\$(?!\$)/g,{tagName:"span",className:"gfmr-math gfmr-math-inline",displayMode:!1},o.katex)}),Ui(t,function(e){return/\\\([^)]+\\\)/.test(e)}).forEach(function(e){a+=Hi(e,/\\\(([^)]+)\\\)/g,{tagName:"span",className:"gfmr-math gfmr-math-inline",displayMode:!1},o.katex)}),Ui(t,function(e){return/\\\[[\s\S]+?\\\]/.test(e)}).forEach(function(e){a+=Hi(e,/\\\[([\s\S]+?)\\\]/g,{tagName:"div",className:"gfmr-math gfmr-math-block",displayMode:!0},o.katex)}),Ui(t,function(e){return/\[latex\][\s\S]*?\[\/latex\]/i.test(e)}).forEach(function(e){a+=Hi(e,/\[latex\]([\s\S]*?)\[\/latex\]/gi,{tagName:"span",className:"gfmr-math gfmr-math-shortcode",displayMode:!1},o.katex)}),e.a(2,a)}},e)}),function(){var t=this,n=arguments;return new Promise(function(r,o){var a=e.apply(t,n);function i(e){qi(a,r,o,i,u,"next",e)}function u(e){qi(a,r,o,i,u,"throw",e)}i(void 0)})});return function(_x){return t.apply(this,arguments)}}();function Yi(e){return function(e){if(Array.isArray(e))return Qi(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Xi(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ji(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,u=[],s=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(u.push(r.value),u.length!==t);s=!0);}catch(e){l=!0,o=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw o}}return u}}(e,t)||Xi(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Xi(e,t){if(e){if("string"==typeof e)return Qi(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Qi(e,t):void 0}}function Qi(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function eu(e){var t=e.onAdd,n=e.onClose,r=e.existingLanguages,o=Ji((0,l.useState)(""),2),a=o[0],u=o[1],c=Ji((0,l.useState)(""),2),f=c[0],p=c[1],d=Ji((0,l.useState)(""),2),h=d[0],m=d[1],g=Ji((0,l.useState)(""),2),_=g[0],b=g[1],y=Je.filter(function(e){return!r.includes(e.value)});return React.createElement(s.Modal,{title:(0,i.__)("Add Language","markdown-renderer-for-github"),onRequestClose:n,className:"gfmr-add-language-modal"},React.createElement("div",{style:{minWidth:"300px"}},React.createElement(s.SelectControl,{label:(0,i.__)("Language","markdown-renderer-for-github"),value:a,options:[{value:"",label:(0,i.__)("Select...","markdown-renderer-for-github")}].concat(Yi(y),[{value:"custom",label:(0,i.__)("Other (enter code)","markdown-renderer-for-github")}]),onChange:function(e){u(e),b("")}}),"custom"===a&&React.createElement(s.TextControl,{label:(0,i.__)("Language Code (e.g., pt, nl, ar)","markdown-renderer-for-github"),value:f,onChange:function(e){p(e),b("")},maxLength:5,help:(0,i.__)('Use ISO 639-1 format (2 letters, e.g., "pt" for Portuguese)',"markdown-renderer-for-github")}),r.length>0&&React.createElement(s.SelectControl,{label:(0,i.__)("Copy content from","markdown-renderer-for-github"),value:h,options:[{value:"",label:(0,i.__)("Start empty","markdown-renderer-for-github")}].concat(Yi(r.map(function(e){return{value:e,label:e.toUpperCase()}}))),onChange:m}),_&&React.createElement("p",{style:{color:"#d63638",marginTop:"8px"}},_),React.createElement("div",{style:{marginTop:"16px",display:"flex",gap:"8px",justifyContent:"flex-end"}},React.createElement(s.Button,{variant:"secondary",onClick:n},(0,i.__)("Cancel","markdown-renderer-for-github")),React.createElement(s.Button,{variant:"primary",onClick:function(){var e="custom"===a?f.toLowerCase().trim():a;e?Xe(e)?r.includes(e)?b((0,i.__)("This language already exists","markdown-renderer-for-github")):t(e,h):b((0,i.__)("Invalid language code format","markdown-renderer-for-github")):b((0,i.__)("Please select a language","markdown-renderer-for-github"))}},(0,i.__)("Add","markdown-renderer-for-github")))))}function tu(e){return function(e){if(Array.isArray(e))return du(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||pu(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function nu(e){return nu="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},nu(e)}function ru(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",o=n.toStringTag||"@@toStringTag";function a(n,r,o,a){var s=r&&r.prototype instanceof u?r:u,l=Object.create(s.prototype);return ou(l,"_invoke",function(n,r,o){var a,u,s,l=0,c=o||[],f=!1,p={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,n){return a=t,u=0,s=e,p.n=n,i}};function d(n,r){for(u=n,s=r,t=0;!f&&l&&!o&&t<c.length;t++){var o,a=c[t],d=p.p,h=a[2];n>3?(o=h===r)&&(s=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=e):a[0]<=d&&((o=n<2&&d<a[1])?(u=0,p.v=r,p.n=a[1]):d<h&&(o=n<3||a[0]>r||r>h)&&(a[4]=n,a[5]=r,p.n=h,u=0))}if(o||n>1)return i;throw f=!0,r}return function(o,c,h){if(l>1)throw TypeError("Generator is already running");for(f&&1===c&&d(c,h),u=c,s=h;(t=u<2?e:s)||!f;){a||(u?u<3?(u>1&&(p.n=-1),d(u,s)):p.n=s:p.v=s);try{if(l=2,a){if(u||(o="next"),t=a[o]){if(!(t=t.call(a,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,u<2&&(u=0)}else 1===u&&(t=a.return)&&t.call(a),u<2&&(s=TypeError("The iterator does not provide a '"+o+"' method"),u=1);a=e}else if((t=(f=p.n<0)?s:n.call(r,p))!==i)break}catch(t){a=e,u=1,s=t}finally{l=1}}return{value:t,done:f}}}(n,o,a),!0),l}var i={};function u(){}function s(){}function l(){}t=Object.getPrototypeOf;var c=[][r]?t(t([][r]())):(ou(t={},r,function(){return this}),t),f=l.prototype=u.prototype=Object.create(c);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,ou(e,o,"GeneratorFunction")),e.prototype=Object.create(f),e}return s.prototype=l,ou(f,"constructor",l),ou(l,"constructor",s),s.displayName="GeneratorFunction",ou(l,o,"GeneratorFunction"),ou(f),ou(f,o,"Generator"),ou(f,r,function(){return this}),ou(f,"toString",function(){return"[object Generator]"}),(ru=function(){return{w:a,m:p}})()}function ou(e,t,n,r){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}ou=function(e,t,n,r){function a(t,n){ou(e,t,function(e){return this._invoke(t,n,e)})}t?o?o(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(a("next",0),a("throw",1),a("return",2))},ou(e,t,n,r)}function au(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function iu(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?au(Object(n),!0).forEach(function(t){uu(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):au(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function uu(e,t,n){return(t=su(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function su(e){var t=function(e){if("object"!=nu(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=nu(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==nu(t)?t:t+""}function lu(e,t,n,r,o,a,i){try{var u=e[a](i),s=u.value}catch(e){return void n(e)}u.done?t(s):Promise.resolve(s).then(r,o)}function cu(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var a=e.apply(t,n);function i(e){lu(a,r,o,i,u,"next",e)}function u(e){lu(a,r,o,i,u,"throw",e)}i(void 0)})}}function fu(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,u=[],s=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(u.push(r.value),u.length!==t);s=!0);}catch(e){l=!0,o=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw o}}return u}}(e,t)||pu(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function pu(e,t){if(e){if("string"==typeof e)return du(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?du(e,t):void 0}}function du(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var hu=function(e){var t,n=(null===(t=window.wpGfmConfig)||void 0===t?void 0:t.codeFeatures)||{},r="on"===e||"off"!==e&&!!n.lineNumbersDefault;return{showLineNumbers:!!n.lineNumbers&&r,advancedSyntax:!!n.advancedSyntax,collapseLines:n.collapseLines,labels:n.labels}},mu=["content","html"];function gu(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function _u(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?gu(Object(n),!0).forEach(function(t){bu(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):gu(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function bu(e,t,n){return(t=function(e){var t=function(e){if("object"!=yu(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=yu(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==yu(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function yu(e){return yu="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yu(e)}const Du=[{attributes:{content:{type:"string",default:""},html:{type:"string",default:""},mermaidBgColor:{type:"string",default:"transparent"},shikiTheme:{type:"string",default:""},showFrontmatter:{type:"boolean",default:!1},frontmatterData:{type:"object",default:{}}},isEligible:function(e){var t=!e.languages||"object"===yu(e.languages)&&0===Object.keys(e.languages).length,n=e.content||e.html;return t&&n},save:function(e){var t=e.attributes,n=t.content,r=t.html,o=t.mermaidBgColor,a=t.shikiTheme,i=(t.showFrontmatter,o||"transparent"),s=a||"",l=u.useBlockProps.save({className:"gfmr-markdown-container"});return React.createElement("div",l,React.createElement("div",{className:"gfmr-markdown-source",style:{display:"none",visibility:"hidden",position:"absolute",left:"-9999px",top:"-9999px",width:"1px",height:"1px",overflow:"hidden"},"aria-hidden":"true"},n),React.createElement("div",{className:"gfmr-markdown-rendered","data-mermaid-bg-color":i,"data-shiki-theme":s,dangerouslySetInnerHTML:{__html:r||""}}))},migrate:function(e){var t,n="undefined"!=typeof window&&(null===(t=window.wpGfmConfig)||void 0===t?void 0:t.siteLanguage)||"en",r=e.content,o=e.html,a=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,mu);return"undefined"!=typeof window&&window.WP_DEBUG&&console.log("[GFMR] Migrating block to multilingual format:",{defaultLang:n,contentLength:(r||"").length}),_u(_u({},a),{},{content:r||"",html:o||"",languages:bu({},n,{content:r||"",html:o||""}),defaultLanguage:n,availableLanguages:[n],showLanguageSwitcher:!1})}},{attributes:{content:{type:"string",default:""},html:{type:"string",default:""},mermaidBgColor:{type:"string",default:"transparent"},shikiTheme:{type:"string",default:""},showFrontmatter:{type:"boolean",default:!1,source:"attribute",selector:".gfmr-markdown-rendered",attribute:"data-show-frontmatter"},frontmatterData:{type:"object",default:{}}},save:function(e){var t=e.attributes,n=t.content,r=t.html,o=t.mermaidBgColor,a=t.shikiTheme,i=t.showFrontmatter,s=void 0!==i&&i,l=(t.frontmatterData,o||"transparent"),c=a||"",f=u.useBlockProps.save({className:"gfmr-markdown-container"});return React.createElement("div",f,React.createElement("div",{className:"gfmr-markdown-source",style:{display:"none",visibility:"hidden",position:"absolute",left:"-9999px",top:"-9999px",width:"1px",height:"1px",overflow:"hidden"},"aria-hidden":"true"},n),React.createElement("div",{className:"gfmr-markdown-rendered","data-mermaid-bg-color":l,"data-shiki-theme":c,"data-show-frontmatter":s,dangerouslySetInnerHTML:{__html:r||""}}))},migrate:function(e){return{content:e.content||"",html:e.html||"",mermaidBgColor:e.mermaidBgColor||"transparent",shikiTheme:e.shikiTheme||"",showFrontmatter:e.showFrontmatter||!1,frontmatterData:e.frontmatterData||{}}}},{attributes:{content:{type:"string",default:""},html:{type:"string",default:""},mermaidBgColor:{type:"string",default:"transparent"},shikiTheme:{type:"string",default:""}},save:function(e){var t=e.attributes,n=t.content,r=t.html,o=t.mermaidBgColor||"transparent",a=t.shikiTheme||"",i=u.useBlockProps.save({className:"gfmr-markdown-container"});return React.createElement("div",i,React.createElement("div",{className:"gfmr-markdown-source",style:{display:"none",visibility:"hidden",position:"absolute",left:"-9999px",top:"-9999px",width:"1px",height:"1px",overflow:"hidden"},"aria-hidden":"true"},n),React.createElement("div",{className:"gfmr-markdown-rendered","data-mermaid-bg-color":o,"data-shiki-theme":a,dangerouslySetInnerHTML:{__html:r||""}}))},migrate:function(e){return{content:e.content||"",html:e.html||"",mermaidBgColor:e.mermaidBgColor||"transparent",shikiTheme:e.shikiTheme||"",showFrontmatter:!1,frontmatterData:{}}}},{attributes:{content:{type:"string",default:""},html:{type:"string",default:""},mermaidBgColor:{type:"string",default:"transparent"}},save:function(e){var t=e.attributes,n=t.content,r=t.html,o=t.mermaidBgColor||"transparent",a=u.useBlockProps.save({className:"gfmr-markdown-container"});return React.createElement("div",a,React.createElement("div",{className:"gfmr-markdown-source",style:{display:"none",visibility:"hidden",position:"absolute",left:"-9999px",top:"-9999px",width:"1px",height:"1px",overflow:"hidden"},"aria-hidden":"true"},n),React.createElement("div",{className:"gfmr-markdown-rendered","data-mermaid-bg-color":o,dangerouslySetInnerHTML:{__html:r||""}}))},migrate:function(e){return{content:e.content||"",html:e.html||"",mermaidBgColor:e.mermaidBgColor||"transparent",shikiTheme:""}}},{attributes:{content:{type:"string",default:""},html:{type:"string",default:""}},save:function(e){var t=e.attributes,n=t.content,r=t.html,o=u.useBlockProps.save({className:"gfmr-markdown-container"});return React.createElement("div",o,React.createElement("div",{className:"gfmr-markdown-source",style:{display:"none",visibility:"hidden",position:"absolute",left:"-9999px",top:"-9999px",width:"1px",height:"1px",overflow:"hidden"},"aria-hidden":"true"},n),React.createElement("div",{className:"gfmr-markdown-rendered",dangerouslySetInnerHTML:{__html:r||""}}))},migrate:function(e){return{content:e.content||"",html:e.html||"",mermaidBgColor:"transparent",shikiTheme:""}}},{attributes:{content:{type:"string",default:""},html:{type:"string",default:""}},save:function(e){var t=e.attributes,n=t.content,r=t.html,o=u.useBlockProps.save({className:"gfmr-markdown-container"});return React.createElement("div",o,React.createElement("div",{className:"gfmr-markdown-source",style:{display:"none"}},n),React.createElement("div",{className:"gfmr-markdown-rendered",dangerouslySetInnerHTML:{__html:r||""}}))},migrate:function(e){return{content:e.content||"",html:e.html||"",mermaidBgColor:"transparent",shikiTheme:""}}}],ku=JSON.parse('{"UU":"gfm-renderer/markdown"}');(0,a.registerBlockType)(ku.UU,{title:(0,i.__)("Markdown","markdown-renderer-for-github"),description:(0,i.__)("Write in GitHub Flavored Markdown with real-time preview.","markdown-renderer-for-github"),category:"text",icon:{src:"editor-code",foreground:"#007cba"},keywords:[(0,i.__)("markdown","markdown-renderer-for-github"),(0,i.__)("gfm","markdown-renderer-for-github"),(0,i.__)("github","markdown-renderer-for-github"),(0,i.__)("code","markdown-renderer-for-github")],example:{attributes:{content:'# Heading 1\n\n**Bold** text and *italic* text.\n\n- List item 1\n- List item 2\n\n```javascript\nconst greeting = "Hello, World!";\nconsole.log(greeting);\n```'}},supports:{html:!1,className:!0,customClassName:!0},edit:function(e){var t,n,r,o,a,p,d=e.attributes,h=e.setAttributes,m=d.content,g=d.html,_=d.mermaidBgColor,b=d.showFrontmatter,y=void 0!==b&&b,D=(d.frontmatterData,d.languages),k=void 0===D?{}:D,w=d.defaultLanguage,v=void 0===w?"en":w,F=d.availableLanguages,C=void 0===F?[]:F,E=d.showLanguageSwitcher,A=void 0===E||E,x=d.codeLineNumbers,S=void 0===x?"default":x,B=fu((0,l.useState)(!1),2),T=B[0],L=B[1],j=fu((0,l.useState)(g||""),2),M=j[0],O=j[1],I=fu((0,l.useState)(null),2),R=I[0],N=I[1],P=fu((0,l.useState)(!1),2),q=P[0],z=P[1],$=(0,l.useRef)(null),G=(0,l.useRef)(null),U=(0,l.useRef)(null),H=(0,l.useRef)(null),W=(0,l.useRef)(null),Z=(0,l.useRef)(bi()),V=(0,l.useRef)(bi()),K=(0,l.useRef)(bi()),Y=(0,l.useRef)(!1),J=(0,l.useRef)(""),X=(0,l.useRef)(!1),Q=(0,l.useRef)(m);(0,l.useEffect)(function(){Q.current=m},[m]);var ee=(0,l.useRef)(k);(0,l.useEffect)(function(){ee.current=k},[k]);var te=(0,l.useRef)(0),ne=(0,l.useRef)(new Set),re=(0,l.useRef)(_),oe=fu((0,l.useState)(v),2),ae=oe[0],ie=oe[1],ue=fu((0,l.useState)(!1),2),se=ue[0],le=ue[1],ce=C.length>0||Object.keys(k).length>0;(0,l.useEffect)(function(){var e,t;if(!(C.length>0||Object.keys(k).length>0||"en"!==v||m||g)){var n=(null===(e=window.wpGfmConfig)||void 0===e?void 0:e.defaultBlockLanguage)||(null===(t=window.wpGfmConfig)||void 0===t?void 0:t.siteLanguage);n&&/^[a-z]{2,3}(-[A-Z]{2})?$/.test(n)&&n!==v&&(h({defaultLanguage:n}),ie(n))}},[]),(0,l.useEffect)(function(){var e=Object.keys(k);if(e.length>0&&(0===C.length||!e.every(function(e){return C.includes(e)}))){var t=e.includes(v)?v:e[0];h({availableLanguages:e,defaultLanguage:t,showLanguageSwitcher:e.length>1}),ie(t)}},[k]);var fe=(0,l.useCallback)(function(){return ce&&k[ae]?k[ae].content||"":m||""},[ce,k,ae,m]),pe=((0,l.useCallback)(function(){return ce&&k[ae]?k[ae].html||"":g||""},[ce,k,ae,g]),null===(t=null===(n=window.wpGfmConfig)||void 0===n||null===(n=n.features)||void 0===n?void 0:n.imageInsert)||void 0===t||t),de=(null===(r=window.wpGfmConfig)||void 0===r?void 0:r.metaDescription)||{},he=!!de.enabled,me=de.metaKey||"_gfmr_meta_descriptions",ge=Array.isArray(de.postTypes)?de.postTypes:["post","page"],_e=(0,c.useSelect)(function(e){return!1!==e("core").canUser("create","media")},[]),be=(0,c.useDispatch)("core/notices"),ye=be.createErrorNotice,De=be.createWarningNotice,ke=(0,c.useSelect)(function(e){var t=e("core"),n={per_page:100,hide_empty:!1,orderby:"name",order:"asc"};return{categoryTerms:t.getEntityRecords("taxonomy","category",n)||[],tagTerms:t.getEntityRecords("taxonomy","post_tag",n)||[]}},[]),we=ke.categoryTerms,ve=ke.tagTerms,Fe=(0,c.useSelect)(function(e){var t=e("core"),n={};return Object.keys(k).forEach(function(e){var r,o=null===(r=k[e])||void 0===r?void 0:r.featuredImage;o&&(n[e]=t.getEntityRecord("root","media",o))}),n},[k]),Ce=(0,c.useSelect)(function(e){var t=e("core/editor");return t?t.getCurrentPostType():null},[]),Ee=(0,c.useSelect)(function(e){var t=e("core/editor");return t&&t.getEditedPostAttribute("meta")||{}},[]),Ae=(0,c.useDispatch)("core/editor").editPost,xe=Pa(Ee,me),Se=he&&-1!==ge.indexOf(Ce),Be=(0,c.useSelect)(function(e){var t=e("core/editor"),n=t&&t.getEditedPostAttribute("featured_media")||0;return n?e("core").getEntityRecord("root","media",n):null},[]),Te=Be&&((null===(o=Be.media_details)||void 0===o||null===(o=o.sizes)||void 0===o||null===(o=o.thumbnail)||void 0===o?void 0:o.source_url)||Be.source_url)||"",Le=(0,l.useCallback)(function(e,t){var n="error"===e?ye:De;"function"==typeof n?n(t,{type:"snackbar",isDismissible:!0}):console.warn("[handlePaste]",t)},[ye,De]),je=(0,l.useCallback)(function(){var e=cu(ru().m(function e(t){var n,r,o;return ru().w(function(e){for(;;)switch(e.p=e.n){case 0:if(!ce){e.n=5;break}return n=iu(iu({},k),{},uu({},ae,iu(iu({},k[ae]||{}),{},{content:t}))),h({languages:n}),e.p=1,e.n=2,Ge(t,ae,n);case 2:e.n=4;break;case 3:e.p=3,r=e.v,console.warn("[updateContentWithRender] Render failed:",r.message);case 4:e.n=9;break;case 5:return h({content:t}),e.p=6,e.n=7,qe(t);case 7:e.n=9;break;case 8:e.p=8,o=e.v,console.warn("[updateContentWithRender] Render failed:",o.message);case 9:return e.a(2)}},e,null,[[6,8],[1,3]])}));return function(_x){return e.apply(this,arguments)}}(),[ce,k,ae,h,qe,Ge]),Me=(0,l.useCallback)(function(){var e=cu(ru().m(function e(t){var n,r,o,a,i,u,s;return ru().w(function(e){for(;;)switch(e.n){case 0:if(n=Array.isArray(t)?t[0]:t){e.n=1;break}return console.warn("[handleImageInsert] No media selected"),e.a(2);case 1:if(r=yt(n)){e.n=2;break}return console.warn("[handleImageInsert] Invalid or missing URL. Media ID:",null==n?void 0:n.id),e.a(2);case 2:return T&&L(!1),o=fe(),a=$.current,i=G.current,s=o&&o.length>0?"\n":"",u=i&&i.start>=0?o.substring(0,i.start)+r+o.substring(i.end):o+s+r,e.n=3,je(u);case 3:G.current=null,setTimeout(function(){if(a){try{a.focus({preventScroll:!0})}catch(e){console.warn("preventScroll not supported, using fallback:",e),a.focus()}var e=i&&i.start>=0?i.start+r.length:u.length;a.setSelectionRange(e,e)}},0);case 4:return e.a(2)}},e)}));return function(t){return e.apply(this,arguments)}}(),[h,T,L,fe,je]),Oe=(0,l.useMemo)(function(){var e,t,n,r,o=null!==(e=null===(t=window.wpGfmConfig)||void 0===t||null===(t=t.theme)||void 0===t?void 0:t.shiki_theme)&&void 0!==e?e:null!==(n=(r=window).matchMedia)&&void 0!==n&&n.call(r,"(prefers-color-scheme: dark)").matches?"github-dark":"github-light";return"auto"===o&&(o=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"github-dark":"github-light"),"github-dark"===o?"gfmr-dark":"gfmr-light"},[]);(0,l.useEffect)(function(){var e,t;m||!1!==y||null!==(e=null===(t=window.wpGfmConfig)||void 0===t||null===(t=t.frontmatter)||void 0===t?void 0:t.showHeader)&&void 0!==e&&e&&h({showFrontmatter:!0})},[]);var Ie=(0,l.useCallback)(function(){var e,t=Xo(U)||Xo($),n=Qo(t);return za(n,{presentProp:"mermaid",promiseProp:"__gfmrMermaidLoadPromise",inject:(e=cu(ru().m(function e(){var r,o,a;return ru().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,(o=t.createElement("script")).src=window.wpGfmBuildAssetUrl?window.wpGfmBuildAssetUrl("assets/libs/mermaid/mermaid.min.js"):((null===(r=window.wpGfmConfig)||void 0===r?void 0:r.pluginUrl)||"")+"/assets/libs/mermaid/mermaid.min.js",o.async=!0,e.n=1,new Promise(function(e,n){o.onload=e,o.onerror=n,t.head.appendChild(o)});case 1:if(!n.mermaid){e.n=4;break}if(!window.wpGfmInitializeMermaidUnified){e.n=3;break}return e.n=2,window.wpGfmInitializeMermaidUnified(!0);case 2:if(!e.v){e.n=3;break}return e.a(2,!0);case 3:return n.mermaid.initialize({startOnLoad:!1,theme:gi(),securityLevel:"loose",fontFamily:"monospace",themeVariables:{background:"transparent"},flowchart:{useMaxWidth:!1,htmlLabels:!0,curve:"basis"},sequence:{useMaxWidth:!0,height:65},class:{useMaxWidth:!0},state:{useMaxWidth:!1},er:{useMaxWidth:!1},gantt:{useMaxWidth:!0},gitGraph:{useMaxWidth:!1,mainLineWidth:2,mainBranchOrder:0}}),e.a(2,!0);case 4:e.n=6;break;case 5:e.p=5,a=e.v,console.error("[WP GFM Editor] Failed to load Mermaid:",a);case 6:return e.a(2,!1)}},e,null,[[0,5]])})),function(){return e.apply(this,arguments)})})},[]),Re=(0,l.useCallback)(function(){var e=cu(ru().m(function e(t){var n,r,o,a=arguments;return ru().w(function(e){for(;;)switch(e.p=e.n){case 0:if(n=a.length>1&&void 0!==a[1]?a[1]:null,dt("processMermaidBlocks called, container:",null==t?void 0:t.tagName,null==t?void 0:t.className),t){e.n=1;break}return ht("No container provided for Mermaid processing"),e.a(2);case 1:if(!window.wpGfmProcessMermaidBlocksUnified){e.n=7;break}return dt("Using unified Mermaid processing for editor"),e.p=2,e.n=3,Ie();case 3:if(e.v){e.n=4;break}return ht("Mermaid not available, skipping processing"),e.a(2);case 4:return e.n=5,window.wpGfmProcessMermaidBlocksUnified(t,"editor");case 5:return r=e.v,dt("✅ Unified Mermaid processing completed: ".concat(r," blocks processed")),e.a(2,r);case 6:e.p=6,o=e.v,console.error("[WP GFM Editor] Unified Mermaid processing failed:",o);case 7:return e.a(2,Mi(t,Ie,"editor",n,V.current))}},e,null,[[2,6]])}));return function(t){return e.apply(this,arguments)}}(),[Ie]);(0,l.useEffect)(function(){H.current=Re},[Re]);var Ne=(0,l.useCallback)(function(){var e=cu(ru().m(function e(t,n){return ru().w(function(e){for(;;)if(0===e.n)return e.a(2,Ri(t,n,Z.current))},e)}));return function(t,n){return e.apply(this,arguments)}}(),[]);(0,l.useEffect)(function(){W.current=Ne},[Ne]);var Pe=(0,l.useCallback)(function(){if(!T){var e=function(e){var t={mermaid:!1,chart:!1,plantuml:!1};if(!e||"string"!=typeof e)return t;for(var n,r=/(?:^|\n)[ \t]*(?:`{3,}|~{3,})[ \t]*([a-zA-Z0-9_-]+)/g;null!==(n=r.exec(e));){var o=Ai[n[1].toLowerCase()];o&&(t[o]=!0)}return t}(ce?Object.values(k).map(function(e){return(null==e?void 0:e.content)||""}).join("\n"):m||"");if((e.mermaid||e.chart)&&(e.mermaid&&Ie(),e.chart)){var t=Xo(U)||Xo($);t&&Ei(t)}}},[T,ce,k,m,Ie]);(0,l.useEffect)(function(){if(!q){var e=Xo($)||Xo(U);xa(e).then(function(e){e&&(z(!0),console.log("[WP GFM Editor] Shiki initialized for editor"),m&&qe(m))}).catch(function(e){console.warn("[WP GFM Editor] Shiki initialization failed:",e)})}},[]),(0,l.useEffect)(function(){m&&qe(m)},[]),(0,l.useEffect)(function(){m&&qe(m)},[y]);var qe=(0,l.useCallback)(function(){var e=cu(ru().m(function e(t){var n,r,o,a,i,u,s,l,c,f,p,d,m,g;return ru().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t){e.n=1;break}return O(""),h({html:"",shikiTheme:"",frontmatterData:{},renderedDiagramsHtml:""}),N(null),e.a(2);case 1:if(e.p=1,i=Ze(t),u=i.frontmatter,s=i.body,h({frontmatterData:u}),q||Sa()){e.n=3;break}return e.n=2,xa(Xo($)||Xo(U));case 2:z(!0);case 3:l=ya(),window.wpGfmRenderWithIndentPreprocessing?(console.log("[WP GFM Editor] Using indent block preprocessing for editor"),c=window.wpGfmRenderWithIndentPreprocessing(s,l)):(console.warn("[WP GFM Editor] Indent preprocessor not available, using fallback"),c=l.render(s)),f=y?Ve(u):"",p=Li(p=f+c),p=la(p,hu(S)),"auto"===(d=null!==(n=null===(r=window.wpGfmConfig)||void 0===r||null===(r=r.theme)||void 0===r?void 0:r.shiki_theme)&&void 0!==n?n:null!==(o=(a=window).matchMedia)&&void 0!==o&&o.call(a,"(prefers-color-scheme: dark)").matches?"github-dark":"github-light")&&(m=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches,d=m?"github-dark":"github-light"),O(p),h({html:p,shikiTheme:d}),J.current!==p&&(N(null),h({renderedDiagramsHtml:""}),J.current=p),e.n=5;break;case 4:e.p=4,g=e.v,console.error("[WP GFM Renderer] Rendering error:",g),O("<p>An error occurred while rendering Markdown</p>"),N(null);case 5:return e.a(2)}},e,null,[[1,4]])}));return function(t){return e.apply(this,arguments)}}(),[q,y,O,N]);(0,l.useEffect)(function(){var e=!1,t=null,n=null;if(dt("🔍 useEffect triggered:",{isPreview:T,renderedHtml:!!M,previewRefExists:!!U.current}),T&&M&&U.current){n=new AbortController,dt("✅ All conditions met for diagram processing");var r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.container,n=e.isPreviewSwitch,r=void 0!==n&&n,o=e.shikiLoaded,a=void 0===o||o,i=e.caches,u=void 0===i?{}:i,s=e.debounceDelay,l=void 0===s?400:s,c=e.immediateDelay,f=void 0===c?0:c;return a&&(r||function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e)return!1;var n=function(e){var t,n={mermaid:[],chart:[],plantuml:[]};if(!e)return n;var r,o=li(Fi(e));try{for(o.s();!(r=o.n()).done;){var a=r.value,i=Ti(a).trim();i&&n.mermaid.push(_i(i))}}catch(e){o.e(e)}finally{o.f()}var u,s=li(e.querySelectorAll(Ci));try{for(s.s();!(u=s.n()).done;){var l=u.value;n.chart.push(Bi(l))}}catch(e){s.e(e)}finally{s.f()}var c,f=li(ki(e,it,ut,vi));try{for(f.s();!(c=f.n()).done;){var p=c.value,d=Si(p).trim();d&&_t(d)&&n.plantuml.push(d)}}catch(e){f.e(e)}finally{f.f()}if(!1!==(null===(t=window.wpGfmConfig)||void 0===t||null===(t=t.plantuml)||void 0===t?void 0:t.c4Enabled)){var h,m=li(e.querySelectorAll(lt));try{for(m.s();!(h=m.n()).done;){var g=h.value,_=Si(g).trim();_&&n.plantuml.push("".concat(ct(g)||"c4","\n").concat(_))}}catch(e){m.e(e)}finally{m.f()}}return n}(e);if(0===n.mermaid.length&&0===n.chart.length&&0===n.plantuml.length)return!0;var r=function(e,t){return t.every(function(t){return!!e&&e.has(t)})};return r(t.mermaid,n.mermaid)&&r(t.chart,n.chart)&&r(t.plantuml,n.plantuml)}(t,u))?f:l}({container:U.current,isPreviewSwitch:T&&!X.current,shikiLoaded:q,caches:{mermaid:V.current,chart:K.current,plantuml:Z.current}});dt("⏱️ Diagram processing delay: ".concat(r,"ms")),t=setTimeout(cu(ru().m(function t(){var r,o,a,i,u,s,l,c,f,p,d,m,g,_;return ru().w(function(t){for(;;)switch(t.p=t.n){case 0:if(!e&&!Y.current){t.n=1;break}return dt("⏭️ Skipping: cleanup=",e,"isDiagramProcessing=",Y.current),t.a(2);case 1:if(Y.current=!0,dt("⏰ previewRef.current exists in setTimeout:",!!U.current),t.p=2,!U.current||!H.current){t.n=4;break}return dt("🎯 previewRef.current type:",nu(U.current)),dt("🎯 previewRef.current tagName:",null===(r=U.current)||void 0===r?void 0:r.tagName),dt("🎯 previewRef.current innerHTML length:",(null===(o=U.current)||void 0===o||null===(o=o.innerHTML)||void 0===o?void 0:o.length)||0),a=cu(ru().m(function e(){var t,n;return ru().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,H.current(U.current,re.current);case 1:return t=e.v,dt("🎯 processMermaidBlocks call completed successfully, result:",t),e.a(2,t||0);case 2:return e.p=2,n=e.v,console.error("[WP GFM Editor] ❌ processMermaidBlocks error:",n),e.a(2,0)}},e,null,[[0,2]])}))(),i=cu(ru().m(function t(){var r,o;return ru().w(function(t){for(;;)switch(t.p=t.n){case 0:if(!e&&U.current&&W.current){t.n=1;break}return t.a(2,0);case 1:return t.p=1,t.n=2,W.current(U.current,n.signal);case 2:return r=t.v,dt("[PlantUML] Processing completed, result:",r),t.a(2,r||0);case 3:return t.p=3,"AbortError"!==(o=t.v).name&&console.warn("[WP GFM Editor] PlantUML processing error:",o),t.a(2,0)}},t,null,[[1,3]])}))(),u=cu(ru().m(function t(){var n,r;return ru().w(function(t){for(;;)switch(t.p=t.n){case 0:if(!e&&U.current){t.n=1;break}return t.a(2,0);case 1:return t.p=1,t.n=2,ji(U.current,void 0,K.current);case 2:return n=t.v,dt("[Chart.js] Processing completed, result:",n),t.a(2,n||0);case 3:return t.p=3,r=t.v,console.warn("[WP GFM Editor] Chart processing error:",r),t.a(2,0)}},t,null,[[1,3]])}))(),s=cu(ru().m(function t(){var n,r;return ru().w(function(t){for(;;)switch(t.p=t.n){case 0:if(!e&&U.current){t.n=1;break}return t.a(2,0);case 1:return t.p=1,t.n=2,Ki(U.current);case 2:return n=t.v,dt("[KaTeX] Processing completed, result:",n),t.a(2,n||0);case 3:return t.p=3,r=t.v,console.warn("[WP GFM Editor] KaTeX processing error:",r),t.a(2,0)}},t,null,[[1,3]])}))(),t.n=3,Promise.all([a,i,u,s]);case 3:l=t.v,c=fu(l,4),f=c[0],p=c[1],d=c[2],m=c[3],!e&&(f>0||p>0||d>0||m>0)&&U.current&&(g=U.current.innerHTML,N(g),ce||h({renderedDiagramsHtml:g})),t.n=5;break;case 4:dt("❌ previewRef.current or processMermaidBlocksRef.current is null/undefined");case 5:t.n=7;break;case 6:t.p=6,_=t.v,console.error("[WP GFM Editor] ❌ processMermaidBlocks error:",_),console.error("[WP GFM Editor] ❌ Error stack:",_.stack);case 7:return t.p=7,Y.current=!1,t.f(7);case 8:return t.a(2)}},t,null,[[2,6,7,8]])})),r)}else dt("❌ Conditions not met:",{isPreview:T,renderedHtml:!!M,previewRefExists:!!U.current});return X.current=T,function(){var r;e=!0,null===(r=n)||void 0===r||r.abort(),t&&clearTimeout(t),Y.current=!1}},[T,M,ce,h,q]),(0,l.useEffect)(function(){re.current=_;var e=U.current;e&&e.style.setProperty("--gfmr-mermaid-block-bg",_||"transparent")},[_,T]);var ze,$e=function(){var e=cu(ru().m(function e(t){var n,r;return ru().w(function(e){for(;;)switch(e.n){case 0:if(n=t.target.value,!ce){e.n=2;break}return r=iu(iu({},k),{},uu({},ae,iu(iu({},k[ae]||{}),{},{content:n}))),e.n=1,Ge(n,ae,r);case 1:e.n=3;break;case 2:return h({content:n}),e.n=3,qe(n);case 3:return e.a(2)}},e)}));return function(t){return e.apply(this,arguments)}}(),Ge=function(){var e=cu(ru().m(function e(t,n,r){var o,a,i,u,s,l,c,f,p,d,m,g,_,b,D,k,w,F;return ru().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t){e.n=1;break}return o=iu(iu({},r),{},uu({},n,{content:"",html:""})),h({languages:o}),O(""),N(null),e.a(2);case 1:if(e.p=1,f=Ze(t),p=f.frontmatter,d=f.body,h({frontmatterData:p}),q||Sa()){e.n=3;break}return e.n=2,xa();case 2:z(!0);case 3:m=ya(),g=window.wpGfmRenderWithIndentPreprocessing?window.wpGfmRenderWithIndentPreprocessing(d,m):m.render(d),_=y?Ve(p):"",b=Li(b=_+g),b=la(b,hu(S)),"auto"===(D=null!==(a=null===(i=window.wpGfmConfig)||void 0===i||null===(i=i.theme)||void 0===i?void 0:i.shiki_theme)&&void 0!==a?a:null!==(u=(s=window).matchMedia)&&void 0!==u&&u.call(s,"(prefers-color-scheme: dark)").matches?"github-dark":"github-light")&&(k=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches,D=k?"github-dark":"github-light"),w=iu(iu({},r),{},uu({},n,{content:t,html:b})),h({languages:w,shikiTheme:D,content:(null===(l=w[v])||void 0===l?void 0:l.content)||"",html:(null===(c=w[v])||void 0===c?void 0:c.html)||""}),O(b),J.current!==b&&(N(null),J.current=b),e.n=5;break;case 4:e.p=4,F=e.v,console.error("[WP GFM Renderer] Rendering error:",F),O("<p>An error occurred while rendering Markdown</p>"),N(null);case 5:return e.a(2)}},e,null,[[1,4]])}));return function(t,n,r){return e.apply(this,arguments)}}(),Ue=(0,l.useCallback)(function(e){var t,n,r=fe(),o=G.current,a=r&&r.length>0?"\n":"";if(o&&o.start>=0?(t=r.substring(0,o.start)+e+r.substring(o.end),n=o.start+e.length):n=(t=r+a+e).length,ce){var i=ee.current||{};ee.current=iu(iu({},i),{},uu({},ae,iu(iu({},i[ae]||{}),{},{content:t})))}else Q.current=t;je(t),G.current=null,setTimeout(function(){var e=$.current;if(e){try{e.focus({preventScroll:!0})}catch(t){e.focus()}e.setSelectionRange(n,n)}},0)},[fe,je,ce,ae]),He=(0,l.useCallback)(function(e,t,n){var r=ee.current||{},o=function(e,t,n){if("string"!=typeof e||!t)return null;var r=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),o="!\\[[^\\]]*\\(".concat(r,"\\)\\]\\(\\)"),a=new RegExp(o);return a.test(e)?""===n?e.replace(new RegExp("".concat(o,"\\n?")),""):e.replace(a,n):null}(ce?(r[e]||{}).content||"":Q.current||"",t,n);if(null===o)return!1;var a=function(e){return console.warn("[handlePaste] Render failed:",null==e?void 0:e.message)};if(ce){var i=iu(iu({},r),{},uu({},e,iu(iu({},r[e]||{}),{},{content:o})));ee.current=i,Ge(o,e,i).catch(a)}else Q.current=o,h({content:o}),qe(o).catch(a);return!0},[ce,h,qe,Ge]),We=(0,l.useCallback)(function(e,t){if(0!==e.length){var n=(0,i.__)("Uploading image…","markdown-renderer-for-github"),r=e.map(function(e){return te.current+=1,{file:e,token:"".concat("gfmr-upload-").concat(te.current)}}),o=r.map(function(e){return t=e.token,"![".concat(n," (").concat(t,")]()");var t}).join("\n");Ue(o),r.forEach(function(e){var n=e.file,r=e.token;(0,f.uploadMedia)({filesList:[n],allowedTypes:["image"],onFileChange:function(e){var n=Array.isArray(e)?e[e.length-1]:e;if(function(e){ return!(!e||!e.id||!e.url&&!e.source_url)}(n)&&!ne.current.has(r)){ne.current.add(r);var o=yt(n);if(!o)return He(t,r,""),void Le("error",(0,i.__)("Image upload failed.","markdown-renderer-for-github"));He(t,r,o)||Le("warning",(0,i.__)("Upload completed, but the placeholder was removed. Please insert the image from the Media Library.","markdown-renderer-for-github"))}},onError:function(e){He(t,r,""),Le("error",(0,i.sprintf)(/* translators: %s: error message returned by the upload */ /* translators: %s: error message returned by the upload */2 ";case 95:return" ";case 76:return"\u2028";case 80:return"\u2029";default:return""}}function k(e){return e<=65535?String.fromCharCode(e):String.fromCharCode(55296+(e-65536>>10),56320+(e-65536&1023))}function w(e,t,n){"__proto__"===t?Object.defineProperty(e,t,{configurable:!0,enumerable:!0,writable:!0,value:n}):e[t]=n}const v=new Array(256),F=new Array(256);for(let e=0;e<256;e++)v[e]=D(e)?1:0,F[e]=D(e);function C(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||r,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.maxDepth="number"==typeof t.maxDepth?t.maxDepth:100,this.maxTotalMergeKeys="number"==typeof t.maxTotalMergeKeys?t.maxTotalMergeKeys:1e4,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.depth=0,this.totalMergeKeys=0,this.firstTabInLine=-1,this.documents=[],this.anchorMapTransactions=[]}function E(e,r){const o={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return o.snippet=n(o),new t(r,o)}function A(e,t){throw E(e,t)}function x(e,t){e.onWarning&&e.onWarning.call(null,E(e,t))}function S(e,t,n){const r=e.anchorMapTransactions;if(0!==r.length){const n=r[r.length-1];o.call(n,t)||(n[t]={existed:o.call(e.anchorMap,t),value:e.anchorMap[t]})}e.anchorMap[t]=n}function B(e){return{position:e.position,line:e.line,lineStart:e.lineStart,lineIndent:e.lineIndent,firstTabInLine:e.firstTabInLine,tag:e.tag,anchor:e.anchor,kind:e.kind,result:e.result}}function T(e,t){e.position=t.position,e.line=t.line,e.lineStart=t.lineStart,e.lineIndent=t.lineIndent,e.firstTabInLine=t.firstTabInLine,e.tag=t.tag,e.anchor=t.anchor,e.kind=t.kind,e.result=t.result}const L={YAML:function(e,t,n){null!==e.version&&A(e,"duplication of %YAML directive"),1!==n.length&&A(e,"YAML directive accepts exactly one argument");const r=/^([0-9]+)\.([0-9]+)$/.exec(n[0]);null===r&&A(e,"ill-formed argument of the YAML directive");const o=parseInt(r[1],10),a=parseInt(r[2],10);1!==o&&A(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=a<2,1!==a&&2!==a&&x(e,"unsupported YAML version of the document")},TAG:function(e,t,n){let r;2!==n.length&&A(e,"TAG directive accepts exactly two arguments");const a=n[0];r=n[1],s.test(a)||A(e,"ill-formed tag handle (first argument) of the TAG directive"),o.call(e.tagMap,a)&&A(e,'there is a previously declared suffix for "'+a+'" tag handle'),l.test(r)||A(e,"ill-formed tag prefix (second argument) of the TAG directive");try{r=decodeURIComponent(r)}catch(t){A(e,"tag prefix is malformed: "+r)}e.tagMap[a]=r}};function j(e,t,n,r){if(t<n){const o=e.input.slice(t,n);if(r)for(let t=0,n=o.length;t<n;t+=1){const n=o.charCodeAt(t);9===n||n>=32&&n<=1114111||A(e,"expected valid JSON character")}else a.test(o)&&A(e,"the stream contains non-printable characters");e.result+=o}}function M(t,n,r,a){e.isObject(r)||A(t,"cannot merge mappings; the provided source object is unacceptable");const i=Object.keys(r);for(let e=0,u=i.length;e<u;e+=1){const u=i[e];-1!==t.maxTotalMergeKeys&&++t.totalMergeKeys>t.maxTotalMergeKeys&&A(t,"merge keys exceeded maxTotalMergeKeys ("+t.maxTotalMergeKeys+")"),o.call(n,u)||(w(n,u,r[u]),a[u]=!0)}}function O(e,t,n,r,a,i,u,s,l){if(Array.isArray(a))for(let t=0,n=(a=Array.prototype.slice.call(a)).length;t<n;t+=1)Array.isArray(a[t])&&A(e,"nested arrays are not supported inside keys"),"object"==typeof a&&"[object Object]"===c(a[t])&&(a[t]="[object Object]");if("object"==typeof a&&"[object Object]"===c(a)&&(a="[object Object]"),a=String(a),null===t&&(t={}),"tag:yaml.org,2002:merge"===r)if(Array.isArray(i))for(let r=0,o=i.length;r<o;r+=1)M(e,t,i[r],n);else M(e,t,i,n);else e.json||o.call(n,a)||!o.call(t,a)||(e.line=u||e.line,e.lineStart=s||e.lineStart,e.position=l||e.position,A(e,"duplicated mapping key")),w(t,a,i),delete n[a];return t}function I(e){const t=e.input.charCodeAt(e.position);10===t?e.position++:13===t?(e.position++,10===e.input.charCodeAt(e.position)&&e.position++):A(e,"a line break is expected"),e.line+=1,e.lineStart=e.position,e.firstTabInLine=-1}function R(e,t,n){let r=0,o=e.input.charCodeAt(e.position);for(;0!==o;){for(;p(o);)9===o&&-1===e.firstTabInLine&&(e.firstTabInLine=e.position),o=e.input.charCodeAt(++e.position);if(t&&35===o)do{o=e.input.charCodeAt(++e.position)}while(10!==o&&13!==o&&0!==o);if(!f(o))break;for(I(e),o=e.input.charCodeAt(e.position),r++,e.lineIndent=0;32===o;)e.lineIndent++,o=e.input.charCodeAt(++e.position)}return-1!==n&&0!==r&&e.lineIndent<n&&x(e,"deficient indentation"),r}function N(e){let t=e.position,n=e.input.charCodeAt(t);return!(45!==n&&46!==n||n!==e.input.charCodeAt(t+1)||n!==e.input.charCodeAt(t+2)||(t+=3,n=e.input.charCodeAt(t),0!==n&&!d(n)))}function P(t,n){1===n?t.result+=" ":n>1&&(t.result+=e.repeat("\n",n-1))}function q(e,t){const n=e.tag,r=e.anchor,o=[];let a=!1;if(-1!==e.firstTabInLine)return!1;null!==e.anchor&&S(e,e.anchor,o);let i=e.input.charCodeAt(e.position);for(;0!==i&&(-1!==e.firstTabInLine&&(e.position=e.firstTabInLine,A(e,"tab characters must not be used in indentation")),45===i)&&d(e.input.charCodeAt(e.position+1));){if(a=!0,e.position++,R(e,!0,-1)&&e.lineIndent<=t){o.push(null),i=e.input.charCodeAt(e.position);continue}const n=e.line;if(U(e,t,3,!1,!0),o.push(e.result),R(e,!0,-1),i=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==i)A(e,"bad indentation of a sequence entry");else if(e.lineIndent<t)break}return!!a&&(e.tag=n,e.anchor=r,e.kind="sequence",e.result=o,!0)}function z(e,t,n){let r,o,a,i;const u=e.tag,s=e.anchor,l={},c=Object.create(null);let f=null,h=null,m=null,g=!1,_=!1;if(-1!==e.firstTabInLine)return!1;null!==e.anchor&&S(e,e.anchor,l);let b=e.input.charCodeAt(e.position);for(;0!==b;){g||-1===e.firstTabInLine||(e.position=e.firstTabInLine,A(e,"tab characters must not be used in indentation"));const y=e.input.charCodeAt(e.position+1),D=e.line;if(63!==b&&58!==b||!d(y)){if(o=e.line,a=e.lineStart,i=e.position,!U(e,n,2,!1,!0))break;if(e.line===D){for(b=e.input.charCodeAt(e.position);p(b);)b=e.input.charCodeAt(++e.position);if(58===b)b=e.input.charCodeAt(++e.position),d(b)||A(e,"a whitespace character is expected after the key-value separator within a block mapping"),g&&(O(e,l,c,f,h,null,o,a,i),f=h=m=null),_=!0,g=!1,r=!1,f=e.tag,h=e.result;else{if(!_)return e.tag=u,e.anchor=s,!0;A(e,"can not read an implicit mapping pair; a colon is missed")}}else{if(!_)return e.tag=u,e.anchor=s,!0;A(e,"can not read a block mapping entry; a multiline key may not be an implicit key")}}else 63===b?(g&&(O(e,l,c,f,h,null,o,a,i),f=h=m=null),_=!0,g=!0,r=!0):g?(g=!1,r=!0):A(e,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),e.position+=1,b=y;if((e.line===D||e.lineIndent>t)&&(g&&(o=e.line,a=e.lineStart,i=e.position),U(e,t,4,!0,r)&&(g?h=e.result:m=e.result),g||(O(e,l,c,f,h,m,o,a,i),f=h=m=null),R(e,!0,-1),b=e.input.charCodeAt(e.position)),(e.line===D||e.lineIndent>t)&&0!==b)A(e,"bad indentation of a mapping entry");else if(e.lineIndent<t)break}return g&&O(e,l,c,f,h,null,o,a,i),_&&(e.tag=u,e.anchor=s,e.kind="mapping",e.result=l),_}function $(e){let t,n,r=!1,a=!1,i=e.input.charCodeAt(e.position);if(33!==i)return!1;null!==e.tag&&A(e,"duplication of a tag property"),i=e.input.charCodeAt(++e.position),60===i?(r=!0,i=e.input.charCodeAt(++e.position)):33===i?(a=!0,t="!!",i=e.input.charCodeAt(++e.position)):t="!";let c=e.position;if(r){do{i=e.input.charCodeAt(++e.position)}while(0!==i&&62!==i);e.position<e.length?(n=e.input.slice(c,e.position),i=e.input.charCodeAt(++e.position)):A(e,"unexpected end of the stream within a verbatim tag")}else{for(;0!==i&&!d(i);)33===i&&(a?A(e,"tag suffix cannot contain exclamation marks"):(t=e.input.slice(c-1,e.position+1),s.test(t)||A(e,"named tag handle cannot contain such characters"),a=!0,c=e.position+1)),i=e.input.charCodeAt(++e.position);n=e.input.slice(c,e.position),u.test(n)&&A(e,"tag suffix cannot contain flow indicator characters")}n&&!l.test(n)&&A(e,"tag name cannot contain such characters: "+n);try{n=decodeURIComponent(n)}catch(t){A(e,"tag name is malformed: "+n)}return r?e.tag=n:o.call(e.tagMap,t)?e.tag=e.tagMap[t]+n:"!"===t?e.tag="!"+n:"!!"===t?e.tag="tag:yaml.org,2002:"+n:A(e,'undeclared tag handle "'+t+'"'),!0}function G(e){let t=e.input.charCodeAt(e.position);if(38!==t)return!1;null!==e.anchor&&A(e,"duplication of an anchor property"),t=e.input.charCodeAt(++e.position);const n=e.position;for(;0!==t&&!d(t)&&!h(t);)t=e.input.charCodeAt(++e.position);return e.position===n&&A(e,"name of an anchor node must contain at least one character"),e.anchor=e.input.slice(n,e.position),!0}function U(t,n,r,a,i){let u,s,l,c,g,_=1,D=!1,w=!1,C=null;t.depth>=t.maxDepth&&A(t,"nesting exceeded maxDepth ("+t.maxDepth+")"),t.depth+=1,null!==t.listener&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null;const E=u=s=4===r||3===r;if(a&&R(t,!0,-1)&&(D=!0,t.lineIndent>n?_=1:t.lineIndent===n?_=0:t.lineIndent<n&&(_=-1)),1===_)for(;;){const e=t.input.charCodeAt(t.position),r=B(t);if(D&&(33===e&&null!==t.tag||38===e&&null!==t.anchor))break;if(!$(t)&&!G(t))break;null===C&&(C=r),R(t,!0,-1)?(D=!0,s=E,t.lineIndent>n?_=1:t.lineIndent===n?_=0:t.lineIndent<n&&(_=-1)):s=!1}if(s&&(s=D||i),1===_||4===r)if(c=1===r||2===r?n:n+1,g=t.position-t.lineStart,1===_)if(s&&(q(t,g)||z(t,g,c))||function(e,t){let n,r,o,a=!0;const i=e.tag;let u;const s=e.anchor;let l,c,f,p;const h=Object.create(null);let m,g,_,b=e.input.charCodeAt(e.position);if(91===b)l=93,p=!1,u=[];else{if(123!==b)return!1;l=125,p=!0,u={}}for(null!==e.anchor&&S(e,e.anchor,u),b=e.input.charCodeAt(++e.position);0!==b;){if(R(e,!0,t),b=e.input.charCodeAt(e.position),b===l)return e.position++,e.tag=i,e.anchor=s,e.kind=p?"mapping":"sequence",e.result=u,!0;a?44===b&&A(e,"expected the node content, but found ','"):A(e,"missed comma between flow collection entries"),g=m=_=null,c=f=!1,63===b&&d(e.input.charCodeAt(e.position+1))&&(c=f=!0,e.position++,R(e,!0,t)),n=e.line,r=e.lineStart,o=e.position,U(e,t,1,!1,!0),g=e.tag,m=e.result,R(e,!0,t),b=e.input.charCodeAt(e.position),!f&&e.line!==n||58!==b||(c=!0,b=e.input.charCodeAt(++e.position),R(e,!0,t),U(e,t,1,!1,!0),_=e.result),p?O(e,u,h,g,m,_,n,r,o):c?u.push(O(e,null,h,g,m,_,n,r,o)):u.push(m),R(e,!0,t),b=e.input.charCodeAt(e.position),44===b?(a=!0,b=e.input.charCodeAt(++e.position)):a=!1}A(e,"unexpected end of the stream within a flow collection")}(t,c))w=!0;else{const n=t.input.charCodeAt(t.position);null!==C&&E&&!s&&124!==n&&62!==n&&function(e,t,n,r){const a=B(e);return function(e){e.anchorMapTransactions.push(Object.create(null))}(e),T(e,t),e.tag=null,e.anchor=null,e.kind=null,e.result=null,z(e,n,r)&&"mapping"===e.kind?(function(e){const t=e.anchorMapTransactions.pop(),n=e.anchorMapTransactions;if(0===n.length)return;const r=n[n.length-1],a=Object.keys(t);for(let e=0,n=a.length;e<n;e+=1){const n=a[e];o.call(r,n)||(r[n]=t[n])}}(e),!0):(function(e){const t=e.anchorMapTransactions.pop(),n=Object.keys(t);for(let r=n.length-1;r>=0;r-=1){const o=t[n[r]];o.existed?e.anchorMap[n[r]]=o.value:delete e.anchorMap[n[r]]}}(e),T(e,a),!1)}(t,C,C.position-C.lineStart,c)||u&&function(t,n){let r,o,a=1,i=!1,u=!1,s=n,l=0,c=!1,d=t.input.charCodeAt(t.position);if(124===d)r=!1;else{if(62!==d)return!1;r=!0}for(t.kind="scalar",t.result="";0!==d;)if(d=t.input.charCodeAt(++t.position),43===d||45===d)1===a?a=43===d?3:2:A(t,"repeat of a chomping mode identifier");else{if(!((o=y(d))>=0))break;0===o?A(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?A(t,"repeat of an indentation width identifier"):(s=n+o-1,u=!0)}if(p(d)){do{d=t.input.charCodeAt(++t.position)}while(p(d));if(35===d)do{d=t.input.charCodeAt(++t.position)}while(!f(d)&&0!==d)}for(;0!==d;){for(I(t),t.lineIndent=0,d=t.input.charCodeAt(t.position);(!u||t.lineIndent<s)&&32===d;)t.lineIndent++,d=t.input.charCodeAt(++t.position);if(!u&&t.lineIndent>s&&(s=t.lineIndent),f(d)){l++;continue}if(u||0!==s||A(t,"missing indentation for block scalar"),t.lineIndent<s){3===a?t.result+=e.repeat("\n",i?1+l:l):1===a&&i&&(t.result+="\n");break}r?p(d)?(c=!0,t.result+=e.repeat("\n",i?1+l:l)):c?(c=!1,t.result+=e.repeat("\n",l+1)):0===l?i&&(t.result+=" "):t.result+=e.repeat("\n",l):t.result+=e.repeat("\n",i?1+l:l),i=!0,u=!0,l=0;const n=t.position;for(;!f(d)&&0!==d;)d=t.input.charCodeAt(++t.position);j(t,n,t.position,!1)}return!0}(t,c)||function(e,t){let n,r,o=e.input.charCodeAt(e.position);if(39!==o)return!1;for(e.kind="scalar",e.result="",e.position++,n=r=e.position;0!==(o=e.input.charCodeAt(e.position));)if(39===o){if(j(e,n,e.position,!0),o=e.input.charCodeAt(++e.position),39!==o)return!0;n=e.position,e.position++,r=e.position}else f(o)?(j(e,n,r,!0),P(e,R(e,!1,t)),n=r=e.position):e.position===e.lineStart&&N(e)?A(e,"unexpected end of the document within a single quoted scalar"):(e.position++,p(o)||(r=e.position));A(e,"unexpected end of the stream within a single quoted scalar")}(t,c)||function(e,t){let n,r,o,a=e.input.charCodeAt(e.position);if(34!==a)return!1;for(e.kind="scalar",e.result="",e.position++,n=r=e.position;0!==(a=e.input.charCodeAt(e.position));){if(34===a)return j(e,n,e.position,!0),e.position++,!0;if(92===a){if(j(e,n,e.position,!0),a=e.input.charCodeAt(++e.position),f(a))R(e,!1,t);else if(a<256&&v[a])e.result+=F[a],e.position++;else if((o=b(a))>0){let t=o,n=0;for(;t>0;t--)a=e.input.charCodeAt(++e.position),(o=m(a))>=0?n=(n<<4)+o:A(e,"expected hexadecimal character");e.result+=k(n),e.position++}else A(e,"unknown escape sequence");n=r=e.position}else f(a)?(j(e,n,r,!0),P(e,R(e,!1,t)),n=r=e.position):e.position===e.lineStart&&N(e)?A(e,"unexpected end of the document within a double quoted scalar"):(e.position++,p(a)||(r=e.position))}A(e,"unexpected end of the stream within a double quoted scalar")}(t,c)?w=!0:function(e){let t=e.input.charCodeAt(e.position);if(42!==t)return!1;t=e.input.charCodeAt(++e.position);const n=e.position;for(;0!==t&&!d(t)&&!h(t);)t=e.input.charCodeAt(++e.position);e.position===n&&A(e,"name of an alias node must contain at least one character");const r=e.input.slice(n,e.position);return o.call(e.anchorMap,r)||A(e,'unidentified alias "'+r+'"'),e.result=e.anchorMap[r],R(e,!0,-1),!0}(t)?(w=!0,null===t.tag&&null===t.anchor||A(t,"alias node should not have any properties")):function(e,t,n){let r,o,a,i,u,s;const l=e.kind,c=e.result;let m=e.input.charCodeAt(e.position);if(d(m)||h(m)||35===m||38===m||42===m||33===m||124===m||62===m||39===m||34===m||37===m||64===m||96===m)return!1;if(63===m||45===m){const t=e.input.charCodeAt(e.position+1);if(d(t)||n&&h(t))return!1}for(e.kind="scalar",e.result="",r=o=e.position,a=!1;0!==m;){if(58===m){const t=e.input.charCodeAt(e.position+1);if(d(t)||n&&h(t))break}else if(35===m){if(d(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&N(e)||n&&h(m))break;if(f(m)){if(i=e.line,u=e.lineStart,s=e.lineIndent,R(e,!1,-1),e.lineIndent>=t){a=!0,m=e.input.charCodeAt(e.position);continue}e.position=o,e.line=i,e.lineStart=u,e.lineIndent=s;break}}a&&(j(e,r,o,!1),P(e,e.line-i),r=o=e.position,a=!1),p(m)||(o=e.position+1),m=e.input.charCodeAt(++e.position)}return j(e,r,o,!1),!!e.result||(e.kind=l,e.result=c,!1)}(t,c,1===r)&&(w=!0,null===t.tag&&(t.tag="?")),null!==t.anchor&&S(t,t.anchor,t.result)}else 0===_&&(w=s&&q(t,g));if(null===t.tag)null!==t.anchor&&S(t,t.anchor,t.result);else if("?"===t.tag){null!==t.result&&"scalar"!==t.kind&&A(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"');for(let e=0,n=t.implicitTypes.length;e<n;e+=1)if(l=t.implicitTypes[e],l.resolve(t.result)){t.result=l.construct(t.result),t.tag=l.tag,null!==t.anchor&&S(t,t.anchor,t.result);break}}else if("!"!==t.tag){if(o.call(t.typeMap[t.kind||"fallback"],t.tag))l=t.typeMap[t.kind||"fallback"][t.tag];else{l=null;const e=t.typeMap.multi[t.kind||"fallback"];for(let n=0,r=e.length;n<r;n+=1)if(t.tag.slice(0,e[n].tag.length)===e[n].tag){l=e[n];break}}l||A(t,"unknown tag !<"+t.tag+">"),null!==t.result&&l.kind!==t.kind&&A(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+l.kind+'", not "'+t.kind+'"'),l.resolve(t.result,t.tag)?(t.result=l.construct(t.result,t.tag),null!==t.anchor&&S(t,t.anchor,t.result)):A(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return null!==t.listener&&t.listener("close",t),t.depth-=1,null!==t.tag||null!==t.anchor||w}function H(e){const t=e.position;let n,r=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(n=e.input.charCodeAt(e.position))&&(R(e,!0,-1),n=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==n));){r=!0,n=e.input.charCodeAt(++e.position);let t=e.position;for(;0!==n&&!d(n);)n=e.input.charCodeAt(++e.position);const a=e.input.slice(t,e.position),i=[];for(a.length<1&&A(e,"directive name must not be less than one character in length");0!==n;){for(;p(n);)n=e.input.charCodeAt(++e.position);if(35===n){do{n=e.input.charCodeAt(++e.position)}while(0!==n&&!f(n));break}if(f(n))break;for(t=e.position;0!==n&&!d(n);)n=e.input.charCodeAt(++e.position);i.push(e.input.slice(t,e.position))}0!==n&&I(e),o.call(L,a)?L[a](e,a,i):x(e,'unknown document directive "'+a+'"')}R(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,R(e,!0,-1)):r&&A(e,"directives end mark is expected"),U(e,e.lineIndent-1,4,!1,!0),R(e,!0,-1),e.checkLineBreaks&&i.test(e.input.slice(t,e.position))&&x(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&N(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,R(e,!0,-1)):e.position<e.length-1&&A(e,"end of the stream or a document separator is expected")}function W(e,t){t=t||{},0!==(e=String(e)).length&&(10!==e.charCodeAt(e.length-1)&&13!==e.charCodeAt(e.length-1)&&(e+="\n"),65279===e.charCodeAt(0)&&(e=e.slice(1)));const n=new C(e,t),r=e.indexOf("\0");for(-1!==r&&(n.position=r,A(n,"null byte is not allowed in input")),n.input+="\0";32===n.input.charCodeAt(n.position);)n.lineIndent+=1,n.position+=1;for(;n.position<n.length-1;)H(n);return n.documents}return oe.loadAll=function(e,t,n){null!==t&&"object"==typeof t&&void 0===n&&(n=t,t=null);const r=W(e,n);if("function"!=typeof t)return r;for(let e=0,n=r.length;e<n;e+=1)t(r[e])},oe.load=function(e,n){const r=W(e,n);if(0!==r.length){if(1===r.length)return r[0];throw new t("expected a single document in the stream, but found more")}},oe}var xe,Se,Be={};function Te(){if(xe)return Be;xe=1;const e=ie(),t=ue(),n=Ee(),r=Object.prototype.toString,o=Object.prototype.hasOwnProperty,a=65279,i={0:"\\0",7:"\\a",8:"\\b",9:"\\t",10:"\\n",11:"\\v",12:"\\f",13:"\\r",27:"\\e",34:'\\"',92:"\\\\",133:"\\N",160:"\\_",8232:"\\L",8233:"\\P"},u=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],s=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;function l(n){let r,o;const a=n.toString(16).toUpperCase();if(n<=255)r="x",o=2;else if(n<=65535)r="u",o=4;else{if(!(n<=4294967295))throw new t("code point within a string may not be greater than 0xFFFFFFFF");r="U",o=8}return"\\"+r+e.repeat("0",o-a.length)+a}function c(t){this.schema=t.schema||n,this.indent=Math.max(1,t.indent||2),this.noArrayIndent=t.noArrayIndent||!1,this.skipInvalid=t.skipInvalid||!1,this.flowLevel=e.isNothing(t.flowLevel)?-1:t.flowLevel,this.styleMap=function(e,t){if(null===t)return{};const n={},r=Object.keys(t);for(let a=0,i=r.length;a<i;a+=1){let i=r[a],u=String(t[i]);"!!"===i.slice(0,2)&&(i="tag:yaml.org,2002:"+i.slice(2));const s=e.compiledTypeMap.fallback[i];s&&o.call(s.styleAliases,u)&&(u=s.styleAliases[u]),n[i]=u}return n}(this.schema,t.styles||null),this.sortKeys=t.sortKeys||!1,this.lineWidth=t.lineWidth||80,this.noRefs=t.noRefs||!1,this.noCompatMode=t.noCompatMode||!1,this.condenseFlow=t.condenseFlow||!1,this.quotingType='"'===t.quotingType?2:1,this.forceQuotes=t.forceQuotes||!1,this.replacer="function"==typeof t.replacer?t.replacer:null,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function f(t,n){const r=e.repeat(" ",n);let o=0,a="";const i=t.length;for(;o<i;){let e;const n=t.indexOf("\n",o);-1===n?(e=t.slice(o),o=i):(e=t.slice(o,n+1),o=n+1),e.length&&"\n"!==e&&(a+=r),a+=e}return a}function p(t,n){return"\n"+e.repeat(" ",t.indent*n)}function d(e){return 32===e||9===e}function h(e){return e>=32&&e<=126||e>=161&&e<=55295&&8232!==e&&8233!==e||e>=57344&&e<=65533&&e!==a||e>=65536&&e<=1114111}function m(e){return h(e)&&e!==a&&13!==e&&10!==e}function g(e,t,n){const r=m(e),o=r&&!d(e);return(n?r:r&&44!==e&&91!==e&&93!==e&&123!==e&&125!==e)&&35!==e&&!(58===t&&!o)||m(t)&&!d(t)&&35===e||58===t&&o}function _(e,t){const n=e.charCodeAt(t);let r;return n>=55296&&n<=56319&&t+1<e.length&&(r=e.charCodeAt(t+1),r>=56320&&r<=57343)?1024*(n-55296)+r-56320+65536:n}function b(e){return/^\n* /.test(e)}function y(e,n,r,o,c){e.dump=function(){if(0===n.length)return 2===e.quotingType?'""':"''";if(!e.noCompatMode&&(-1!==u.indexOf(n)||s.test(n)))return 2===e.quotingType?'"'+n+'"':"'"+n+"'";const p=e.indent*Math.max(1,r),m=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-p),y=o||e.flowLevel>-1&&r>=e.flowLevel;switch(function(e,t,n,r,o,i,u,s){let l,c=0,f=null,p=!1,m=!1;const y=-1!==r;let D=-1,k=h(w=_(e,0))&&w!==a&&!d(w)&&45!==w&&63!==w&&58!==w&&44!==w&&91!==w&&93!==w&&123!==w&&125!==w&&35!==w&&38!==w&&42!==w&&33!==w&&124!==w&&61!==w&&62!==w&&39!==w&&34!==w&&37!==w&&64!==w&&96!==w&&function(e){return!d(e)&&58!==e}(_(e,e.length-1));var w;if(t||u)for(l=0;l<e.length;c>=65536?l+=2:l++){if(c=_(e,l),!h(c))return 5;k=k&&g(c,f,s),f=c}else{for(l=0;l<e.length;c>=65536?l+=2:l++){if(c=_(e,l),10===c)p=!0,y&&(m=m||l-D-1>r&&" "!==e[D+1],D=l);else if(!h(c))return 5;k=k&&g(c,f,s),f=c}m=m||y&&l-D-1>r&&" "!==e[D+1]}return p||m?n>9&&b(e)?5:u?2===i?5:2:m?4:3:!k||u||o(e)?2===i?5:2:1}(n,y,e.indent,m,function(t){return function(e,t){for(let n=0,r=e.implicitTypes.length;n<r;n+=1)if(e.implicitTypes[n].resolve(t))return!0;return!1}(e,t)},e.quotingType,e.forceQuotes&&!o,c)){case 1:return n;case 2:return"'"+n.replace(/'/g,"''")+"'";case 3:return"|"+D(n,e.indent)+k(f(n,p));case 4:return">"+D(n,e.indent)+k(f(function(e,t){const n=/(\n+)([^\n]*)/g;let r,o,a=function(){let r=e.indexOf("\n");return r=-1!==r?r:e.length,n.lastIndex=r,w(e.slice(0,r),t)}(),i="\n"===e[0]||" "===e[0];for(;o=n.exec(e);){const e=o[1],n=o[2];r=" "===n[0],a+=e+(i||r||""===n?"":"\n")+w(n,t),i=r}return a}(n,m),p));case 5:return'"'+function(e){let t="",n=0;for(let r=0;r<e.length;n>=65536?r+=2:r++){n=_(e,r);const o=i[n];!o&&h(n)?(t+=e[r],n>=65536&&(t+=e[r+1])):t+=o||l(n)}return t}(n)+'"';default:throw new t("impossible error: invalid scalar style")}}()}function D(e,t){const n=b(e)?String(t):"",r="\n"===e[e.length-1];return n+(!r||"\n"!==e[e.length-2]&&"\n"!==e?r?"":"-":"+")+"\n"}function k(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function w(e,t){if(""===e||" "===e[0])return e;const n=/ [^ ]/g;let r,o,a=0,i=0,u=0,s="";for(;r=n.exec(e);)u=r.index,u-a>t&&(o=i>a?i:u,s+="\n"+e.slice(a,o),a=o+1),i=u;return s+="\n",e.length-a>t&&i>a?s+=e.slice(a,i)+"\n"+e.slice(i+1):s+=e.slice(a),s.slice(1)}function v(e,t,n,r){let o="";const a=e.tag;for(let a=0,i=n.length;a<i;a+=1){let i=n[a];e.replacer&&(i=e.replacer.call(n,String(a),i)),(C(e,t+1,i,!0,!0,!1,!0)||void 0===i&&C(e,t+1,null,!0,!0,!1,!0))&&(r&&""===o||(o+=p(e,t)),e.dump&&10===e.dump.charCodeAt(0)?o+="-":o+="- ",o+=e.dump)}e.tag=a,e.dump=o||"[]"}function F(e,n,a){const i=a?e.explicitTypes:e.implicitTypes;for(let u=0,s=i.length;u<s;u+=1){const s=i[u];if((s.instanceOf||s.predicate)&&(!s.instanceOf||"object"==typeof n&&n instanceof s.instanceOf)&&(!s.predicate||s.predicate(n))){if(a?s.multi&&s.representName?e.tag=s.representName(n):e.tag=s.tag:e.tag="?",s.represent){const a=e.styleMap[s.tag]||s.defaultStyle;let i;if("[object Function]"===r.call(s.represent))i=s.represent(n,a);else{if(!o.call(s.represent,a))throw new t("!<"+s.tag+'> tag resolver accepts not "'+a+'" style');i=s.represent[a](n,a)}e.dump=i}return!0}}return!1}function C(e,n,o,a,i,u,s){e.tag=null,e.dump=o,F(e,o,!1)||F(e,o,!0);const l=r.call(e.dump),c=a;a&&(a=e.flowLevel<0||e.flowLevel>n);const f="[object Object]"===l||"[object Array]"===l;let d,h;if(f&&(d=e.duplicates.indexOf(o),h=-1!==d),(null!==e.tag&&"?"!==e.tag||h||2!==e.indent&&n>0)&&(i=!1),h&&e.usedDuplicates[d])e.dump="*ref_"+d;else{if(f&&h&&!e.usedDuplicates[d]&&(e.usedDuplicates[d]=!0),"[object Object]"===l)a&&0!==Object.keys(e.dump).length?(function(e,n,r,o){let a="";const i=e.tag,u=Object.keys(r);if(!0===e.sortKeys)u.sort();else if("function"==typeof e.sortKeys)u.sort(e.sortKeys);else if(e.sortKeys)throw new t("sortKeys must be a boolean or a function");for(let t=0,i=u.length;t<i;t+=1){let i="";o&&""===a||(i+=p(e,n));const s=u[t];let l=r[s];if(e.replacer&&(l=e.replacer.call(r,s,l)),!C(e,n+1,s,!0,!0,!0))continue;const c=null!==e.tag&&"?"!==e.tag||e.dump&&e.dump.length>1024;c&&(e.dump&&10===e.dump.charCodeAt(0)?i+="?":i+="? "),i+=e.dump,c&&(i+=p(e,n)),C(e,n+1,l,!0,c)&&(e.dump&&10===e.dump.charCodeAt(0)?i+=":":i+=": ",i+=e.dump,a+=i)}e.tag=i,e.dump=a||"{}"}(e,n,e.dump,i),h&&(e.dump="&ref_"+d+e.dump)):(function(e,t,n){let r="";const o=e.tag,a=Object.keys(n);for(let o=0,i=a.length;o<i;o+=1){let i="";""!==r&&(i+=", "),e.condenseFlow&&(i+='"');const u=a[o];let s=n[u];e.replacer&&(s=e.replacer.call(n,u,s)),C(e,t,u,!1,!1)&&(e.dump.length>1024&&(i+="? "),i+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),C(e,t,s,!1,!1)&&(i+=e.dump,r+=i))}e.tag=o,e.dump="{"+r+"}"}(e,n,e.dump),h&&(e.dump="&ref_"+d+" "+e.dump));else if("[object Array]"===l)a&&0!==e.dump.length?(e.noArrayIndent&&!s&&n>0?v(e,n-1,e.dump,i):v(e,n,e.dump,i),h&&(e.dump="&ref_"+d+e.dump)):(function(e,t,n){let r="";const o=e.tag;for(let o=0,a=n.length;o<a;o+=1){let a=n[o];e.replacer&&(a=e.replacer.call(n,String(o),a)),(C(e,t,a,!1,!1)||void 0===a&&C(e,t,null,!1,!1))&&(""!==r&&(r+=","+(e.condenseFlow?"":" ")),r+=e.dump)}e.tag=o,e.dump="["+r+"]"}(e,n,e.dump),h&&(e.dump="&ref_"+d+" "+e.dump));else{if("[object String]"!==l){if("[object Undefined]"===l)return!1;if(e.skipInvalid)return!1;throw new t("unacceptable kind of an object to dump "+l)}"?"!==e.tag&&y(e,e.dump,n,u,c)}if(null!==e.tag&&"?"!==e.tag){let t=encodeURI("!"===e.tag[0]?e.tag.slice(1):e.tag).replace(/!/g,"%21");t="!"===e.tag[0]?"!"+t:"tag:yaml.org,2002:"===t.slice(0,18)?"!!"+t.slice(18):"!<"+t+">",e.dump=t+" "+e.dump}}return!0}function E(e,t){const n=[],r=[];A(e,n,r);const o=r.length;for(let e=0;e<o;e+=1)t.duplicates.push(n[r[e]]);t.usedDuplicates=new Array(o)}function A(e,t,n){if(null!==e&&"object"==typeof e){const r=t.indexOf(e);if(-1!==r)-1===n.indexOf(r)&&n.push(r);else if(t.push(e),Array.isArray(e))for(let r=0,o=e.length;r<o;r+=1)A(e[r],t,n);else{const r=Object.keys(e);for(let o=0,a=r.length;o<a;o+=1)A(e[r[o]],t,n)}}}return Be.dump=function(e,t){const n=new c(t=t||{});n.noRefs||E(e,n);let r=e;return n.replacer&&(r=n.replacer.call({"":r},"",r)),C(n,0,r,!0,!0)?n.dump+"\n":""},Be}const Le=p(function(){if(Se)return re;Se=1;const e=Ae(),t=Te();function n(e,t){return function(){throw new Error("Function yaml."+e+" is removed in js-yaml 4. Use yaml."+t+" instead, which is now safe by default.")}}return re.Type=se(),re.Schema=le(),re.FAILSAFE_SCHEMA=de(),re.JSON_SCHEMA=be(),re.CORE_SCHEMA=ye(),re.DEFAULT_SCHEMA=Ee(),re.load=e.load,re.loadAll=e.loadAll,re.dump=t.dump,re.YAMLException=ue(),re.types={binary:we(),float:_e(),map:pe(),null:he(),pairs:Fe(),set:Ce(),timestamp:De(),bool:me(),int:ge(),merge:ke(),omap:ve(),seq:fe(),str:ce()},re.safeLoad=n("safeLoad","load"),re.safeLoadAll=n("safeLoadAll","loadAll"),re.safeDump=n("safeDump","dump"),re}()),{Type:je,Schema:Me,FAILSAFE_SCHEMA:Oe,JSON_SCHEMA:Ie,CORE_SCHEMA:Re,DEFAULT_SCHEMA:Ne,load:Pe,loadAll:qe,dump:ze,YAMLException:$e,types:Ge,safeLoad:Ue,safeLoadAll:He,safeDump:We}=Le;var Ze=function(e){if(!e||"string"!=typeof e)return{frontmatter:{},body:e||""};var t=e.match(/^---\s*\n([\s\S]*?)\n---\s*\n([\s\S]*)$/);if(!t)return{frontmatter:{},body:e};try{return{frontmatter:Le.load(t[1],{schema:Le.JSON_SCHEMA})||{},body:t[2]}}catch(t){return console.warn("[WP GFM] YAML parse error:",t),{frontmatter:{},body:e}}},Ve=function(e){if(!e||0===Object.keys(e).length)return"";var t=function(e){return String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")},n='<header class="gfmr-frontmatter">';return e.title&&(n+='<h1 class="gfmr-fm-title">'.concat(t(e.title),"</h1>")),e.date&&(n+='<time class="gfmr-fm-date" datetime="'.concat(t(e.date),'">').concat(t(e.date),"</time>")),e.author&&(n+='<span class="gfmr-fm-author">'.concat(t(e.author),"</span>")),e.tags&&Array.isArray(e.tags)&&(n+='<div class="gfmr-fm-tags">',e.tags.forEach(function(e){n+='<span class="gfmr-fm-tag">'.concat(t(e),"</span>")}),n+="</div>"),n+="</header>"};function Ke(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var Ye=/^[a-z]{2}(-[A-Z]{2})?$/,Je=[{value:"en",label:"English (en)"},{value:"ja",label:"Japanese (ja)"},{value:"zh",label:"Chinese (zh)"},{value:"ko",label:"한국어 (ko)"},{value:"es",label:"Español (es)"},{value:"fr",label:"Français (fr)"},{value:"de",label:"Deutsch (de)"},{value:"pt",label:"Português (pt)"},{value:"it",label:"Italiano (it)"},{value:"ru",label:"Русский (ru)"}],Xe=function(e){if(!e||"string"!=typeof e)return!1;var t=e.toLowerCase().trim();return Ye.test(t)&&t.length<=5},Qe=["graph","flowchart","sequenceDiagram","classDiagram","pie","gantt","stateDiagram","erDiagram","gitGraph","gitgraph","journey"],et=["graph TD","graph LR"],tt=["#gfmr-mermaid-","font-family:","<svg","</svg>"],nt=["pre code.language-mermaid",'pre code[class*="language-mermaid"]',"code.language-mermaid",".shiki .language-mermaid",'[data-language="mermaid"]','pre[class*="language-mermaid"]'],rt=["pre.shiki code",".shiki code","pre code",".gfmr-markdown-rendered-preview pre code",".gfmr-markdown-rendered-preview code"],ot=["@startuml","@startmindmap","@startwbs","@startgantt","@startsalt","@startjson","@startyaml","@startditaa","@startdot"],at=["@enduml","@endmindmap","@endwbs","@endgantt","@endsalt","@endjson","@endyaml","@endditaa","@enddot"],it=["pre code.language-plantuml","pre code.language-puml",'[data-language="plantuml"]','[data-language="puml"]'],ut=["pre code:not([data-gfmr-plantuml-processed])"],st=["c4","c4-context","c4-container","c4-component","c4-dynamic","c4-deployment"],lt=st.map(function(e){return"code.language-".concat(e,":not([data-gfmr-plantuml-processed])")}).join(", "),ct=function(e){var t=null==e?void 0:e.classList;if(!t)return null;for(var n=0,r=st;n<r.length;n++){var o=r[n];if(t.contains("language-".concat(o)))return o}return null},ft="undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.any,pt=function(){var e;return(null===(e=window.wpGfmConfig)||void 0===e?void 0:e.debug)||window.location.search.includes("debug=true")||window.location.search.includes("gfmr-debug=1")||window.location.search.includes("debug=1")||!1},dt=function(){if(pt()){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];(e=console).log.apply(e,["[WP GFM Editor]"].concat(n))}},ht=function(){if(pt()){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];(e=console).warn.apply(e,["[WP GFM Editor]"].concat(n))}},mt=function(){return"text-align: center; margin: 20px 0; padding: 15px; background: var(--gfmr-mermaid-block-bg, ".concat(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"transparent","); border-radius: 6px; overflow-x: auto; border: none;")},gt=function(e,t){return'\n\t<div class="gfmr-mermaid-error-unified" style="color: #d1242f; background: #fff8f8; border: 1px solid #ffcdd2; border-radius: 6px; padding: 15px; margin: 10px 0; font-family: -apple-system, BlinkMacSystemFont, \'Segoe UI\', Roboto, \'Helvetica Neue\', Arial, sans-serif; font-size: 14px; line-height: 1.5;">\n\t\t<div style="font-weight: 600; margin-bottom: 8px;">🚨 Mermaid Rendering Error (editor)</div>\n\t\t<div style="margin-bottom: 12px; font-size: 13px;">'.concat(e||"Unknown error occurred","</div>\n\t\t<details style=\"margin-top: 10px;\">\n\t\t\t<summary style=\"cursor: pointer; font-size: 13px; margin-bottom: 8px;\">View Original Code</summary>\n\t\t\t<pre style=\"background: #f6f8fa; border: 1px solid #d1d9e0; border-radius: 4px; padding: 10px; margin: 5px 0; overflow-x: auto; font-size: 12px; font-family: 'SFMono-Regular', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, monospace; white-space: pre-wrap; word-wrap: break-word;\">").concat(t,"</pre>\n\t\t</details>\n\t</div>\n")},_t=function(e){var t=(e||"").trim(),n=ot.find(function(e){return t.startsWith(e)});if(!n)return!1;var r=n.replace("@start","@end");return at.includes(r)&&t.includes(r)},bt=function(e){var t=null==e?void 0:e.files;if(null!=t&&t.length)return Array.from(t).filter(function(e){var t;return null==e||null===(t=e.type)||void 0===t?void 0:t.startsWith("image/")});var n=null==e?void 0:e.items;if(!n)return[];var r,o=[],a=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return Ke(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ke(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var _n=0,r=function(){};return{s:r,n:function(){return _n>=e.length?{done:!0}:{done:!1,value:e[_n++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,i=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){i=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(i)throw o}}}}(n);try{for(a.s();!(r=a.n()).done;){var i=r.value;if(i&&"file"===i.kind&&"string"==typeof i.type&&i.type.startsWith("image/")){var u=i.getAsFile();u&&o.push(u)}}}catch(e){a.e(e)}finally{a.f()}return o},yt=function(e){var t=(null==e?void 0:e.source_url)||(null==e?void 0:e.url);if(!t||!function(e){if(!e||"string"!=typeof e)return!1;try{var t=new URL(e);return["http:","https:"].includes(t.protocol)}catch(t){return e.startsWith("/")&&!e.includes("..")}}(t))return null;var n,r,o="";return"string"==typeof e.alt?o=e.alt:e.title&&(o=e.title),"![".concat((r=o,r?r.replace(/[\[\]\\]/g,"\\$&"):""),"](").concat((n=t)?/[\s()]/.test(n)?"<".concat(n,">"):n:"",")")};const Dt={};function kt(e,t){"string"!=typeof t&&(t=kt.defaultChars);const n=function(e){let t=Dt[e];if(t)return t;t=Dt[e]=[];for(let e=0;e<128;e++){const n=String.fromCharCode(e);t.push(n)}for(let n=0;n<e.length;n++){const r=e.charCodeAt(n);t[r]="%"+("0"+r.toString(16).toUpperCase()).slice(-2)}return t}(t);return e.replace(/(%[a-f0-9]{2})+/gi,function(e){let t="";for(let r=0,o=e.length;r<o;r+=3){const a=parseInt(e.slice(r+1,r+3),16);if(a<128)t+=n[a];else{if(192==(224&a)&&r+3<o){const n=parseInt(e.slice(r+4,r+6),16);if(128==(192&n)){const e=a<<6&1984|63&n;t+=e<128?"��":String.fromCharCode(e),r+=3;continue}}if(224==(240&a)&&r+6<o){const n=parseInt(e.slice(r+4,r+6),16),o=parseInt(e.slice(r+7,r+9),16);if(128==(192&n)&&128==(192&o)){const e=a<<12&61440|n<<6&4032|63&o;t+=e<2048||e>=55296&&e<=57343?"���":String.fromCharCode(e),r+=6;continue}}if(240==(248&a)&&r+9<o){const n=parseInt(e.slice(r+4,r+6),16),o=parseInt(e.slice(r+7,r+9),16),i=parseInt(e.slice(r+10,r+12),16);if(128==(192&n)&&128==(192&o)&&128==(192&i)){let e=a<<18&1835008|n<<12&258048|o<<6&4032|63&i;e<65536||e>1114111?t+="����":(e-=65536,t+=String.fromCharCode(55296+(e>>10),56320+(1023&e))),r+=9;continue}}t+="�"}}return t})}kt.defaultChars=";/?:@&=+$,#",kt.componentChars="";const wt=kt,vt={};function Ft(e,t,n){"string"!=typeof t&&(n=t,t=Ft.defaultChars),void 0===n&&(n=!0);const r=function(e){let t=vt[e];if(t)return t;t=vt[e]=[];for(let e=0;e<128;e++){const n=String.fromCharCode(e);/^[0-9a-z]$/i.test(n)?t.push(n):t.push("%"+("0"+e.toString(16).toUpperCase()).slice(-2))}for(let n=0;n<e.length;n++)t[e.charCodeAt(n)]=e[n];return t}(t);let o="";for(let t=0,a=e.length;t<a;t++){const i=e.charCodeAt(t);if(n&&37===i&&t+2<a&&/^[0-9a-f]{2}$/i.test(e.slice(t+1,t+3)))o+=e.slice(t,t+3),t+=2;else if(i<128)o+=r[i];else if(i>=55296&&i<=57343){if(i>=55296&&i<=56319&&t+1<a){const n=e.charCodeAt(t+1);if(n>=56320&&n<=57343){o+=encodeURIComponent(e[t]+e[t+1]),t++;continue}}o+="%EF%BF%BD"}else o+=encodeURIComponent(e[t])}return o}Ft.defaultChars=";/?:@&=+$,-_.!~*'()#",Ft.componentChars="-_.!~*'()";const Ct=Ft;function Et(e){let t="";return t+=e.protocol||"",t+=e.slashes?"//":"",t+=e.auth?e.auth+"@":"",e.hostname&&-1!==e.hostname.indexOf(":")?t+="["+e.hostname+"]":t+=e.hostname||"",t+=e.port?":"+e.port:"",t+=e.pathname||"",t+=e.search||"",t+=e.hash||"",t}function At(){this.protocol=null,this.slashes=null,this.auth=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.pathname=null}const xt=/^([a-z0-9.+-]+:)/i,St=/:[0-9]*$/,Bt=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,Tt=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),Lt=["'"].concat(Tt),jt=["%","/","?",";","#"].concat(Lt),Mt=["/","?","#"],Ot=/^[+a-z0-9A-Z_-]{0,63}$/,It=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,Rt={javascript:!0,"javascript:":!0},Nt={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};At.prototype.parse=function(e,t){let n,r,o,a=e;if(a=a.trim(),!t&&1===e.split("#").length){const e=Bt.exec(a);if(e)return this.pathname=e[1],e[2]&&(this.search=e[2]),this}let i=xt.exec(a);if(i&&(i=i[0],n=i.toLowerCase(),this.protocol=i,a=a.substr(i.length)),(t||i||a.match(/^\/\/[^@\/]+@[^@\/]+/))&&(o="//"===a.substr(0,2),!o||i&&Rt[i]||(a=a.substr(2),this.slashes=!0)),!Rt[i]&&(o||i&&!Nt[i])){let e,t,n=-1;for(let e=0;e<Mt.length;e++)r=a.indexOf(Mt[e]),-1!==r&&(-1===n||r<n)&&(n=r);t=-1===n?a.lastIndexOf("@"):a.lastIndexOf("@",n),-1!==t&&(e=a.slice(0,t),a=a.slice(t+1),this.auth=e),n=-1;for(let e=0;e<jt.length;e++)r=a.indexOf(jt[e]),-1!==r&&(-1===n||r<n)&&(n=r);-1===n&&(n=a.length),":"===a[n-1]&&n--;const o=a.slice(0,n);a=a.slice(n),this.parseHost(o),this.hostname=this.hostname||"";const i="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!i){const e=this.hostname.split(/\./);for(let t=0,n=e.length;t<n;t++){const n=e[t];if(n&&!n.match(Ot)){let r="";for(let e=0,t=n.length;e<t;e++)n.charCodeAt(e)>127?r+="x":r+=n[e];if(!r.match(Ot)){const r=e.slice(0,t),o=e.slice(t+1),i=n.match(It);i&&(r.push(i[1]),o.unshift(i[2])),o.length&&(a=o.join(".")+a),this.hostname=r.join(".");break}}}}this.hostname.length>255&&(this.hostname=""),i&&(this.hostname=this.hostname.substr(1,this.hostname.length-2))}const u=a.indexOf("#");-1!==u&&(this.hash=a.substr(u),a=a.slice(0,u));const s=a.indexOf("?");return-1!==s&&(this.search=a.substr(s),a=a.slice(0,s)),a&&(this.pathname=a),Nt[n]&&this.hostname&&!this.pathname&&(this.pathname=""),this},At.prototype.parseHost=function(e){let t=St.exec(e);t&&(t=t[0],":"!==t&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)};const Pt=function(e,t){if(e&&e instanceof At)return e;const n=new At;return n.parse(e,t),n},qt=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDEAD\uDF55-\uDF59\uDF86-\uDF89]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDEB9\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2\uDF00-\uDF09]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDF43-\uDF4F\uDFFF]|\uD809[\uDC70-\uDC74]|\uD80B[\uDFF1\uDFF2]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/,zt=/[\$\+<->\^`\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u0888\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20C0\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFF\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u31EF\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC2\uFD40-\uFD4F\uFDCF\uFDFC-\uFDFF\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD]|\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD833[\uDF50-\uDFC3]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDEA\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEDC-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF76\uDF7B-\uDFD9\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDE53\uDE60-\uDE6D\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC5\uDECE-\uDEDB\uDEE0-\uDEE8\uDEF0-\uDEF8\uDF00-\uDF92\uDF94-\uDFCA]/,$t=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,Gt=/[\0-\x1F\x7F-\x9F]/,Ut=/[\xAD\u0600-\u0605\u061C\u06DD\u070F\u0890\u0891\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC3F]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/,Ht=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/,Wt=new Uint16Array('ᵁ<Õıʊҝջאٵ۞ޢߖࠏઑඡ༉༦ረዡᐕᒝᓃᓟᔥ\0\0\0\0\0\0ᕫᛍᦍᰒᷝ↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\bfms¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTLJNjǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\0\0\0͔͂\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲϏϢϸontourIntegraìȹoɴ\0\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\0\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\0ц\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\0\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲy;䐤r;쀀𝔉lledɓ֗\0\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\0ֿ\0\0ׄf;쀀𝔽All;戀riertrf;愱còJTabcdfgorstרׯؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ߂ߐĀiyޱrc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣসে্ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४ĀnrࢃgleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpwਖਛgȀLRlr৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼અઋp;椅y;䐜Ādl੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑඞcy;䐊cute;䅃ƀaeyહાron;䅇dil;䅅;䐝ƀgswે૰ativeƀMTV૨ediumSpace;怋hiĀcn૦ëeryThiîtedĀGLଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷreak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪௫ఄ಄ದൡඅ櫬Āoungruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater;EFGLSTஶஷ扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨setĀ;Eೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂෛ෧ขภยา฿ไlig;䅒cute耻Ó䃓Āiyීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲcr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬืde耻Õ䃕es;樷ml耻Ö䃖erĀBP๋Āar๐๓r;怾acĀek๚;揞et;掴arenthesis;揜ҀacfhilorsງຊຏຒດຝະrtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ檻cedesȀ;EST່້扺qual;檯lantEqual;扼ilde;找me;怳Ādpuct;戏ortionĀ;aȥl;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀𝔔pf;愚cr;쀀𝒬BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL憒ar;懥eftArrow;懄eiling;按oǵ\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄቕቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHcቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗ĀeiቻDzኀ\0ኇefore;戴a;䎘ĀcnኘkSpace;쀀 Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻Dzᕔ\0ᕛoWidtèa;䎖r;愨pf;愤cr;쀀𝒵ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒;Eaeiopᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;eᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;eᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰᝃᝈ០៦ᠹᡐᜍ᥈ᥰot;櫭ĀcrᛶkȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;tbrk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯᝳ;䎲;愶een;扬r;쀀𝔟gcostuvwឍឝឳេ៕៛ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀakoᠦᠵĀcn៲ᠣkƀlst֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ;敛;敘;攘;攔;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģbar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;elƀ;bhᥨᥩᥫ䁜;槅sub;柈ŬᥴlĀ;e怢t»pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭒\0᯽\0ᰌƀcprᦲute;䄇̀;abcdsᦿᧀᧄ᧕᧙戩nd;橄rcup;橉Āau᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r;Ecefms᩠ᩢᩫ᪤᪪旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ\0\0aĀ;t䀬;䁀ƀ;fl戁îᅠeĀmxent»eóɍǧ\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯delprvw᭠᭬᭷ᮂᮬᯔarrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;pᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰻᰿ᱝᱩᱵᲞᲬᲷᴍᵻᶑᶫᶻ᷆᷍ròar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂᳖᳜᳠mƀ;oș᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄĀDoḆᴴoôĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤijạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»ṺƀaeiἒἚls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ffiɩᾹ\0\0᾽g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙῡt;晭ig;耀flns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao⁕Ācs‑⁒ႉ‸⁅⁈\0⁐β•‥‧\0耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₥₰₴⃰℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽ƀ;qsؾٌlanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqrⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0proør;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼ròòΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonóquigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roøurĀ;a⧓⧔普lĀ;s⧓ସdz⧟\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨íistĀ;sடr;쀀𝔫ȀEest⩦⩹⩼ƀ;qs⩭ƀ;qs⩴lanôií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast⭕⭚⭟lleìl;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖchimpqu⮽⯍⯙⬄⯤⯯Ȁ;cerല⯆ഷ⯉uå;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭ååഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñĀ;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;cⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗLjⵚlac;䅑v;樸old;榼lig;䅓Ācrir;榿;쀀𝔬ͯ\0\0\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕⶥⶨrò᪀Āirⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔǒr;榷rp;榹;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ\0\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ脀¶;l䂶leìЃɩ\0\0m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳ᤈ⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t⾴ïrel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⋢⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔ABHabcdefhilmnoprstuxけさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstwガクシスゼゾダッデナp;極Ā;fゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ìâヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘rrowĀ;tㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowóarpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓ròaòՑ;怏oustĀ;a㈞掱che»mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì耻䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;qኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫwar;椪lig耻ß䃟㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rëƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼Dz㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproøim»ኬsðኞĀas㚺㚮ðrn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈadempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xôheadĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roðtré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜtré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split("").map(e=>e.charCodeAt(0))),Zt=new Uint16Array("Ȁaglq\tɭ\0\0p;䀦os;䀧t;䀾t;䀼uot;䀢".split("").map(e=>e.charCodeAt(0)));var Vt;const Kt=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]),Yt=null!==(Vt=String.fromCodePoint)&&void 0!==Vt?Vt:function(e){let t="";return e>65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|1023&e),t+=String.fromCharCode(e),t};var Jt,Xt,Qt,en;function tn(e){return e>=Jt.ZERO&&e<=Jt.NINE}function nn(e){return e>=Jt.UPPER_A&&e<=Jt.UPPER_F||e>=Jt.LOWER_A&&e<=Jt.LOWER_F}function rn(e){return e===Jt.EQUALS||function(e){return e>=Jt.UPPER_A&&e<=Jt.UPPER_Z||e>=Jt.LOWER_A&&e<=Jt.LOWER_Z||tn(e)}(e)}!function(e){e[e.NUM=35]="NUM",e[e.SEMI=59]="SEMI",e[e.EQUALS=61]="EQUALS",e[e.ZERO=48]="ZERO",e[e.NINE=57]="NINE",e[e.LOWER_A=97]="LOWER_A",e[e.LOWER_F=102]="LOWER_F",e[e.LOWER_X=120]="LOWER_X",e[e.LOWER_Z=122]="LOWER_Z",e[e.UPPER_A=65]="UPPER_A",e[e.UPPER_F=70]="UPPER_F",e[e.UPPER_Z=90]="UPPER_Z"}(Jt||(Jt={})),function(e){e[e.VALUE_LENGTH=49152]="VALUE_LENGTH",e[e.BRANCH_LENGTH=16256]="BRANCH_LENGTH",e[e.JUMP_TABLE=127]="JUMP_TABLE"}(Xt||(Xt={})),function(e){e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity"}(Qt||(Qt={})),function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute"}(en||(en={}));class on{constructor(e,t,n){this.decodeTree=e,this.emitCodePoint=t,this.errors=n,this.state=Qt.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=en.Strict}startEntity(e){this.decodeMode=e,this.state=Qt.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1}write(e,t){switch(this.state){case Qt.EntityStart:return e.charCodeAt(t)===Jt.NUM?(this.state=Qt.NumericStart,this.consumed+=1,this.stateNumericStart(e,t+1)):(this.state=Qt.NamedEntity,this.stateNamedEntity(e,t));case Qt.NumericStart:return this.stateNumericStart(e,t);case Qt.NumericDecimal:return this.stateNumericDecimal(e,t);case Qt.NumericHex:return this.stateNumericHex(e,t);case Qt.NamedEntity:return this.stateNamedEntity(e,t)}}stateNumericStart(e,t){return t>=e.length?-1:(32|e.charCodeAt(t))===Jt.LOWER_X?(this.state=Qt.NumericHex,this.consumed+=1,this.stateNumericHex(e,t+1)):(this.state=Qt.NumericDecimal,this.stateNumericDecimal(e,t))}addToNumericResult(e,t,n,r){if(t!==n){const o=n-t;this.result=this.result*Math.pow(r,o)+parseInt(e.substr(t,o),r),this.consumed+=o}}stateNumericHex(e,t){const n=t;for(;t<e.length;){const r=e.charCodeAt(t);if(!tn(r)&&!nn(r))return this.addToNumericResult(e,n,t,16),this.emitNumericEntity(r,3);t+=1}return this.addToNumericResult(e,n,t,16),-1}stateNumericDecimal(e,t){const n=t;for(;t<e.length;){const r=e.charCodeAt(t);if(!tn(r))return this.addToNumericResult(e,n,t,10),this.emitNumericEntity(r,2);t+=1}return this.addToNumericResult(e,n,t,10),-1}emitNumericEntity(e,t){var n;if(this.consumed<=t)return null===(n=this.errors)||void 0===n||n.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(e===Jt.SEMI)this.consumed+=1;else if(this.decodeMode===en.Strict)return 0;return this.emitCodePoint(function(e){var t;return e>=55296&&e<=57343||e>1114111?65533:null!==(t=Kt.get(e))&&void 0!==t?t:e}(this.result),this.consumed),this.errors&&(e!==Jt.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(e,t){const{decodeTree:n}=this;let r=n[this.treeIndex],o=(r&Xt.VALUE_LENGTH)>>14;for(;t<e.length;t++,this.excess++){const a=e.charCodeAt(t);if(this.treeIndex=un(n,r,this.treeIndex+Math.max(1,o),a),this.treeIndex<0)return 0===this.result||this.decodeMode===en.Attribute&&(0===o||rn(a))?0:this.emitNotTerminatedNamedEntity();if(r=n[this.treeIndex],o=(r&Xt.VALUE_LENGTH)>>14,0!==o){if(a===Jt.SEMI)return this.emitNamedEntityData(this.treeIndex,o,this.consumed+this.excess);this.decodeMode!==en.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1}emitNotTerminatedNamedEntity(){var e;const{result:t,decodeTree:n}=this,r=(n[t]&Xt.VALUE_LENGTH)>>14;return this.emitNamedEntityData(t,r,this.consumed),null===(e=this.errors)||void 0===e||e.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(e,t,n){const{decodeTree:r}=this;return this.emitCodePoint(1===t?r[e]&~Xt.VALUE_LENGTH:r[e+1],n),3===t&&this.emitCodePoint(r[e+2],n),n}end(){var e;switch(this.state){case Qt.NamedEntity:return 0===this.result||this.decodeMode===en.Attribute&&this.result!==this.treeIndex?0:this.emitNotTerminatedNamedEntity();case Qt.NumericDecimal:return this.emitNumericEntity(0,2);case Qt.NumericHex:return this.emitNumericEntity(0,3);case Qt.NumericStart:return null===(e=this.errors)||void 0===e||e.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case Qt.EntityStart:return 0}}}function an(e){let t="";const n=new on(e,e=>t+=Yt(e));return function(e,r){let o=0,a=0;for(;(a=e.indexOf("&",a))>=0;){t+=e.slice(o,a),n.startEntity(r);const i=n.write(e,a+1);if(i<0){o=a+n.end();break}o=a+i,a=0===i?o+1:o}const i=t+e.slice(o);return t="",i}}function un(e,t,n,r){const o=(t&Xt.BRANCH_LENGTH)>>7,a=t&Xt.JUMP_TABLE;if(0===o)return 0!==a&&r===a?n:-1;if(a){const t=r-a;return t<0||t>=o?-1:e[n+t]-1}let i=n,u=i+o-1;for(;i<=u;){const t=i+u>>>1,n=e[t];if(n<r)i=t+1;else{if(!(n>r))return e[t+o];u=t-1}}return-1}const sn=an(Wt);function ln(e){for(let t=1;t<e.length;t++)e[t][0]+=e[t-1][0]+1;return e}an(Zt),new Map(ln([[9,"	"],[0,"
"],[22,"!"],[0,"""],[0,"#"],[0,"$"],[0,"%"],[0,"&"],[0,"'"],[0,"("],[0,")"],[0,"*"],[0,"+"],[0,","],[1,"."],[0,"/"],[10,":"],[0,";"],[0,{v:"<",n:8402,o:"<⃒"}],[0,{v:"=",n:8421,o:"=⃥"}],[0,{v:">",n:8402,o:">⃒"}],[0,"?"],[0,"@"],[26,"["],[0,"\"],[0,"]"],[0,"^"],[0,"_"],[0,"`"],[5,{n:106,o:"fj"}],[20,"{"],[0,"|"],[0,"}"],[34," "],[0,"¡"],[0,"¢"],[0,"£"],[0,"¤"],[0,"¥"],[0,"¦"],[0,"§"],[0,"¨"],[0,"©"],[0,"ª"],[0,"«"],[0,"¬"],[0,"­"],[0,"®"],[0,"¯"],[0,"°"],[0,"±"],[0,"²"],[0,"³"],[0,"´"],[0,"µ"],[0,"¶"],[0,"·"],[0,"¸"],[0,"¹"],[0,"º"],[0,"»"],[0,"¼"],[0,"½"],[0,"¾"],[0,"¿"],[0,"À"],[0,"Á"],[0,"Â"],[0,"Ã"],[0,"Ä"],[0,"Å"],[0,"Æ"],[0,"Ç"],[0,"È"],[0,"É"],[0,"Ê"],[0,"Ë"],[0,"Ì"],[0,"Í"],[0,"Î"],[0,"Ï"],[0,"Ð"],[0,"Ñ"],[0,"Ò"],[0,"Ó"],[0,"Ô"],[0,"Õ"],[0,"Ö"],[0,"×"],[0,"Ø"],[0,"Ù"],[0,"Ú"],[0,"Û"],[0,"Ü"],[0,"Ý"],[0,"Þ"],[0,"ß"],[0,"à"],[0,"á"],[0,"â"],[0,"ã"],[0,"ä"],[0,"å"],[0,"æ"],[0,"ç"],[0,"è"],[0,"é"],[0,"ê"],[0,"ë"],[0,"ì"],[0,"í"],[0,"î"],[0,"ï"],[0,"ð"],[0,"ñ"],[0,"ò"],[0,"ó"],[0,"ô"],[0,"õ"],[0,"ö"],[0,"÷"],[0,"ø"],[0,"ù"],[0,"ú"],[0,"û"],[0,"ü"],[0,"ý"],[0,"þ"],[0,"ÿ"],[0,"Ā"],[0,"ā"],[0,"Ă"],[0,"ă"],[0,"Ą"],[0,"ą"],[0,"Ć"],[0,"ć"],[0,"Ĉ"],[0,"ĉ"],[0,"Ċ"],[0,"ċ"],[0,"Č"],[0,"č"],[0,"Ď"],[0,"ď"],[0,"Đ"],[0,"đ"],[0,"Ē"],[0,"ē"],[2,"Ė"],[0,"ė"],[0,"Ę"],[0,"ę"],[0,"Ě"],[0,"ě"],[0,"Ĝ"],[0,"ĝ"],[0,"Ğ"],[0,"ğ"],[0,"Ġ"],[0,"ġ"],[0,"Ģ"],[1,"Ĥ"],[0,"ĥ"],[0,"Ħ"],[0,"ħ"],[0,"Ĩ"],[0,"ĩ"],[0,"Ī"],[0,"ī"],[2,"Į"],[0,"į"],[0,"İ"],[0,"ı"],[0,"IJ"],[0,"ij"],[0,"Ĵ"],[0,"ĵ"],[0,"Ķ"],[0,"ķ"],[0,"ĸ"],[0,"Ĺ"],[0,"ĺ"],[0,"Ļ"],[0,"ļ"],[0,"Ľ"],[0,"ľ"],[0,"Ŀ"],[0,"ŀ"],[0,"Ł"],[0,"ł"],[0,"Ń"],[0,"ń"],[0,"Ņ"],[0,"ņ"],[0,"Ň"],[0,"ň"],[0,"ʼn"],[0,"Ŋ"],[0,"ŋ"],[0,"Ō"],[0,"ō"],[2,"Ő"],[0,"ő"],[0,"Œ"],[0,"œ"],[0,"Ŕ"],[0,"ŕ"],[0,"Ŗ"],[0,"ŗ"],[0,"Ř"],[0,"ř"],[0,"Ś"],[0,"ś"],[0,"Ŝ"],[0,"ŝ"],[0,"Ş"],[0,"ş"],[0,"Š"],[0,"š"],[0,"Ţ"],[0,"ţ"],[0,"Ť"],[0,"ť"],[0,"Ŧ"],[0,"ŧ"],[0,"Ũ"],[0,"ũ"],[0,"Ū"],[0,"ū"],[0,"Ŭ"],[0,"ŭ"],[0,"Ů"],[0,"ů"],[0,"Ű"],[0,"ű"],[0,"Ų"],[0,"ų"],[0,"Ŵ"],[0,"ŵ"],[0,"Ŷ"],[0,"ŷ"],[0,"Ÿ"],[0,"Ź"],[0,"ź"],[0,"Ż"],[0,"ż"],[0,"Ž"],[0,"ž"],[19,"ƒ"],[34,"Ƶ"],[63,"ǵ"],[65,"ȷ"],[142,"ˆ"],[0,"ˇ"],[16,"˘"],[0,"˙"],[0,"˚"],[0,"˛"],[0,"˜"],[0,"˝"],[51,"̑"],[127,"Α"],[0,"Β"],[0,"Γ"],[0,"Δ"],[0,"Ε"],[0,"Ζ"],[0,"Η"],[0,"Θ"],[0,"Ι"],[0,"Κ"],[0,"Λ"],[0,"Μ"],[0,"Ν"],[0,"Ξ"],[0,"Ο"],[0,"Π"],[0,"Ρ"],[1,"Σ"],[0,"Τ"],[0,"Υ"],[0,"Φ"],[0,"Χ"],[0,"Ψ"],[0,"Ω"],[7,"α"],[0,"β"],[0,"γ"],[0,"δ"],[0,"ε"],[0,"ζ"],[0,"η"],[0,"θ"],[0,"ι"],[0,"κ"],[0,"λ"],[0,"μ"],[0,"ν"],[0,"ξ"],[0,"ο"],[0,"π"],[0,"ρ"],[0,"ς"],[0,"σ"],[0,"τ"],[0,"υ"],[0,"φ"],[0,"χ"],[0,"ψ"],[0,"ω"],[7,"ϑ"],[0,"ϒ"],[2,"ϕ"],[0,"ϖ"],[5,"Ϝ"],[0,"ϝ"],[18,"ϰ"],[0,"ϱ"],[3,"ϵ"],[0,"϶"],[10,"Ё"],[0,"Ђ"],[0,"Ѓ"],[0,"Є"],[0,"Ѕ"],[0,"І"],[0,"Ї"],[0,"Ј"],[0,"Љ"],[0,"Њ"],[0,"Ћ"],[0,"Ќ"],[1,"Ў"],[0,"Џ"],[0,"А"],[0,"Б"],[0,"В"],[0,"Г"],[0,"Д"],[0,"Е"],[0,"Ж"],[0,"З"],[0,"И"],[0,"Й"],[0,"К"],[0,"Л"],[0,"М"],[0,"Н"],[0,"О"],[0,"П"],[0,"Р"],[0,"С"],[0,"Т"],[0,"У"],[0,"Ф"],[0,"Х"],[0,"Ц"],[0,"Ч"],[0,"Ш"],[0,"Щ"],[0,"Ъ"],[0,"Ы"],[0,"Ь"],[0,"Э"],[0,"Ю"],[0,"Я"],[0,"а"],[0,"б"],[0,"в"],[0,"г"],[0,"д"],[0,"е"],[0,"ж"],[0,"з"],[0,"и"],[0,"й"],[0,"к"],[0,"л"],[0,"м"],[0,"н"],[0,"о"],[0,"п"],[0,"р"],[0,"с"],[0,"т"],[0,"у"],[0,"ф"],[0,"х"],[0,"ц"],[0,"ч"],[0,"ш"],[0,"щ"],[0,"ъ"],[0,"ы"],[0,"ь"],[0,"э"],[0,"ю"],[0,"я"],[1,"ё"],[0,"ђ"],[0,"ѓ"],[0,"є"],[0,"ѕ"],[0,"і"],[0,"ї"],[0,"ј"],[0,"љ"],[0,"њ"],[0,"ћ"],[0,"ќ"],[1,"ў"],[0,"џ"],[7074," "],[0," "],[0," "],[0," "],[1," "],[0," "],[0," "],[0," "],[0,"​"],[0,"‌"],[0,"‍"],[0,"‎"],[0,"‏"],[0,"‐"],[2,"–"],[0,"—"],[0,"―"],[0,"‖"],[1,"‘"],[0,"’"],[0,"‚"],[1,"“"],[0,"”"],[0,"„"],[1,"†"],[0,"‡"],[0,"•"],[2,"‥"],[0,"…"],[9,"‰"],[0,"‱"],[0,"′"],[0,"″"],[0,"‴"],[0,"‵"],[3,"‹"],[0,"›"],[3,"‾"],[2,"⁁"],[1,"⁃"],[0,"⁄"],[10,"⁏"],[7,"⁗"],[7,{v:" ",n:8202,o:"  "}],[0,"⁠"],[0,"⁡"],[0,"⁢"],[0,"⁣"],[72,"€"],[46,"⃛"],[0,"⃜"],[37,"ℂ"],[2,"℅"],[4,"ℊ"],[0,"ℋ"],[0,"ℌ"],[0,"ℍ"],[0,"ℎ"],[0,"ℏ"],[0,"ℐ"],[0,"ℑ"],[0,"ℒ"],[0,"ℓ"],[1,"ℕ"],[0,"№"],[0,"℗"],[0,"℘"],[0,"ℙ"],[0,"ℚ"],[0,"ℛ"],[0,"ℜ"],[0,"ℝ"],[0,"℞"],[3,"™"],[1,"ℤ"],[2,"℧"],[0,"ℨ"],[0,"℩"],[2,"ℬ"],[0,"ℭ"],[1,"ℯ"],[0,"ℰ"],[0,"ℱ"],[1,"ℳ"],[0,"ℴ"],[0,"ℵ"],[0,"ℶ"],[0,"ℷ"],[0,"ℸ"],[12,"ⅅ"],[0,"ⅆ"],[0,"ⅇ"],[0,"ⅈ"],[10,"⅓"],[0,"⅔"],[0,"⅕"],[0,"⅖"],[0,"⅗"],[0,"⅘"],[0,"⅙"],[0,"⅚"],[0,"⅛"],[0,"⅜"],[0,"⅝"],[0,"⅞"],[49,"←"],[0,"↑"],[0,"→"],[0,"↓"],[0,"↔"],[0,"↕"],[0,"↖"],[0,"↗"],[0,"↘"],[0,"↙"],[0,"↚"],[0,"↛"],[1,{v:"↝",n:824,o:"↝̸"}],[0,"↞"],[0,"↟"],[0,"↠"],[0,"↡"],[0,"↢"],[0,"↣"],[0,"↤"],[0,"↥"],[0,"↦"],[0,"↧"],[1,"↩"],[0,"↪"],[0,"↫"],[0,"↬"],[0,"↭"],[0,"↮"],[1,"↰"],[0,"↱"],[0,"↲"],[0,"↳"],[1,"↵"],[0,"↶"],[0,"↷"],[2,"↺"],[0,"↻"],[0,"↼"],[0,"↽"],[0,"↾"],[0,"↿"],[0,"⇀"],[0,"⇁"],[0,"⇂"],[0,"⇃"],[0,"⇄"],[0,"⇅"],[0,"⇆"],[0,"⇇"],[0,"⇈"],[0,"⇉"],[0,"⇊"],[0,"⇋"],[0,"⇌"],[0,"⇍"],[0,"⇎"],[0,"⇏"],[0,"⇐"],[0,"⇑"],[0,"⇒"],[0,"⇓"],[0,"⇔"],[0,"⇕"],[0,"⇖"],[0,"⇗"],[0,"⇘"],[0,"⇙"],[0,"⇚"],[0,"⇛"],[1,"⇝"],[6,"⇤"],[0,"⇥"],[15,"⇵"],[7,"⇽"],[0,"⇾"],[0,"⇿"],[0,"∀"],[0,"∁"],[0,{v:"∂",n:824,o:"∂̸"}],[0,"∃"],[0,"∄"],[0,"∅"],[1,"∇"],[0,"∈"],[0,"∉"],[1,"∋"],[0,"∌"],[2,"∏"],[0,"∐"],[0,"∑"],[0,"−"],[0,"∓"],[0,"∔"],[1,"∖"],[0,"∗"],[0,"∘"],[1,"√"],[2,"∝"],[0,"∞"],[0,"∟"],[0,{v:"∠",n:8402,o:"∠⃒"}],[0,"∡"],[0,"∢"],[0,"∣"],[0,"∤"],[0,"∥"],[0,"∦"],[0,"∧"],[0,"∨"],[0,{v:"∩",n:65024,o:"∩︀"}],[0,{v:"∪",n:65024,o:"∪︀"}],[0,"∫"],[0,"∬"],[0,"∭"],[0,"∮"],[0,"∯"],[0,"∰"],[0,"∱"],[0,"∲"],[0,"∳"],[0,"∴"],[0,"∵"],[0,"∶"],[0,"∷"],[0,"∸"],[1,"∺"],[0,"∻"],[0,{v:"∼",n:8402,o:"∼⃒"}],[0,{v:"∽",n:817,o:"∽̱"}],[0,{v:"∾",n:819,o:"∾̳"}],[0,"∿"],[0,"≀"],[0,"≁"],[0,{v:"≂",n:824,o:"≂̸"}],[0,"≃"],[0,"≄"],[0,"≅"],[0,"≆"],[0,"≇"],[0,"≈"],[0,"≉"],[0,"≊"],[0,{v:"≋",n:824,o:"≋̸"}],[0,"≌"],[0,{v:"≍",n:8402,o:"≍⃒"}],[0,{v:"≎",n:824,o:"≎̸"}],[0,{v:"≏",n:824,o:"≏̸"}],[0,{v:"≐",n:824,o:"≐̸"}],[0,"≑"],[0,"≒"],[0,"≓"],[0,"≔"],[0,"≕"],[0,"≖"],[0,"≗"],[1,"≙"],[0,"≚"],[1,"≜"],[2,"≟"],[0,"≠"],[0,{v:"≡",n:8421,o:"≡⃥"}],[0,"≢"],[1,{v:"≤",n:8402,o:"≤⃒"}],[0,{v:"≥",n:8402,o:"≥⃒"}],[0,{v:"≦",n:824,o:"≦̸"}],[0,{v:"≧",n:824,o:"≧̸"}],[0,{v:"≨",n:65024,o:"≨︀"}],[0,{v:"≩",n:65024,o:"≩︀"}],[0,{v:"≪",n:new Map(ln([[824,"≪̸"],[7577,"≪⃒"]]))}],[0,{v:"≫",n:new Map(ln([[824,"≫̸"],[7577,"≫⃒"]]))}],[0,"≬"],[0,"≭"],[0,"≮"],[0,"≯"],[0,"≰"],[0,"≱"],[0,"≲"],[0,"≳"],[0,"≴"],[0,"≵"],[0,"≶"],[0,"≷"],[0,"≸"],[0,"≹"],[0,"≺"],[0,"≻"],[0,"≼"],[0,"≽"],[0,"≾"],[0,{v:"≿",n:824,o:"≿̸"}],[0,"⊀"],[0,"⊁"],[0,{v:"⊂",n:8402,o:"⊂⃒"}],[0,{v:"⊃",n:8402,o:"⊃⃒"}],[0,"⊄"],[0,"⊅"],[0,"⊆"],[0,"⊇"],[0,"⊈"],[0,"⊉"],[0,{v:"⊊",n:65024,o:"⊊︀"}],[0,{v:"⊋",n:65024,o:"⊋︀"}],[1,"⊍"],[0,"⊎"],[0,{v:"⊏",n:824,o:"⊏̸"}],[0,{v:"⊐",n:824,o:"⊐̸"}],[0,"⊑"],[0,"⊒"],[0,{v:"⊓",n:65024,o:"⊓︀"}],[0,{v:"⊔",n:65024,o:"⊔︀"}],[0,"⊕"],[0,"⊖"],[0,"⊗"],[0,"⊘"],[0,"⊙"],[0,"⊚"],[0,"⊛"],[1,"⊝"],[0,"⊞"],[0,"⊟"],[0,"⊠"],[0,"⊡"],[0,"⊢"],[0,"⊣"],[0,"⊤"],[0,"⊥"],[1,"⊧"],[0,"⊨"],[0,"⊩"],[0,"⊪"],[0,"⊫"],[0,"⊬"],[0,"⊭"],[0,"⊮"],[0,"⊯"],[0,"⊰"],[1,"⊲"],[0,"⊳"],[0,{v:"⊴",n:8402,o:"⊴⃒"}],[0,{v:"⊵",n:8402,o:"⊵⃒"}],[0,"⊶"],[0,"⊷"],[0,"⊸"],[0,"⊹"],[0,"⊺"],[0,"⊻"],[1,"⊽"],[0,"⊾"],[0,"⊿"],[0,"⋀"],[0,"⋁"],[0,"⋂"],[0,"⋃"],[0,"⋄"],[0,"⋅"],[0,"⋆"],[0,"⋇"],[0,"⋈"],[0,"⋉"],[0,"⋊"],[0,"⋋"],[0,"⋌"],[0,"⋍"],[0,"⋎"],[0,"⋏"],[0,"⋐"],[0,"⋑"],[0,"⋒"],[0,"⋓"],[0,"⋔"],[0,"⋕"],[0,"⋖"],[0,"⋗"],[0,{v:"⋘",n:824,o:"⋘̸"}],[0,{v:"⋙",n:824,o:"⋙̸"}],[0,{v:"⋚",n:65024,o:"⋚︀"}],[0,{v:"⋛",n:65024,o:"⋛︀"}],[2,"⋞"],[0,"⋟"],[0,"⋠"],[0,"⋡"],[0,"⋢"],[0,"⋣"],[2,"⋦"],[0,"⋧"],[0,"⋨"],[0,"⋩"],[0,"⋪"],[0,"⋫"],[0,"⋬"],[0,"⋭"],[0,"⋮"],[0,"⋯"],[0,"⋰"],[0,"⋱"],[0,"⋲"],[0,"⋳"],[0,"⋴"],[0,{v:"⋵",n:824,o:"⋵̸"}],[0,"⋶"],[0,"⋷"],[1,{v:"⋹",n:824,o:"⋹̸"}],[0,"⋺"],[0,"⋻"],[0,"⋼"],[0,"⋽"],[0,"⋾"],[6,"⌅"],[0,"⌆"],[1,"⌈"],[0,"⌉"],[0,"⌊"],[0,"⌋"],[0,"⌌"],[0,"⌍"],[0,"⌎"],[0,"⌏"],[0,"⌐"],[1,"⌒"],[0,"⌓"],[1,"⌕"],[0,"⌖"],[5,"⌜"],[0,"⌝"],[0,"⌞"],[0,"⌟"],[2,"⌢"],[0,"⌣"],[9,"⌭"],[0,"⌮"],[7,"⌶"],[6,"⌽"],[1,"⌿"],[60,"⍼"],[51,"⎰"],[0,"⎱"],[2,"⎴"],[0,"⎵"],[0,"⎶"],[37,"⏜"],[0,"⏝"],[0,"⏞"],[0,"⏟"],[2,"⏢"],[4,"⏧"],[59,"␣"],[164,"Ⓢ"],[55,"─"],[1,"│"],[9,"┌"],[3,"┐"],[3,"└"],[3,"┘"],[3,"├"],[7,"┤"],[7,"┬"],[7,"┴"],[7,"┼"],[19,"═"],[0,"║"],[0,"╒"],[0,"╓"],[0,"╔"],[0,"╕"],[0,"╖"],[0,"╗"],[0,"╘"],[0,"╙"],[0,"╚"],[0,"╛"],[0,"╜"],[0,"╝"],[0,"╞"],[0,"╟"],[0,"╠"],[0,"╡"],[0,"╢"],[0,"╣"],[0,"╤"],[0,"╥"],[0,"╦"],[0,"╧"],[0,"╨"],[0,"╩"],[0,"╪"],[0,"╫"],[0,"╬"],[19,"▀"],[3,"▄"],[3,"█"],[8,"░"],[0,"▒"],[0,"▓"],[13,"□"],[8,"▪"],[0,"▫"],[1,"▭"],[0,"▮"],[2,"▱"],[1,"△"],[0,"▴"],[0,"▵"],[2,"▸"],[0,"▹"],[3,"▽"],[0,"▾"],[0,"▿"],[2,"◂"],[0,"◃"],[6,"◊"],[0,"○"],[32,"◬"],[2,"◯"],[8,"◸"],[0,"◹"],[0,"◺"],[0,"◻"],[0,"◼"],[8,"★"],[0,"☆"],[7,"☎"],[49,"♀"],[1,"♂"],[29,"♠"],[2,"♣"],[1,"♥"],[0,"♦"],[3,"♪"],[2,"♭"],[0,"♮"],[0,"♯"],[163,"✓"],[3,"✗"],[8,"✠"],[21,"✶"],[33,"❘"],[25,"❲"],[0,"❳"],[84,"⟈"],[0,"⟉"],[28,"⟦"],[0,"⟧"],[0,"⟨"],[0,"⟩"],[0,"⟪"],[0,"⟫"],[0,"⟬"],[0,"⟭"],[7,"⟵"],[0,"⟶"],[0,"⟷"],[0,"⟸"],[0,"⟹"],[0,"⟺"],[1,"⟼"],[2,"⟿"],[258,"⤂"],[0,"⤃"],[0,"⤄"],[0,"⤅"],[6,"⤌"],[0,"⤍"],[0,"⤎"],[0,"⤏"],[0,"⤐"],[0,"⤑"],[0,"⤒"],[0,"⤓"],[2,"⤖"],[2,"⤙"],[0,"⤚"],[0,"⤛"],[0,"⤜"],[0,"⤝"],[0,"⤞"],[0,"⤟"],[0,"⤠"],[2,"⤣"],[0,"⤤"],[0,"⤥"],[0,"⤦"],[0,"⤧"],[0,"⤨"],[0,"⤩"],[0,"⤪"],[8,{v:"⤳",n:824,o:"⤳̸"}],[1,"⤵"],[0,"⤶"],[0,"⤷"],[0,"⤸"],[0,"⤹"],[2,"⤼"],[0,"⤽"],[7,"⥅"],[2,"⥈"],[0,"⥉"],[0,"⥊"],[0,"⥋"],[2,"⥎"],[0,"⥏"],[0,"⥐"],[0,"⥑"],[0,"⥒"],[0,"⥓"],[0,"⥔"],[0,"⥕"],[0,"⥖"],[0,"⥗"],[0,"⥘"],[0,"⥙"],[0,"⥚"],[0,"⥛"],[0,"⥜"],[0,"⥝"],[0,"⥞"],[0,"⥟"],[0,"⥠"],[0,"⥡"],[0,"⥢"],[0,"⥣"],[0,"⥤"],[0,"⥥"],[0,"⥦"],[0,"⥧"],[0,"⥨"],[0,"⥩"],[0,"⥪"],[0,"⥫"],[0,"⥬"],[0,"⥭"],[0,"⥮"],[0,"⥯"],[0,"⥰"],[0,"⥱"],[0,"⥲"],[0,"⥳"],[0,"⥴"],[0,"⥵"],[0,"⥶"],[1,"⥸"],[0,"⥹"],[1,"⥻"],[0,"⥼"],[0,"⥽"],[0,"⥾"],[0,"⥿"],[5,"⦅"],[0,"⦆"],[4,"⦋"],[0,"⦌"],[0,"⦍"],[0,"⦎"],[0,"⦏"],[0,"⦐"],[0,"⦑"],[0,"⦒"],[0,"⦓"],[0,"⦔"],[0,"⦕"],[0,"⦖"],[3,"⦚"],[1,"⦜"],[0,"⦝"],[6,"⦤"],[0,"⦥"],[0,"⦦"],[0,"⦧"],[0,"⦨"],[0,"⦩"],[0,"⦪"],[0,"⦫"],[0,"⦬"],[0,"⦭"],[0,"⦮"],[0,"⦯"],[0,"⦰"],[0,"⦱"],[0,"⦲"],[0,"⦳"],[0,"⦴"],[0,"⦵"],[0,"⦶"],[0,"⦷"],[1,"⦹"],[1,"⦻"],[0,"⦼"],[1,"⦾"],[0,"⦿"],[0,"⧀"],[0,"⧁"],[0,"⧂"],[0,"⧃"],[0,"⧄"],[0,"⧅"],[3,"⧉"],[3,"⧍"],[0,"⧎"],[0,{v:"⧏",n:824,o:"⧏̸"}],[0,{v:"⧐",n:824,o:"⧐̸"}],[11,"⧜"],[0,"⧝"],[0,"⧞"],[4,"⧣"],[0,"⧤"],[0,"⧥"],[5,"⧫"],[8,"⧴"],[1,"⧶"],[9,"⨀"],[0,"⨁"],[0,"⨂"],[1,"⨄"],[1,"⨆"],[5,"⨌"],[0,"⨍"],[2,"⨐"],[0,"⨑"],[0,"⨒"],[0,"⨓"],[0,"⨔"],[0,"⨕"],[0,"⨖"],[0,"⨗"],[10,"⨢"],[0,"⨣"],[0,"⨤"],[0,"⨥"],[0,"⨦"],[0,"⨧"],[1,"⨩"],[0,"⨪"],[2,"⨭"],[0,"⨮"],[0,"⨯"],[0,"⨰"],[0,"⨱"],[1,"⨳"],[0,"⨴"],[0,"⨵"],[0,"⨶"],[0,"⨷"],[0,"⨸"],[0,"⨹"],[0,"⨺"],[0,"⨻"],[0,"⨼"],[2,"⨿"],[0,"⩀"],[1,"⩂"],[0,"⩃"],[0,"⩄"],[0,"⩅"],[0,"⩆"],[0,"⩇"],[0,"⩈"],[0,"⩉"],[0,"⩊"],[0,"⩋"],[0,"⩌"],[0,"⩍"],[2,"⩐"],[2,"⩓"],[0,"⩔"],[0,"⩕"],[0,"⩖"],[0,"⩗"],[0,"⩘"],[1,"⩚"],[0,"⩛"],[0,"⩜"],[0,"⩝"],[1,"⩟"],[6,"⩦"],[3,"⩪"],[2,{v:"⩭",n:824,o:"⩭̸"}],[0,"⩮"],[0,"⩯"],[0,{v:"⩰",n:824,o:"⩰̸"}],[0,"⩱"],[0,"⩲"],[0,"⩳"],[0,"⩴"],[0,"⩵"],[1,"⩷"],[0,"⩸"],[0,"⩹"],[0,"⩺"],[0,"⩻"],[0,"⩼"],[0,{v:"⩽",n:824,o:"⩽̸"}],[0,{v:"⩾",n:824,o:"⩾̸"}],[0,"⩿"],[0,"⪀"],[0,"⪁"],[0,"⪂"],[0,"⪃"],[0,"⪄"],[0,"⪅"],[0,"⪆"],[0,"⪇"],[0,"⪈"],[0,"⪉"],[0,"⪊"],[0,"⪋"],[0,"⪌"],[0,"⪍"],[0,"⪎"],[0,"⪏"],[0,"⪐"],[0,"⪑"],[0,"⪒"],[0,"⪓"],[0,"⪔"],[0,"⪕"],[0,"⪖"],[0,"⪗"],[0,"⪘"],[0,"⪙"],[0,"⪚"],[2,"⪝"],[0,"⪞"],[0,"⪟"],[0,"⪠"],[0,{v:"⪡",n:824,o:"⪡̸"}],[0,{v:"⪢",n:824,o:"⪢̸"}],[1,"⪤"],[0,"⪥"],[0,"⪦"],[0,"⪧"],[0,"⪨"],[0,"⪩"],[0,"⪪"],[0,"⪫"],[0,{v:"⪬",n:65024,o:"⪬︀"}],[0,{v:"⪭",n:65024,o:"⪭︀"}],[0,"⪮"],[0,{v:"⪯",n:824,o:"⪯̸"}],[0,{v:"⪰",n:824,o:"⪰̸"}],[2,"⪳"],[0,"⪴"],[0,"⪵"],[0,"⪶"],[0,"⪷"],[0,"⪸"],[0,"⪹"],[0,"⪺"],[0,"⪻"],[0,"⪼"],[0,"⪽"],[0,"⪾"],[0,"⪿"],[0,"⫀"],[0,"⫁"],[0,"⫂"],[0,"⫃"],[0,"⫄"],[0,{v:"⫅",n:824,o:"⫅̸"}],[0,{v:"⫆",n:824,o:"⫆̸"}],[0,"⫇"],[0,"⫈"],[2,{v:"⫋",n:65024,o:"⫋︀"}],[0,{v:"⫌",n:65024,o:"⫌︀"}],[2,"⫏"],[0,"⫐"],[0,"⫑"],[0,"⫒"],[0,"⫓"],[0,"⫔"],[0,"⫕"],[0,"⫖"],[0,"⫗"],[0,"⫘"],[0,"⫙"],[0,"⫚"],[0,"⫛"],[8,"⫤"],[1,"⫦"],[0,"⫧"],[0,"⫨"],[0,"⫩"],[1,"⫫"],[0,"⫬"],[0,"⫭"],[0,"⫮"],[0,"⫯"],[0,"⫰"],[0,"⫱"],[0,"⫲"],[0,"⫳"],[9,{v:"⫽",n:8421,o:"⫽⃥"}],[44343,{n:new Map(ln([[56476,"𝒜"],[1,"𝒞"],[0,"𝒟"],[2,"𝒢"],[2,"𝒥"],[0,"𝒦"],[2,"𝒩"],[0,"𝒪"],[0,"𝒫"],[0,"𝒬"],[1,"𝒮"],[0,"𝒯"],[0,"𝒰"],[0,"𝒱"],[0,"𝒲"],[0,"𝒳"],[0,"𝒴"],[0,"𝒵"],[0,"𝒶"],[0,"𝒷"],[0,"𝒸"],[0,"𝒹"],[1,"𝒻"],[1,"𝒽"],[0,"𝒾"],[0,"𝒿"],[0,"𝓀"],[0,"𝓁"],[0,"𝓂"],[0,"𝓃"],[1,"𝓅"],[0,"𝓆"],[0,"𝓇"],[0,"𝓈"],[0,"𝓉"],[0,"𝓊"],[0,"𝓋"],[0,"𝓌"],[0,"𝓍"],[0,"𝓎"],[0,"𝓏"],[52,"𝔄"],[0,"𝔅"],[1,"𝔇"],[0,"𝔈"],[0,"𝔉"],[0,"𝔊"],[2,"𝔍"],[0,"𝔎"],[0,"𝔏"],[0,"𝔐"],[0,"𝔑"],[0,"𝔒"],[0,"𝔓"],[0,"𝔔"],[1,"𝔖"],[0,"𝔗"],[0,"𝔘"],[0,"𝔙"],[0,"𝔚"],[0,"𝔛"],[0,"𝔜"],[1,"𝔞"],[0,"𝔟"],[0,"𝔠"],[0,"𝔡"],[0,"𝔢"],[0,"𝔣"],[0,"𝔤"],[0,"𝔥"],[0,"𝔦"],[0,"𝔧"],[0,"𝔨"],[0,"𝔩"],[0,"𝔪"],[0,"𝔫"],[0,"𝔬"],[0,"𝔭"],[0,"𝔮"],[0,"𝔯"],[0,"𝔰"],[0,"𝔱"],[0,"𝔲"],[0,"𝔳"],[0,"𝔴"],[0,"𝔵"],[0,"𝔶"],[0,"𝔷"],[0,"𝔸"],[0,"𝔹"],[1,"𝔻"],[0,"𝔼"],[0,"𝔽"],[0,"𝔾"],[1,"𝕀"],[0,"𝕁"],[0,"𝕂"],[0,"𝕃"],[0,"𝕄"],[1,"𝕆"],[3,"𝕊"],[0,"𝕋"],[0,"𝕌"],[0,"𝕍"],[0,"𝕎"],[0,"𝕏"],[0,"𝕐"],[1,"𝕒"],[0,"𝕓"],[0,"𝕔"],[0,"𝕕"],[0,"𝕖"],[0,"𝕗"],[0,"𝕘"],[0,"𝕙"],[0,"𝕚"],[0,"𝕛"],[0,"𝕜"],[0,"𝕝"],[0,"𝕞"],[0,"𝕟"],[0,"𝕠"],[0,"𝕡"],[0,"𝕢"],[0,"𝕣"],[0,"𝕤"],[0,"𝕥"],[0,"𝕦"],[0,"𝕧"],[0,"𝕨"],[0,"𝕩"],[0,"𝕪"],[0,"𝕫"]]))}],[8906,"ff"],[0,"fi"],[0,"fl"],[0,"ffi"],[0,"ffl"]]));const cn=new Map([[34,"""],[38,"&"],[39,"'"],[60,"<"],[62,">"]]);function fn(e,t){return function(n){let r,o=0,a="";for(;r=e.exec(n);)o!==r.index&&(a+=n.substring(o,r.index)),a+=t.get(r[0].charCodeAt(0)),o=r.index+1;return a+n.substring(o)}}var pn,dn;function hn(e){return"[object String]"===function(e){return Object.prototype.toString.call(e)}(e)}String.prototype.codePointAt,fn(/[&<>'"]/g,cn),fn(/["&\u00A0]/g,new Map([[34,"""],[38,"&"],[160," "]])),fn(/[&<>\u00A0]/g,new Map([[38,"&"],[60,"<"],[62,">"],[160," "]])),function(e){e[e.XML=0]="XML",e[e.HTML=1]="HTML"}(pn||(pn={})),function(e){e[e.UTF8=0]="UTF8",e[e.ASCII=1]="ASCII",e[e.Extensive=2]="Extensive",e[e.Attribute=3]="Attribute",e[e.Text=4]="Text"}(dn||(dn={}));const mn=Object.prototype.hasOwnProperty;function gn(e,t){return mn.call(e,t)}function bn(e){return Array.prototype.slice.call(arguments,1).forEach(function(t){if(t){if("object"!=typeof t)throw new TypeError(t+"must be object");Object.keys(t).forEach(function(n){e[n]=t[n]})}}),e}function yn(e,t,n){return[].concat(e.slice(0,t),n,e.slice(t+1))}function Dn(e){return!(e>=55296&&e<=57343||e>=64976&&e<=65007||!(65535&~e&&65534!=(65535&e))||e>=0&&e<=8||11===e||e>=14&&e<=31||e>=127&&e<=159||e>1114111)}function kn(e){if(e>65535){const t=55296+((e-=65536)>>10),n=56320+(1023&e);return String.fromCharCode(t,n)}return String.fromCharCode(e)}const wn=/\\([!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])/g,vn=new RegExp(wn.source+"|"+/&([a-z#][a-z0-9]{1,31});/gi.source,"gi"),Fn=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i;function Cn(e){return e.indexOf("\\")<0?e:e.replace(wn,"$1")}function En(e){return e.indexOf("\\")<0&&e.indexOf("&")<0?e:e.replace(vn,function(e,t,n){return t||function(e,t){if(35===t.charCodeAt(0)&&Fn.test(t)){const n="x"===t[1].toLowerCase()?parseInt(t.slice(2),16):parseInt(t.slice(1),10);return Dn(n)?kn(n):e}const n=function(e,t=en.Legacy){return sn(e,t)}(e);return n!==e?n:e}(e,n)})}const An=/[&<>"]/,xn=/[&<>"]/g,Sn={"&":"&","<":"<",">":">",'"':"""};function Bn(e){return Sn[e]}function Tn(e){return An.test(e)?e.replace(xn,Bn):e}const Ln=/[.?*+^$[\]\\(){}|-]/g;function jn(e){return e.replace(Ln,"\\$&")}function Mn(e){switch(e){case 9:case 32:return!0}return!1}function On(e){if(e>=8192&&e<=8202)return!0;switch(e){case 9:case 10:case 11:case 12:case 13:case 32:case 160:case 5760:case 8239:case 8287:case 12288:return!0}return!1}function In(e){return qt.test(e)||zt.test(e)}function Rn(e){return In(kn(e))}function Nn(e){switch(e){case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 124:case 125:case 126:return!0;default:return!1}}function Pn(e){return e=e.trim().replace(/\s+/g," "),"Ṿ"==="ẞ".toLowerCase()&&(e=e.replace(/ẞ/g,"ß")),e.toLowerCase().toUpperCase()}function qn(e){return 32===e||9===e||10===e||13===e}function zn(e){let t=0;for(;t<e.length&&qn(e.charCodeAt(t));t++);let n=e.length-1;for(;n>=t&&qn(e.charCodeAt(n));n--);return e.slice(t,n+1)}const $n={mdurl:e,ucmicro:t};function Gn(e,t,n){let r,o,a,i;const u=e.posMax,s=e.pos;for(e.pos=t+1,r=1;e.pos<u;){if(a=e.src.charCodeAt(e.pos),93===a&&(r--,0===r)){o=!0;break}if(i=e.pos,e.md.inline.skipToken(e),91===a)if(i===e.pos-1)r++;else if(n)return e.pos=s,-1}let l=-1;return o&&(l=e.pos),e.pos=s,l}function Un(e,t,n){let r,o=t;const a={ok:!1,pos:0,str:""};if(60===e.charCodeAt(o)){for(o++;o<n;){if(r=e.charCodeAt(o),10===r)return a;if(60===r)return a;if(62===r)return a.pos=o+1,a.str=En(e.slice(t+1,o)),a.ok=!0,a;92===r&&o+1<n?o+=2:o++}return a}let i=0;for(;o<n&&(r=e.charCodeAt(o),32!==r)&&!(r<32||127===r);)if(92===r&&o+1<n){if(32===e.charCodeAt(o+1))break;o+=2}else{if(40===r&&(i++,i>32))return a;if(41===r){if(0===i)break;i--}o++}return t===o||0!==i||(a.str=En(e.slice(t,o)),a.pos=o,a.ok=!0),a}function Hn(e,t,n,r){let o,a=t;const i={ok:!1,can_continue:!1,pos:0,str:"",marker:0};if(r)i.str=r.str,i.marker=r.marker;else{if(a>=n)return i;let r=e.charCodeAt(a);if(34!==r&&39!==r&&40!==r)return i;t++,a++,40===r&&(r=41),i.marker=r}for(;a<n;){if(o=e.charCodeAt(a),o===i.marker)return i.pos=a+1,i.str+=En(e.slice(t,a)),i.ok=!0,i;if(40===o&&41===i.marker)return i;92===o&&a+1<n&&a++,a++}return i.can_continue=!0,i.str+=En(e.slice(t,a)),i}const Wn={};function Zn(){this.rules=bn({},Wn)}Wn.code_inline=function(e,t,n,r,o){const a=e[t];return"<code"+o.renderAttrs(a)+">"+Tn(a.content)+"</code>"},Wn.code_block=function(e,t,n,r,o){const a=e[t];return"<pre"+o.renderAttrs(a)+"><code>"+Tn(e[t].content)+"</code></pre>\n"},Wn.fence=function(e,t,n,r,o){const a=e[t],i=a.info?En(a.info).trim():"";let u,s="",l="";if(i){const e=i.split(/(\s+)/g);s=e[0],l=e.slice(2).join("")}if(u=n.highlight&&n.highlight(a.content,s,l)||Tn(a.content),0===u.indexOf("<pre"))return u+"\n";if(i){const e=a.attrIndex("class"),t=a.attrs?a.attrs.slice():[];e<0?t.push(["class",n.langPrefix+s]):(t[e]=t[e].slice(),t[e][1]+=" "+n.langPrefix+s);const r={attrs:t};return`<pre><code${o.renderAttrs(r)}>${u}</code></pre>\n`}return`<pre><code${o.renderAttrs(a)}>${u}</code></pre>\n`},Wn.image=function(e,t,n,r,o){const a=e[t];return a.attrs[a.attrIndex("alt")][1]=o.renderInlineAsText(a.children,n,r),o.renderToken(e,t,n)},Wn.hardbreak=function(e,t,n){return n.xhtmlOut?"<br />\n":"<br>\n"},Wn.softbreak=function(e,t,n){return n.breaks?n.xhtmlOut?"<br />\n":"<br>\n":"\n"},Wn.text=function(e,t){return Tn(e[t].content)},Wn.html_block=function(e,t){return e[t].content},Wn.html_inline=function(e,t){return e[t].content},Zn.prototype.renderAttrs=function(e){let t,n,r;if(!e.attrs)return"";for(r="",t=0,n=e.attrs.length;t<n;t++)r+=" "+Tn(e.attrs[t][0])+'="'+Tn(e.attrs[t][1])+'"';return r},Zn.prototype.renderToken=function(e,t,n){const r=e[t];let o="";if(r.hidden)return"";r.block&&-1!==r.nesting&&t&&e[t-1].hidden&&(o+="\n"),o+=(-1===r.nesting?"</":"<")+r.tag,o+=this.renderAttrs(r),0===r.nesting&&n.xhtmlOut&&(o+=" /");let a=!1;if(r.block&&(a=!0,1===r.nesting&&t+1<e.length)){const n=e[t+1];("inline"===n.type||n.hidden||-1===n.nesting&&n.tag===r.tag)&&(a=!1)}return o+=a?">\n":">",o},Zn.prototype.renderInline=function(e,t,n){let r="";const o=this.rules;for(let a=0,i=e.length;a<i;a++){const i=e[a].type;void 0!==o[i]?r+=o[i](e,a,t,n,this):r+=this.renderToken(e,a,t)}return r},Zn.prototype.renderInlineAsText=function(e,t,n){let r="";for(let o=0,a=e.length;o<a;o++)switch(e[o].type){case"text":case"html_inline":case"html_block":r+=e[o].content;break;case"image":r+=this.renderInlineAsText(e[o].children,t,n);break;case"softbreak":case"hardbreak":r+="\n"}return r},Zn.prototype.render=function(e,t,n){let r="";const o=this.rules;for(let a=0,i=e.length;a<i;a++){const i=e[a].type;"inline"===i?r+=this.renderInline(e[a].children,t,n):void 0!==o[i]?r+=o[i](e,a,t,n,this):r+=this.renderToken(e,a,t,n)}return r};const Vn=Zn;function Kn(){this.__rules__=[],this.__cache__=null}Kn.prototype.__find__=function(e){for(let t=0;t<this.__rules__.length;t++)if(this.__rules__[t].name===e)return t;return-1},Kn.prototype.__compile__=function(){const e=this,t=[""];e.__rules__.forEach(function(e){e.enabled&&e.alt.forEach(function(e){t.indexOf(e)<0&&t.push(e)})}),e.__cache__={},t.forEach(function(t){e.__cache__[t]=[],e.__rules__.forEach(function(n){n.enabled&&(t&&n.alt.indexOf(t)<0||e.__cache__[t].push(n.fn))})})},Kn.prototype.at=function(e,t,n){const r=this.__find__(e),o=n||{};if(-1===r)throw new Error("Parser rule not found: "+e);this.__rules__[r].fn=t,this.__rules__[r].alt=o.alt||[],this.__cache__=null},Kn.prototype.before=function(e,t,n,r){const o=this.__find__(e),a=r||{};if(-1===o)throw new Error("Parser rule not found: "+e);this.__rules__.splice(o,0,{name:t,enabled:!0,fn:n,alt:a.alt||[]}),this.__cache__=null},Kn.prototype.after=function(e,t,n,r){const o=this.__find__(e),a=r||{};if(-1===o)throw new Error("Parser rule not found: "+e);this.__rules__.splice(o+1,0,{name:t,enabled:!0,fn:n,alt:a.alt||[]}),this.__cache__=null},Kn.prototype.push=function(e,t,n){const r=n||{};this.__rules__.push({name:e,enabled:!0,fn:t,alt:r.alt||[]}),this.__cache__=null},Kn.prototype.enable=function(e,t){Array.isArray(e)||(e=[e]);const n=[];return e.forEach(function(e){const r=this.__find__(e);if(r<0){if(t)return;throw new Error("Rules manager: invalid rule name "+e)}this.__rules__[r].enabled=!0,n.push(e)},this),this.__cache__=null,n},Kn.prototype.enableOnly=function(e,t){Array.isArray(e)||(e=[e]),this.__rules__.forEach(function(e){e.enabled=!1}),this.enable(e,t)},Kn.prototype.disable=function(e,t){Array.isArray(e)||(e=[e]);const n=[];return e.forEach(function(e){const r=this.__find__(e);if(r<0){if(t)return;throw new Error("Rules manager: invalid rule name "+e)}this.__rules__[r].enabled=!1,n.push(e)},this),this.__cache__=null,n},Kn.prototype.getRules=function(e){return null===this.__cache__&&this.__compile__(),this.__cache__[e]||[]};const Yn=Kn;function Jn(e,t,n){this.type=e,this.tag=t,this.attrs=null,this.map=null,this.nesting=n,this.level=0,this.children=null,this.content="",this.markup="",this.info="",this.meta=null,this.block=!1,this.hidden=!1}Jn.prototype.attrIndex=function(e){if(!this.attrs)return-1;const t=this.attrs;for(let n=0,r=t.length;n<r;n++)if(t[n][0]===e)return n;return-1},Jn.prototype.attrPush=function(e){this.attrs?this.attrs.push(e):this.attrs=[e]},Jn.prototype.attrSet=function(e,t){const n=this.attrIndex(e),r=[e,t];n<0?this.attrPush(r):this.attrs[n]=r},Jn.prototype.attrGet=function(e){const t=this.attrIndex(e);let n=null;return t>=0&&(n=this.attrs[t][1]),n},Jn.prototype.attrJoin=function(e,t){const n=this.attrIndex(e);n<0?this.attrPush([e,t]):this.attrs[n][1]=this.attrs[n][1]+" "+t};const Xn=Jn;function Qn(e,t,n){this.src=e,this.env=n,this.tokens=[],this.inlineMode=!1,this.md=t}Qn.prototype.Token=Xn;const er=Qn,tr=/\r\n?|\n/g,nr=/\0/g;function rr(e){return/^<a[>\s]/i.test(e)}function or(e){return/^<\/a\s*>/i.test(e)}const ar=/\+-|\.\.|\?\?\?\?|!!!!|,,|--/,ir=/\((c|tm|r)\)/i,ur=/\((c|tm|r)\)/gi,sr={c:"©",r:"®",tm:"™"};function lr(e,t){return sr[t.toLowerCase()]}function cr(e){let t=0;for(let n=e.length-1;n>=0;n--){const r=e[n];"text"!==r.type||t||(r.content=r.content.replace(ur,lr)),"link_open"===r.type&&"auto"===r.info&&t--,"link_close"===r.type&&"auto"===r.info&&t++}}function fr(e){let t=0;for(let n=e.length-1;n>=0;n--){const r=e[n];"text"!==r.type||t||ar.test(r.content)&&(r.content=r.content.replace(/\+-/g,"±").replace(/\.{2,}/g,"…").replace(/([?!])…/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---(?=[^-]|$)/gm,"$1—").replace(/(^|\s)--(?=\s|$)/gm,"$1–").replace(/(^|[^-\s])--(?=[^-\s]|$)/gm,"$1–")),"link_open"===r.type&&"auto"===r.info&&t--,"link_close"===r.type&&"auto"===r.info&&t++}}const pr=/['"]/,dr=/['"]/g;function hr(e,t,n,r){e[t]||(e[t]=[]),e[t].push({pos:n,ch:r})}function mr(e,t){let n;const r=[],o={};for(let a=0;a<e.length;a++){const i=e[a],u=e[a].level;for(n=r.length-1;n>=0&&!(r[n].level<=u);n--);if(r.length=n+1,"text"!==i.type)continue;const s=i.content;let l=0;const c=s.length;e:for(;l<c;){dr.lastIndex=l;const i=dr.exec(s);if(!i)break;let f=!0,p=!0;l=i.index+1;const d="'"===i[0];let h=32;if(i.index-1>=0)h=s.charCodeAt(i.index-1);else for(n=a-1;n>=0&&"softbreak"!==e[n].type&&"hardbreak"!==e[n].type;n--)if(e[n].content){h=e[n].content.charCodeAt(e[n].content.length-1);break}let m=32;if(l<c)m=s.charCodeAt(l);else for(n=a+1;n<e.length&&"softbreak"!==e[n].type&&"hardbreak"!==e[n].type;n++)if(e[n].content){m=e[n].content.charCodeAt(0);break}const g=Nn(h)||Rn(h),_=Nn(m)||Rn(m),b=On(h),y=On(m);if(y?f=!1:_&&(b||g||(f=!1)),b?p=!1:g&&(y||_||(p=!1)),34===m&&'"'===i[0]&&h>=48&&h<=57&&(p=f=!1),f&&p&&(f=g,p=_),f||p){if(p)for(n=r.length-1;n>=0;n--){let e=r[n];if(r[n].level<u)break;if(e.single===d&&r[n].level===u){let u,s;e=r[n],d?(u=t.md.options.quotes[2],s=t.md.options.quotes[3]):(u=t.md.options.quotes[0],s=t.md.options.quotes[1]),hr(o,a,i.index,s),hr(o,e.token,e.pos,u),r.length=n;continue e}}f?r.push({token:a,pos:i.index,single:d,level:u}):p&&d&&hr(o,a,i.index,"’")}else d&&hr(o,a,i.index,"’")}}Object.keys(o).forEach(function(t){e[t].content=function(e,t){let n="",r=0;t.sort((e,t)=>e.pos-t.pos);for(let o=0;o<t.length;o++){const a=t[o];n+=e.slice(r,a.pos)+a.ch,r=a.pos+1}return n+e.slice(r)}(e[t].content,o[t])})}const gr=[["normalize",function(e){let t;t=e.src.replace(tr,"\n"),t=t.replace(nr,"�"),e.src=t}],["block",function(e){let t;e.inlineMode?(t=new e.Token("inline","",0),t.content=e.src,t.map=[0,1],t.children=[],e.tokens.push(t)):e.md.block.parse(e.src,e.md,e.env,e.tokens)}],["inline",function(e){const t=e.tokens;for(let n=0,r=t.length;n<r;n++){const r=t[n];"inline"===r.type&&e.md.inline.parse(r.content,e.md,e.env,r.children)}}],["linkify",function(e){const t=e.tokens;if(e.md.options.linkify)for(let n=0,r=t.length;n<r;n++){if("inline"!==t[n].type||!e.md.linkify.pretest(t[n].content))continue;let r=t[n].children,o=0;for(let a=r.length-1;a>=0;a--){const i=r[a];if("link_close"!==i.type){if("html_inline"===i.type&&(rr(i.content)&&o>0&&o--,or(i.content)&&o++),!(o>0)&&"text"===i.type&&e.md.linkify.test(i.content)){const o=i.content;let u=e.md.linkify.match(o);const s=[];let l=i.level,c=0;u.length>0&&0===u[0].index&&a>0&&"text_special"===r[a-1].type&&(u=u.slice(1));for(let t=0;t<u.length;t++){const n=u[t].url,r=e.md.normalizeLink(n);if(!e.md.validateLink(r))continue;let a=u[t].text;a=u[t].schema?"mailto:"!==u[t].schema||/^mailto:/i.test(a)?e.md.normalizeLinkText(a):e.md.normalizeLinkText("mailto:"+a).replace(/^mailto:/,""):e.md.normalizeLinkText("http://"+a).replace(/^http:\/\//,"");const i=u[t].index;if(i>c){const t=new e.Token("text","",0);t.content=o.slice(c,i),t.level=l,s.push(t)}const f=new e.Token("link_open","a",1);f.attrs=[["href",r]],f.level=l++,f.markup="linkify",f.info="auto",s.push(f);const p=new e.Token("text","",0);p.content=a,p.level=l,s.push(p);const d=new e.Token("link_close","a",-1);d.level=--l,d.markup="linkify",d.info="auto",s.push(d),c=u[t].lastIndex}if(c<o.length){const t=new e.Token("text","",0);t.content=o.slice(c),t.level=l,s.push(t)}t[n].children=r=yn(r,a,s)}}else for(a--;r[a].level!==i.level&&"link_open"!==r[a].type;)a--}}}],["replacements",function(e){let t;if(e.md.options.typographer)for(t=e.tokens.length-1;t>=0;t--)"inline"===e.tokens[t].type&&(ir.test(e.tokens[t].content)&&cr(e.tokens[t].children),ar.test(e.tokens[t].content)&&fr(e.tokens[t].children))}],["smartquotes",function(e){if(e.md.options.typographer)for(let t=e.tokens.length-1;t>=0;t--)"inline"===e.tokens[t].type&&pr.test(e.tokens[t].content)&&mr(e.tokens[t].children,e)}],["text_join",function(e){let t,n;const r=e.tokens,o=r.length;for(let e=0;e<o;e++){if("inline"!==r[e].type)continue;const o=r[e].children,a=o.length;for(t=0;t<a;t++)"text_special"===o[t].type&&(o[t].type="text");for(t=n=0;t<a;t++)"text"===o[t].type&&t+1<a&&"text"===o[t+1].type?o[t+1].content=o[t].content+o[t+1].content:(t!==n&&(o[n]=o[t]),n++);t!==n&&(o.length=n)}}]];function _r(){this.ruler=new Yn;for(let e=0;e<gr.length;e++)this.ruler.push(gr[e][0],gr[e][1])}_r.prototype.process=function(e){const t=this.ruler.getRules("");for(let n=0,r=t.length;n<r;n++)t[n](e)},_r.prototype.State=er;const br=_r;function yr(e,t,n,r){this.src=e,this.md=t,this.env=n,this.tokens=r,this.bMarks=[],this.eMarks=[],this.tShift=[],this.sCount=[],this.bsCount=[],this.blkIndent=0,this.line=0,this.lineMax=0,this.tight=!1,this.ddIndent=-1,this.listIndent=-1,this.parentType="root",this.level=0;const o=this.src;for(let e=0,t=0,n=0,r=0,a=o.length,i=!1;t<a;t++){const u=o.charCodeAt(t);if(!i){if(Mn(u)){n++,9===u?r+=4-r%4:r++;continue}i=!0}10!==u&&t!==a-1||(10!==u&&t++,this.bMarks.push(e),this.eMarks.push(t),this.tShift.push(n),this.sCount.push(r),this.bsCount.push(0),i=!1,n=0,r=0,e=t+1)}this.bMarks.push(o.length),this.eMarks.push(o.length),this.tShift.push(0),this.sCount.push(0),this.bsCount.push(0),this.lineMax=this.bMarks.length-1}yr.prototype.push=function(e,t,n){const r=new Xn(e,t,n);return r.block=!0,n<0&&this.level--,r.level=this.level,n>0&&this.level++,this.tokens.push(r),r},yr.prototype.isEmpty=function(e){return this.bMarks[e]+this.tShift[e]>=this.eMarks[e]},yr.prototype.skipEmptyLines=function(e){for(let t=this.lineMax;e<t&&!(this.bMarks[e]+this.tShift[e]<this.eMarks[e]);e++);return e},yr.prototype.skipSpaces=function(e){for(let t=this.src.length;e<t&&Mn(this.src.charCodeAt(e));e++);return e},yr.prototype.skipSpacesBack=function(e,t){if(e<=t)return e;for(;e>t;)if(!Mn(this.src.charCodeAt(--e)))return e+1;return e},yr.prototype.skipChars=function(e,t){for(let n=this.src.length;e<n&&this.src.charCodeAt(e)===t;e++);return e},yr.prototype.skipCharsBack=function(e,t,n){if(e<=n)return e;for(;e>n;)if(t!==this.src.charCodeAt(--e))return e+1;return e},yr.prototype.getLines=function(e,t,n,r){if(e>=t)return"";const o=new Array(t-e);for(let a=0,i=e;i<t;i++,a++){let e=0;const u=this.bMarks[i];let s,l=u;for(s=i+1<t||r?this.eMarks[i]+1:this.eMarks[i];l<s&&e<n;){const t=this.src.charCodeAt(l);if(Mn(t))9===t?e+=4-(e+this.bsCount[i])%4:e++;else{if(!(l-u<this.tShift[i]))break;e++}l++}o[a]=e>n?new Array(e-n+1).join(" ")+this.src.slice(l,s):this.src.slice(l,s)}return o.join("")},yr.prototype.Token=Xn;const Dr=yr;function kr(e,t){const n=e.bMarks[t]+e.tShift[t],r=e.eMarks[t];return e.src.slice(n,r)}function wr(e){const t=[],n=e.length;let r=0,o=e.charCodeAt(r),a=!1,i=0,u="";for(;r<n;)124===o&&(a?(u+=e.substring(i,r-1),i=r):(t.push(u+e.substring(i,r)),u="",i=r+1)),a=92===o,r++,o=e.charCodeAt(r);return t.push(u+e.substring(i)),t}function vr(e,t){const n=e.eMarks[t];let r=e.bMarks[t]+e.tShift[t];const o=e.src.charCodeAt(r++);return 42!==o&&45!==o&&43!==o||r<n&&!Mn(e.src.charCodeAt(r))?-1:r}function Fr(e,t){const n=e.bMarks[t]+e.tShift[t],r=e.eMarks[t];let o=n;if(o+1>=r)return-1;let a=e.src.charCodeAt(o++);if(a<48||a>57)return-1;for(;;){if(o>=r)return-1;if(a=e.src.charCodeAt(o++),!(a>=48&&a<=57)){if(41===a||46===a)break;return-1}if(o-n>=10)return-1}return o<r&&(a=e.src.charCodeAt(o),!Mn(a))?-1:o}const Cr="<[A-Za-z][A-Za-z0-9\\-]*(?:\\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\\s*=\\s*(?:[^\"'=<>`\\x00-\\x20]+|'[^']*'|\"[^\"]*\"))?)*\\s*\\/?>",Er="<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>",Ar=new RegExp("^(?:"+Cr+"|"+Er+"|\x3c!---?>|\x3c!--(?:[^-]|-[^-]|--[^>])*--\x3e|<[?][\\s\\S]*?[?]>|<![A-Za-z][^>]*>|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>)"),xr=new RegExp("^(?:"+Cr+"|"+Er+")"),Sr=[[/^<(script|pre|style|textarea)(?=(\s|>|$))/i,/<\/(script|pre|style|textarea)>/i,!0],[/^<!--/,/-->/,!0],[/^<\?/,/\?>/,!0],[/^<![A-Z]/,/>/,!0],[/^<!\[CDATA\[/,/\]\]>/,!0],[new RegExp("^</?("+["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"].join("|")+")(?=(\\s|/?>|$))","i"),/^$/,!0],[new RegExp(xr.source+"\\s*$"),/^$/,!1]],Br=[["table",function(e,t,n,r){if(t+2>n)return!1;let o=t+1;if(e.sCount[o]<e.blkIndent)return!1;if(e.sCount[o]-e.blkIndent>=4)return!1;let a=e.bMarks[o]+e.tShift[o];if(a>=e.eMarks[o])return!1;const i=e.src.charCodeAt(a++);if(124!==i&&45!==i&&58!==i)return!1;if(a>=e.eMarks[o])return!1;const u=e.src.charCodeAt(a++);if(124!==u&&45!==u&&58!==u&&!Mn(u))return!1;if(45===i&&Mn(u))return!1;for(;a<e.eMarks[o];){const t=e.src.charCodeAt(a);if(124!==t&&45!==t&&58!==t&&!Mn(t))return!1;a++}let s=kr(e,t+1),l=s.split("|");const c=[];for(let e=0;e<l.length;e++){const t=l[e].trim();if(!t){if(0===e||e===l.length-1)continue;return!1}if(!/^:?-+:?$/.test(t))return!1;58===t.charCodeAt(t.length-1)?c.push(58===t.charCodeAt(0)?"center":"right"):58===t.charCodeAt(0)?c.push("left"):c.push("")}if(s=kr(e,t).trim(),-1===s.indexOf("|"))return!1;if(e.sCount[t]-e.blkIndent>=4)return!1;l=wr(s),l.length&&""===l[0]&&l.shift(),l.length&&""===l[l.length-1]&&l.pop();const f=l.length;if(0===f||f!==c.length)return!1;if(r)return!0;const p=e.parentType;e.parentType="table";const d=e.md.block.ruler.getRules("blockquote"),h=[t,0];e.push("table_open","table",1).map=h,e.push("thead_open","thead",1).map=[t,t+1],e.push("tr_open","tr",1).map=[t,t+1];for(let t=0;t<l.length;t++){const n=e.push("th_open","th",1);c[t]&&(n.attrs=[["style","text-align:"+c[t]]]);const r=e.push("inline","",0);r.content=l[t].trim(),r.children=[],e.push("th_close","th",-1)}let m;e.push("tr_close","tr",-1),e.push("thead_close","thead",-1);let g=0;for(o=t+2;o<n&&!(e.sCount[o]<e.blkIndent);o++){let r=!1;for(let t=0,a=d.length;t<a;t++)if(d[t](e,o,n,!0)){r=!0;break}if(r)break;if(s=kr(e,o).trim(),!s)break;if(e.sCount[o]-e.blkIndent>=4)break;if(l=wr(s),l.length&&""===l[0]&&l.shift(),l.length&&""===l[l.length-1]&&l.pop(),g+=f-l.length,g>65536)break;o===t+2&&(e.push("tbody_open","tbody",1).map=m=[t+2,0]),e.push("tr_open","tr",1).map=[o,o+1];for(let t=0;t<f;t++){const n=e.push("td_open","td",1);c[t]&&(n.attrs=[["style","text-align:"+c[t]]]);const r=e.push("inline","",0);r.content=l[t]?l[t].trim():"",r.children=[],e.push("td_close","td",-1)}e.push("tr_close","tr",-1)}return m&&(e.push("tbody_close","tbody",-1),m[1]=o),e.push("table_close","table",-1),h[1]=o,e.parentType=p,e.line=o,!0},["paragraph","reference"]],["code",function(e,t,n){if(e.sCount[t]-e.blkIndent<4)return!1;let r=t+1,o=r;for(;r<n;)if(e.isEmpty(r))r++;else{if(!(e.sCount[r]-e.blkIndent>=4))break;r++,o=r}e.line=o;const a=e.push("code_block","code",0);return a.content=e.getLines(t,o,4+e.blkIndent,!1)+"\n",a.map=[t,e.line],!0}],["fence",function(e,t,n,r){let o=e.bMarks[t]+e.tShift[t],a=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4)return!1;if(o+3>a)return!1;const i=e.src.charCodeAt(o);if(126!==i&&96!==i)return!1;let u=o;o=e.skipChars(o,i);let s=o-u;if(s<3)return!1;const l=e.src.slice(u,o),c=e.src.slice(o,a);if(96===i&&c.indexOf(String.fromCharCode(i))>=0)return!1;if(r)return!0;let f=t,p=!1;for(;!(f++,f>=n||(o=u=e.bMarks[f]+e.tShift[f],a=e.eMarks[f],o<a&&e.sCount[f]<e.blkIndent));)if(e.src.charCodeAt(o)===i&&!(e.sCount[f]-e.blkIndent>=4||(o=e.skipChars(o,i),o-u<s||(o=e.skipSpaces(o),o<a)))){p=!0;break}s=e.sCount[t],e.line=f+(p?1:0);const d=e.push("fence","code",0);return d.info=c,d.content=e.getLines(t+1,f,s,!0),d.markup=l,d.map=[t,e.line],!0},["paragraph","reference","blockquote","list"]],["blockquote",function(e,t,n,r){let o=e.bMarks[t]+e.tShift[t],a=e.eMarks[t];const i=e.lineMax;if(e.sCount[t]-e.blkIndent>=4)return!1;if(62!==e.src.charCodeAt(o))return!1;if(r)return!0;const u=[],s=[],l=[],c=[],f=e.md.block.ruler.getRules("blockquote"),p=e.parentType;e.parentType="blockquote";let d,h=!1;for(d=t;d<n;d++){const t=e.sCount[d]<e.blkIndent;if(o=e.bMarks[d]+e.tShift[d],a=e.eMarks[d],o>=a)break;if(62===e.src.charCodeAt(o++)&&!t){let t,n,r=e.sCount[d]+1;32===e.src.charCodeAt(o)?(o++,r++,n=!1,t=!0):9===e.src.charCodeAt(o)?(t=!0,(e.bsCount[d]+r)%4==3?(o++,r++,n=!1):n=!0):t=!1;let i=r;for(u.push(e.bMarks[d]),e.bMarks[d]=o;o<a;){const t=e.src.charCodeAt(o);if(!Mn(t))break;9===t?i+=4-(i+e.bsCount[d]+(n?1:0))%4:i++,o++}h=o>=a,s.push(e.bsCount[d]),e.bsCount[d]=e.sCount[d]+1+(t?1:0),l.push(e.sCount[d]),e.sCount[d]=i-r,c.push(e.tShift[d]),e.tShift[d]=o-e.bMarks[d];continue}if(h)break;let r=!1;for(let t=0,o=f.length;t<o;t++)if(f[t](e,d,n,!0)){r=!0;break}if(r){e.lineMax=d,0!==e.blkIndent&&(u.push(e.bMarks[d]),s.push(e.bsCount[d]),c.push(e.tShift[d]),l.push(e.sCount[d]),e.sCount[d]-=e.blkIndent);break}u.push(e.bMarks[d]),s.push(e.bsCount[d]),c.push(e.tShift[d]),l.push(e.sCount[d]),e.sCount[d]=-1}const m=e.blkIndent;e.blkIndent=0;const g=e.push("blockquote_open","blockquote",1);g.markup=">";const _=[t,0];g.map=_,e.md.block.tokenize(e,t,d),e.push("blockquote_close","blockquote",-1).markup=">",e.lineMax=i,e.parentType=p,_[1]=e.line;for(let n=0;n<c.length;n++)e.bMarks[n+t]=u[n],e.tShift[n+t]=c[n],e.sCount[n+t]=l[n],e.bsCount[n+t]=s[n];return e.blkIndent=m,!0},["paragraph","reference","blockquote","list"]],["hr",function(e,t,n,r){const o=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4)return!1;let a=e.bMarks[t]+e.tShift[t];const i=e.src.charCodeAt(a++);if(42!==i&&45!==i&&95!==i)return!1;let u=1;for(;a<o;){const t=e.src.charCodeAt(a++);if(t!==i&&!Mn(t))return!1;t===i&&u++}if(u<3)return!1;if(r)return!0;e.line=t+1;const s=e.push("hr","hr",0);return s.map=[t,e.line],s.markup=Array(u+1).join(String.fromCharCode(i)),!0},["paragraph","reference","blockquote","list"]],["list",function(e,t,n,r){let o,a,i,u,s=t,l=!0;if(e.sCount[s]-e.blkIndent>=4)return!1;if(e.listIndent>=0&&e.sCount[s]-e.listIndent>=4&&e.sCount[s]<e.blkIndent)return!1;let c,f,p,d=!1;if(r&&"paragraph"===e.parentType&&e.sCount[s]>=e.blkIndent&&(d=!0),(p=Fr(e,s))>=0){if(c=!0,i=e.bMarks[s]+e.tShift[s],f=Number(e.src.slice(i,p-1)),d&&1!==f)return!1}else{if(!((p=vr(e,s))>=0))return!1;c=!1}if(d&&e.skipSpaces(p)>=e.eMarks[s])return!1;if(r)return!0;const h=e.src.charCodeAt(p-1),m=e.tokens.length;c?(u=e.push("ordered_list_open","ol",1),1!==f&&(u.attrs=[["start",f]])):u=e.push("bullet_list_open","ul",1);const g=[s,0];u.map=g,u.markup=String.fromCharCode(h);let _=!1;const b=e.md.block.ruler.getRules("list"),y=e.parentType;for(e.parentType="list";s<n;){a=p,o=e.eMarks[s];const t=e.sCount[s]+p-(e.bMarks[s]+e.tShift[s]);let r=t;for(;a<o;){const t=e.src.charCodeAt(a);if(9===t)r+=4-(r+e.bsCount[s])%4;else{if(32!==t)break;r++}a++}const f=a;let d;d=f>=o?1:r-t,d>4&&(d=1);const m=t+d;u=e.push("list_item_open","li",1),u.markup=String.fromCharCode(h);const g=[s,0];u.map=g,c&&(u.info=e.src.slice(i,p-1));const y=e.tight,D=e.tShift[s],k=e.sCount[s],w=e.listIndent;if(e.listIndent=e.blkIndent,e.blkIndent=m,e.tight=!0,e.tShift[s]=f-e.bMarks[s],e.sCount[s]=r,f>=o&&e.isEmpty(s+1)?e.line=Math.min(e.line+2,n):e.md.block.tokenize(e,s,n,!0),e.tight&&!_||(l=!1),_=e.line-s>1&&e.isEmpty(e.line-1),e.blkIndent=e.listIndent,e.listIndent=w,e.tShift[s]=D,e.sCount[s]=k,e.tight=y,u=e.push("list_item_close","li",-1),u.markup=String.fromCharCode(h),s=e.line,g[1]=s,s>=n)break;if(e.sCount[s]<e.blkIndent)break;if(e.sCount[s]-e.blkIndent>=4)break;let v=!1;for(let t=0,r=b.length;t<r;t++)if(b[t](e,s,n,!0)){v=!0;break}if(v)break;if(c){if(p=Fr(e,s),p<0)break;i=e.bMarks[s]+e.tShift[s]}else if(p=vr(e,s),p<0)break;if(h!==e.src.charCodeAt(p-1))break}return u=c?e.push("ordered_list_close","ol",-1):e.push("bullet_list_close","ul",-1),u.markup=String.fromCharCode(h),g[1]=s,e.line=s,e.parentType=y,l&&function(e,t){const n=e.level+2;for(let r=t+2,o=e.tokens.length-2;r<o;r++)e.tokens[r].level===n&&"paragraph_open"===e.tokens[r].type&&(e.tokens[r+2].hidden=!0,e.tokens[r].hidden=!0,r+=2)}(e,m),!0},["paragraph","reference","blockquote"]],["reference",function(e,t,n,r){let o=e.bMarks[t]+e.tShift[t],a=e.eMarks[t],i=t+1;if(e.sCount[t]-e.blkIndent>=4)return!1;if(91!==e.src.charCodeAt(o))return!1;function u(t){const n=e.lineMax;if(t>=n||e.isEmpty(t))return null;let r=!1;if(e.sCount[t]-e.blkIndent>3&&(r=!0),e.sCount[t]<0&&(r=!0),!r){const r=e.md.block.ruler.getRules("reference"),o=e.parentType;e.parentType="reference";let a=!1;for(let o=0,i=r.length;o<i;o++)if(r[o](e,t,n,!0)){a=!0;break}if(e.parentType=o,a)return null}const o=e.bMarks[t]+e.tShift[t],a=e.eMarks[t];return e.src.slice(o,a+1)}let s=e.src.slice(o,a+1);a=s.length;let l=-1;for(o=1;o<a;o++){const e=s.charCodeAt(o);if(91===e)return!1;if(93===e){l=o;break}if(10===e){const e=u(i);null!==e&&(s+=e,a=s.length,i++)}else if(92===e&&(o++,o<a&&10===s.charCodeAt(o))){const e=u(i);null!==e&&(s+=e,a=s.length,i++)}}if(l<0||58!==s.charCodeAt(l+1))return!1;for(o=l+2;o<a;o++){const e=s.charCodeAt(o);if(10===e){const e=u(i);null!==e&&(s+=e,a=s.length,i++)}else if(!Mn(e))break}const c=e.md.helpers.parseLinkDestination(s,o,a);if(!c.ok)return!1;const f=e.md.normalizeLink(c.str);if(!e.md.validateLink(f))return!1;o=c.pos;const p=o,d=i,h=o;for(;o<a;o++){const e=s.charCodeAt(o);if(10===e){const e=u(i);null!==e&&(s+=e,a=s.length,i++)}else if(!Mn(e))break}let m,g=e.md.helpers.parseLinkTitle(s,o,a);for(;g.can_continue;){const t=u(i);if(null===t)break;s+=t,o=a,a=s.length,i++,g=e.md.helpers.parseLinkTitle(s,o,a,g)}for(o<a&&h!==o&&g.ok?(m=g.str,o=g.pos):(m="",o=p,i=d);o<a&&Mn(s.charCodeAt(o));)o++;if(o<a&&10!==s.charCodeAt(o)&&m)for(m="",o=p,i=d;o<a&&Mn(s.charCodeAt(o));)o++;if(o<a&&10!==s.charCodeAt(o))return!1;const _=Pn(s.slice(1,l));return!!_&&(r||(void 0===e.env.references&&(e.env.references={}),void 0===e.env.references[_]&&(e.env.references[_]={title:m,href:f}),e.line=i),!0)}],["html_block",function(e,t,n,r){let o=e.bMarks[t]+e.tShift[t],a=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4)return!1;if(!e.md.options.html)return!1;if(60!==e.src.charCodeAt(o))return!1;let i=e.src.slice(o,a),u=0;for(;u<Sr.length&&!Sr[u][0].test(i);u++);if(u===Sr.length)return!1;if(r)return Sr[u][2];let s=t+1;const l=Sr[u][1].test("");if(!Sr[u][1].test(i))for(;s<n&&(!(e.sCount[s]<e.blkIndent)||!l&&e.isEmpty(s));s++)if(o=e.bMarks[s]+e.tShift[s],a=e.eMarks[s],i=e.src.slice(o,a),Sr[u][1].test(i)){0!==i.length&&s++;break}e.line=s;const c=e.push("html_block","",0);return c.map=[t,s],c.content=e.getLines(t,s,e.blkIndent,!0),!0},["paragraph","reference","blockquote"]],["heading",function(e,t,n,r){let o=e.bMarks[t]+e.tShift[t],a=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4)return!1;let i=e.src.charCodeAt(o);if(35!==i||o>=a)return!1;let u=1;for(i=e.src.charCodeAt(++o);35===i&&o<a&&u<=6;)u++,i=e.src.charCodeAt(++o);if(u>6||o<a&&!Mn(i))return!1;if(r)return!0;a=e.skipSpacesBack(a,o);const s=e.skipCharsBack(a,35,o);s>o&&Mn(e.src.charCodeAt(s-1))&&(a=s),e.line=t+1;const l=e.push("heading_open","h"+String(u),1);l.markup="########".slice(0,u),l.map=[t,e.line];const c=e.push("inline","",0);return c.content=zn(e.src.slice(o,a)),c.map=[t,e.line],c.children=[],e.push("heading_close","h"+String(u),-1).markup="########".slice(0,u),!0},["paragraph","reference","blockquote"]],["lheading",function(e,t,n){const r=e.md.block.ruler.getRules("paragraph");if(e.sCount[t]-e.blkIndent>=4)return!1;const o=e.parentType;e.parentType="paragraph";let a,i=0,u=t+1;for(;u<n&&!e.isEmpty(u);u++){if(e.sCount[u]-e.blkIndent>3)continue;if(e.sCount[u]>=e.blkIndent){let t=e.bMarks[u]+e.tShift[u];const n=e.eMarks[u];if(t<n&&(a=e.src.charCodeAt(t),(45===a||61===a)&&(t=e.skipChars(t,a),t=e.skipSpaces(t),t>=n))){i=61===a?1:2;break}}if(e.sCount[u]<0)continue;let t=!1;for(let o=0,a=r.length;o<a;o++)if(r[o](e,u,n,!0)){t=!0;break}if(t)break}if(!i)return e.parentType=o,!1;const s=zn(e.getLines(t,u,e.blkIndent,!1));e.line=u+1;const l=e.push("heading_open","h"+String(i),1);l.markup=String.fromCharCode(a),l.map=[t,e.line];const c=e.push("inline","",0);return c.content=s,c.map=[t,e.line-1],c.children=[],e.push("heading_close","h"+String(i),-1).markup=String.fromCharCode(a),e.parentType=o,!0}],["paragraph",function(e,t,n){const r=e.md.block.ruler.getRules("paragraph"),o=e.parentType;let a=t+1;for(e.parentType="paragraph";a<n&&!e.isEmpty(a);a++){if(e.sCount[a]-e.blkIndent>3)continue;if(e.sCount[a]<0)continue;let t=!1;for(let o=0,i=r.length;o<i;o++)if(r[o](e,a,n,!0)){t=!0;break}if(t)break}const i=zn(e.getLines(t,a,e.blkIndent,!1));e.line=a,e.push("paragraph_open","p",1).map=[t,e.line];const u=e.push("inline","",0);return u.content=i,u.map=[t,e.line],u.children=[],e.push("paragraph_close","p",-1),e.parentType=o,!0}]];function Tr(){this.ruler=new Yn;for(let e=0;e<Br.length;e++)this.ruler.push(Br[e][0],Br[e][1],{alt:(Br[e][2]||[]).slice()})}Tr.prototype.tokenize=function(e,t,n){const r=this.ruler.getRules(""),o=r.length,a=e.md.options.maxNesting;let i=t,u=!1;for(;i<n&&(e.line=i=e.skipEmptyLines(i),!(i>=n))&&!(e.sCount[i]<e.blkIndent);){if(e.level>=a){e.line=n;break}const t=e.line;let s=!1;for(let a=0;a<o;a++)if(s=r[a](e,i,n,!1),s){if(t>=e.line)throw new Error("block rule didn't increment state.line");break}if(!s)throw new Error("none of the block rules matched");e.tight=!u,e.isEmpty(e.line-1)&&(u=!0),i=e.line,i<n&&e.isEmpty(i)&&(u=!0,i++,e.line=i)}},Tr.prototype.parse=function(e,t,n,r){if(!e)return;const o=new this.State(e,t,n,r);this.tokenize(o,o.line,o.lineMax)},Tr.prototype.State=Dr;const Lr=Tr;function jr(e,t,n,r){this.src=e,this.env=n,this.md=t,this.tokens=r,this.tokens_meta=Array(r.length),this.pos=0,this.posMax=this.src.length,this.level=0,this.pending="",this.pendingLevel=0,this.cache={},this.delimiters=[],this._prev_delimiters=[],this.backticks={},this.backticksScanned=!1,this.linkLevel=0}jr.prototype.pushPending=function(){const e=new Xn("text","",0);return e.content=this.pending,e.level=this.pendingLevel,this.tokens.push(e),this.pending="",e},jr.prototype.push=function(e,t,n){this.pending&&this.pushPending();const r=new Xn(e,t,n);let o=null;return n<0&&(this.level--,this.delimiters=this._prev_delimiters.pop()),r.level=this.level,n>0&&(this.level++,this._prev_delimiters.push(this.delimiters),this.delimiters=[],o={delimiters:this.delimiters}),this.pendingLevel=this.level,this.tokens.push(r),this.tokens_meta.push(o),r},jr.prototype.scanDelims=function(e,t){const n=this.posMax,r=this.src.charCodeAt(e);let o;if(0===e)o=32;else if(1===e)o=this.src.charCodeAt(0),55296==(63488&o)&&(o=65533);else if(o=this.src.charCodeAt(e-1),56320==(64512&o)){const t=this.src.charCodeAt(e-2);o=55296==(64512&t)?65536+(t-55296<<10)+(o-56320):65533}else 55296==(64512&o)&&(o=65533);let a=e;for(;a<n&&this.src.charCodeAt(a)===r;)a++;const i=a-e;let u=a<n?this.src.charCodeAt(a):32;if(55296==(64512&u)){const e=this.src.charCodeAt(a+1);u=56320==(64512&e)?65536+(u-55296<<10)+(e-56320):65533}else 56320==(64512&u)&&(u=65533);const s=Nn(o)||Rn(o),l=Nn(u)||Rn(u),c=On(o),f=On(u),p=!f&&(!l||c||s),d=!c&&(!s||f||l);return{can_open:p&&(t||!d||s),can_close:d&&(t||!p||l),length:i}},jr.prototype.Token=Xn;const Mr=jr;function Or(e){switch(e){case 10:case 33:case 35:case 36:case 37:case 38:case 42:case 43:case 45:case 58:case 60:case 61:case 62:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 125:case 126:return!0;default:return!1}}const Ir=/(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i,Rr=[];for(let e=0;e<256;e++)Rr.push(0);function Nr(e,t){let n;const r=[],o=t.length;for(let a=0;a<o;a++){const o=t[a];if(126!==o.marker)continue;if(-1===o.end)continue;const i=t[o.end];n=e.tokens[o.token],n.type="s_open",n.tag="s",n.nesting=1,n.markup="~~",n.content="",n=e.tokens[i.token],n.type="s_close",n.tag="s",n.nesting=-1,n.markup="~~",n.content="","text"===e.tokens[i.token-1].type&&"~"===e.tokens[i.token-1].content&&r.push(i.token-1)}for(;r.length;){const t=r.pop();let o=t+1;for(;o<e.tokens.length&&"s_close"===e.tokens[o].type;)o++;o--,t!==o&&(n=e.tokens[o],e.tokens[o]=e.tokens[t],e.tokens[t]=n)}}"\\!\"#$%&'()*+,./:;<=>?@[]^_`{|}~-".split("").forEach(function(e){Rr[e.charCodeAt(0)]=1});const Pr={tokenize:function(e,t){const n=e.pos,r=e.src.charCodeAt(n);if(t)return!1;if(126!==r)return!1;const o=e.scanDelims(e.pos,!0);let a=o.length;const i=String.fromCharCode(r);if(a<2)return!1;let u;a%2&&(u=e.push("text","",0),u.content=i,a--);for(let t=0;t<a;t+=2)u=e.push("text","",0),u.content=i+i,e.delimiters.push({marker:r,length:0,token:e.tokens.length-1,end:-1,open:o.can_open,close:o.can_close});return e.pos+=o.length,!0},postProcess:function(e){const t=e.tokens_meta,n=e.tokens_meta.length;Nr(e,e.delimiters);for(let r=0;r<n;r++)t[r]&&t[r].delimiters&&Nr(e,t[r].delimiters)}};function qr(e,t){for(let n=t.length-1;n>=0;n--){const r=t[n];if(95!==r.marker&&42!==r.marker)continue;if(-1===r.end)continue;const o=t[r.end],a=n>0&&t[n-1].end===r.end+1&&t[n-1].marker===r.marker&&t[n-1].token===r.token-1&&t[r.end+1].token===o.token+1,i=String.fromCharCode(r.marker),u=e.tokens[r.token];u.type=a?"strong_open":"em_open",u.tag=a?"strong":"em",u.nesting=1,u.markup=a?i+i:i,u.content="";const s=e.tokens[o.token];s.type=a?"strong_close":"em_close",s.tag=a?"strong":"em",s.nesting=-1,s.markup=a?i+i:i,s.content="",a&&(e.tokens[t[n-1].token].content="",e.tokens[t[r.end+1].token].content="",n--)}}const zr={tokenize:function(e,t){const n=e.pos,r=e.src.charCodeAt(n);if(t)return!1;if(95!==r&&42!==r)return!1;const o=e.scanDelims(e.pos,42===r);for(let t=0;t<o.length;t++)e.push("text","",0).content=String.fromCharCode(r),e.delimiters.push({marker:r,length:o.length,token:e.tokens.length-1,end:-1,open:o.can_open,close:o.can_close});return e.pos+=o.length,!0},postProcess:function(e){const t=e.tokens_meta,n=e.tokens_meta.length;qr(e,e.delimiters);for(let r=0;r<n;r++)t[r]&&t[r].delimiters&&qr(e,t[r].delimiters)}},$r=/^([a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/,Gr=/^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^<>\x00-\x20]*)$/,Ur=/^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i,Hr=/^&([a-z][a-z0-9]{1,31});/i;function Wr(e){const t={},n=e.length;if(!n)return;let r=0,o=-2;const a=[];for(let i=0;i<n;i++){const n=e[i];if(a.push(0),e[r].marker===n.marker&&o===n.token-1||(r=i),o=n.token,n.length=n.length||0,!n.close)continue;t.hasOwnProperty(n.marker)||(t[n.marker]=[-1,-1,-1,-1,-1,-1]);const u=t[n.marker][(n.open?3:0)+n.length%3];let s=r-a[r]-1,l=s;for(;s>u;s-=a[s]+1){const t=e[s];if(t.marker===n.marker&&t.open&&t.end<0){let r=!1;if((t.close||n.open)&&(t.length+n.length)%3==0&&(t.length%3==0&&n.length%3==0||(r=!0)),!r){const r=s>0&&!e[s-1].open?a[s-1]+1:0;a[i]=i-s+r,a[s]=r,n.open=!1,t.end=i,t.close=!1,l=-1,o=-2;break}}}-1!==l&&(t[n.marker][(n.open?3:0)+(n.length||0)%3]=l)}}const Zr=[["text",function(e,t){let n=e.pos;for(;n<e.posMax&&!Or(e.src.charCodeAt(n));)n++;return n!==e.pos&&(t||(e.pending+=e.src.slice(e.pos,n)),e.pos=n,!0)}],["linkify",function(e,t){if(!e.md.options.linkify)return!1;if(e.linkLevel>0)return!1;const n=e.pos;if(n+3>e.posMax)return!1;if(58!==e.src.charCodeAt(n))return!1;if(47!==e.src.charCodeAt(n+1))return!1;if(47!==e.src.charCodeAt(n+2))return!1;const r=e.pending.match(Ir);if(!r)return!1;const o=r[1],a=e.md.linkify.matchAtStart(e.src.slice(n-o.length));if(!a)return!1;let i=a.url;if(i.length<=o.length)return!1;let u=i.length;for(;u>0&&42===i.charCodeAt(u-1);)u--;u!==i.length&&(i=i.slice(0,u));const s=e.md.normalizeLink(i);if(!e.md.validateLink(s))return!1;if(!t){e.pending=e.pending.slice(0,-o.length);const t=e.push("link_open","a",1);t.attrs=[["href",s]],t.markup="linkify",t.info="auto",e.push("text","",0).content=e.md.normalizeLinkText(i);const n=e.push("link_close","a",-1);n.markup="linkify",n.info="auto"}return e.pos+=i.length-o.length,!0}],["newline",function(e,t){let n=e.pos;if(10!==e.src.charCodeAt(n))return!1;const r=e.pending.length-1,o=e.posMax;if(!t)if(r>=0&&32===e.pending.charCodeAt(r))if(r>=1&&32===e.pending.charCodeAt(r-1)){let t=r-1;for(;t>=1&&32===e.pending.charCodeAt(t-1);)t--;e.pending=e.pending.slice(0,t),e.push("hardbreak","br",0)}else e.pending=e.pending.slice(0,-1),e.push("softbreak","br",0);else e.push("softbreak","br",0);for(n++;n<o&&Mn(e.src.charCodeAt(n));)n++;return e.pos=n,!0}],["escape",function(e,t){let n=e.pos;const r=e.posMax;if(92!==e.src.charCodeAt(n))return!1;if(n++,n>=r)return!1;let o=e.src.charCodeAt(n);if(10===o){for(t||e.push("hardbreak","br",0),n++;n<r&&(o=e.src.charCodeAt(n),Mn(o));)n++;return e.pos=n,!0}if(32===o){if(!t){const t=e.push("text_special","",0);t.content="\\",t.markup="\\",t.info="escape"}return e.pos=n,!0}let a=e.src[n];if(o>=55296&&o<=56319&&n+1<r){const t=e.src.charCodeAt(n+1);t>=56320&&t<=57343&&(a+=e.src[n+1],n++)}const i="\\"+a;if(!t){const t=e.push("text_special","",0);o<256&&0!==Rr[o]?t.content=a:t.content=i,t.markup=i,t.info="escape"}return e.pos=n+1,!0}],["backticks",function(e,t){let n=e.pos;if(96!==e.src.charCodeAt(n))return!1;const r=n;n++;const o=e.posMax;for(;n<o&&96===e.src.charCodeAt(n);)n++;const a=e.src.slice(r,n),i=a.length;if(e.backticksScanned&&(e.backticks[i]||0)<=r)return t||(e.pending+=a),e.pos+=i,!0;let u,s=n;for(;-1!==(u=e.src.indexOf("`",s));){for(s=u+1;s<o&&96===e.src.charCodeAt(s);)s++;const r=s-u;if(r===i){if(!t){const t=e.push("code_inline","code",0);t.markup=a,t.content=e.src.slice(n,u).replace(/\n/g," ").replace(/^ (.+) $/,"$1")}return e.pos=s,!0}e.backticks[r]=u}return e.backticksScanned=!0,t||(e.pending+=a),e.pos+=i,!0}],["strikethrough",Pr.tokenize],["emphasis",zr.tokenize],["link",function(e,t){let n,r,o,a,i="",u="",s=e.pos,l=!0;if(91!==e.src.charCodeAt(e.pos))return!1;const c=e.pos,f=e.posMax,p=e.pos+1,d=e.md.helpers.parseLinkLabel(e,e.pos,!0);if(d<0)return!1;let h=d+1;if(h<f&&40===e.src.charCodeAt(h)){for(l=!1,h++;h<f&&(n=e.src.charCodeAt(h),Mn(n)||10===n);h++);if(h>=f)return!1;if(s=h,o=e.md.helpers.parseLinkDestination(e.src,h,e.posMax),o.ok){for(i=e.md.normalizeLink(o.str),e.md.validateLink(i)?h=o.pos:i="",s=h;h<f&&(n=e.src.charCodeAt(h),Mn(n)||10===n);h++);if(o=e.md.helpers.parseLinkTitle(e.src,h,e.posMax),h<f&&s!==h&&o.ok)for(u=o.str,h=o.pos;h<f&&(n=e.src.charCodeAt(h),Mn(n)||10===n);h++);}(h>=f||41!==e.src.charCodeAt(h))&&(l=!0),h++}if(l){if(void 0===e.env.references)return!1;if(h<f&&91===e.src.charCodeAt(h)?(s=h+1,h=e.md.helpers.parseLinkLabel(e,h),h>=0?r=e.src.slice(s,h++):h=d+1):h=d+1,r||(r=e.src.slice(p,d)),a=e.env.references[Pn(r)],!a)return e.pos=c,!1;i=a.href,u=a.title}if(!t){e.pos=p,e.posMax=d;const t=[["href",i]];e.push("link_open","a",1).attrs=t,u&&t.push(["title",u]),e.linkLevel++,e.md.inline.tokenize(e),e.linkLevel--,e.push("link_close","a",-1)}return e.pos=h,e.posMax=f,!0}],["image",function(e,t){let n,r,o,a,i,u,s,l,c="";const f=e.pos,p=e.posMax;if(33!==e.src.charCodeAt(e.pos))return!1;if(91!==e.src.charCodeAt(e.pos+1))return!1;const d=e.pos+2,h=e.md.helpers.parseLinkLabel(e,e.pos+1,!1);if(h<0)return!1;if(a=h+1,a<p&&40===e.src.charCodeAt(a)){for(a++;a<p&&(n=e.src.charCodeAt(a),Mn(n)||10===n);a++);if(a>=p)return!1;for(l=a,u=e.md.helpers.parseLinkDestination(e.src,a,e.posMax),u.ok&&(c=e.md.normalizeLink(u.str),e.md.validateLink(c)?a=u.pos:c=""),l=a;a<p&&(n=e.src.charCodeAt(a),Mn(n)||10===n);a++);if(u=e.md.helpers.parseLinkTitle(e.src,a,e.posMax),a<p&&l!==a&&u.ok)for(s=u.str,a=u.pos;a<p&&(n=e.src.charCodeAt(a),Mn(n)||10===n);a++);else s="";if(a>=p||41!==e.src.charCodeAt(a))return e.pos=f,!1;a++}else{if(void 0===e.env.references)return!1;if(a<p&&91===e.src.charCodeAt(a)?(l=a+1,a=e.md.helpers.parseLinkLabel(e,a),a>=0?o=e.src.slice(l,a++):a=h+1):a=h+1,o||(o=e.src.slice(d,h)),i=e.env.references[Pn(o)],!i)return e.pos=f,!1;c=i.href,s=i.title}if(!t){r=e.src.slice(d,h);const t=[];e.md.inline.parse(r,e.md,e.env,t);const n=e.push("image","img",0),o=[["src",c],["alt",""]];n.attrs=o,n.children=t,n.content=r,s&&o.push(["title",s])}return e.pos=a,e.posMax=p,!0}],["autolink",function(e,t){let n=e.pos;if(60!==e.src.charCodeAt(n))return!1;const r=e.pos,o=e.posMax;for(;;){if(++n>=o)return!1;const t=e.src.charCodeAt(n);if(60===t)return!1;if(62===t)break}const a=e.src.slice(r+1,n);if(Gr.test(a)){const n=e.md.normalizeLink(a);if(!e.md.validateLink(n))return!1;if(!t){const t=e.push("link_open","a",1);t.attrs=[["href",n]],t.markup="autolink",t.info="auto",e.push("text","",0).content=e.md.normalizeLinkText(a);const r=e.push("link_close","a",-1);r.markup="autolink",r.info="auto"}return e.pos+=a.length+2,!0}if($r.test(a)){const n=e.md.normalizeLink("mailto:"+a);if(!e.md.validateLink(n))return!1;if(!t){const t=e.push("link_open","a",1);t.attrs=[["href",n]],t.markup="autolink",t.info="auto",e.push("text","",0).content=e.md.normalizeLinkText(a);const r=e.push("link_close","a",-1);r.markup="autolink",r.info="auto"}return e.pos+=a.length+2,!0}return!1}],["html_inline",function(e,t){if(!e.md.options.html)return!1;const n=e.posMax,r=e.pos;if(60!==e.src.charCodeAt(r)||r+2>=n)return!1;const o=e.src.charCodeAt(r+1);if(33!==o&&63!==o&&47!==o&&!function(e){const t=32|e;return t>=97&&t<=122}(o))return!1;const a=e.src.slice(r).match(Ar);if(!a)return!1;if(!t){const t=e.push("html_inline","",0);t.content=a[0],function(e){return/^<a[>\s]/i.test(e)}(t.content)&&e.linkLevel++,function(e){return/^<\/a\s*>/i.test(e)}(t.content)&&e.linkLevel--}return e.pos+=a[0].length,!0}],["entity",function(e,t){const n=e.pos,r=e.posMax;if(38!==e.src.charCodeAt(n))return!1;if(n+1>=r)return!1;if(35===e.src.charCodeAt(n+1)){const r=e.src.slice(n).match(Ur);if(r){if(!t){const t="x"===r[1][0].toLowerCase()?parseInt(r[1].slice(1),16):parseInt(r[1],10),n=e.push("text_special","",0);n.content=Dn(t)?kn(t):kn(65533),n.markup=r[0],n.info="entity"}return e.pos+=r[0].length,!0}}else{const r=e.src.slice(n).match(Hr);if(r){const n=function(e){return sn(e,en.Strict)}(r[0]);if(n!==r[0]){if(!t){const t=e.push("text_special","",0);t.content=n,t.markup=r[0],t.info="entity"}return e.pos+=r[0].length,!0}}}return!1}]],Vr=[["balance_pairs",function(e){const t=e.tokens_meta,n=e.tokens_meta.length;Wr(e.delimiters);for(let e=0;e<n;e++)t[e]&&t[e].delimiters&&Wr(t[e].delimiters)}],["strikethrough",Pr.postProcess],["emphasis",zr.postProcess],["fragments_join",function(e){let t,n,r=0;const o=e.tokens,a=e.tokens.length;for(t=n=0;t<a;t++)o[t].nesting<0&&r--,o[t].level=r,o[t].nesting>0&&r++,"text"===o[t].type&&t+1<a&&"text"===o[t+1].type?o[t+1].content=o[t].content+o[t+1].content:(t!==n&&(o[n]=o[t]),n++);t!==n&&(o.length=n)}]];function Kr(){this.ruler=new Yn;for(let e=0;e<Zr.length;e++)this.ruler.push(Zr[e][0],Zr[e][1]);this.ruler2=new Yn;for(let e=0;e<Vr.length;e++)this.ruler2.push(Vr[e][0],Vr[e][1])}Kr.prototype.skipToken=function(e){const t=e.pos,n=this.ruler.getRules(""),r=n.length,o=e.md.options.maxNesting,a=e.cache;if(void 0!==a[t])return void(e.pos=a[t]);let i=!1;if(e.level<o){for(let o=0;o<r;o++)if(e.level++,i=n[o](e,!0),e.level--,i){if(t>=e.pos)throw new Error("inline rule didn't increment state.pos");break}}else e.pos=e.posMax;i||e.pos++,a[t]=e.pos},Kr.prototype.tokenize=function(e){const t=this.ruler.getRules(""),n=t.length,r=e.posMax,o=e.md.options.maxNesting;for(;e.pos<r;){const a=e.pos;let i=!1;if(e.level<o)for(let r=0;r<n;r++)if(i=t[r](e,!1),i){if(a>=e.pos)throw new Error("inline rule didn't increment state.pos");break}if(i){if(e.pos>=r)break}else e.pending+=e.src[e.pos++]}e.pending&&e.pushPending()},Kr.prototype.parse=function(e,t,n,r){const o=new this.State(e,t,n,r);this.tokenize(o);const a=this.ruler2.getRules(""),i=a.length;for(let e=0;e<i;e++)a[e](o)},Kr.prototype.State=Mr;const Yr=Kr;function Jr(e){const t={};e=e||{},t.src_Any=$t.source,t.src_Cc=Gt.source,t.src_Z=Ht.source,t.src_P=qt.source,t.src_ZPCc=[t.src_Z,t.src_P,t.src_Cc].join("|"),t.src_ZCc=[t.src_Z,t.src_Cc].join("|");const n="[><|]";return t.src_pseudo_letter=`(?:(?!${n}|${t.src_ZPCc})${t.src_Any})`,t.src_ip4="(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)",t.src_auth=`(?:(?:(?!${t.src_ZCc}|[@/\\[\\]()]).){1,50}@)?`,t.src_port="(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?",t.src_host_terminator=`(?=$|${n}|${t.src_ZPCc})(?!${e["---"]?"-(?!--)|":"-|"}_|:\\d|\\.-|\\.(?!$|${t.src_ZPCc}))`,t.src_path=`(?:[/?#](?:(?!${t.src_ZCc}|${n}|[()[\\]{}.,"'?!\\-;]).|\\[(?:(?!${t.src_ZCc}|\\]).)*\\]|\\((?:(?!${t.src_ZCc}|[)]).)*\\)|\\{(?:(?!${t.src_ZCc}|[}]).)*\\}|\\"(?:(?!${t.src_ZCc}|["]).)+\\"|\\'(?:(?!${t.src_ZCc}|[']).)+\\'|\\'(?=${t.src_pseudo_letter}|[-])|\\.{2,}[a-zA-Z0-9%/&]|\\.(?!${t.src_ZCc}|[.]|$)|`+(e["---"]?"\\-(?!--(?:[^-]|$))(?:-*)|":"\\-+|")+`,(?!${t.src_ZCc}|$)|`+`;(?!${t.src_ZCc}|$)|`+`\\!+(?!${t.src_ZCc}|[!]|$)|`+`\\?(?!${t.src_ZCc}|[?]|$))+|\\/)?`,t.src_email_name='[\\-;:&=\\+\\$,\\.a-zA-Z0-9_][\\-;:&=\\+\\$,\\"\\.a-zA-Z0-9_]{0,63}',t.src_xn="xn--[a-z0-9\\-]{1,59}",t.src_domain_root="(?:"+t.src_xn+"|"+`${t.src_pseudo_letter}{1,63})`,t.src_domain="(?:"+t.src_xn+"|"+`(?:${t.src_pseudo_letter})|`+`(?:${t.src_pseudo_letter}(?:-|${t.src_pseudo_letter}){0,61}${t.src_pseudo_letter}))`,t.src_host=`(?:(?:(?:(?:${t.src_domain})\\.)*${t.src_domain}))`,t.tpl_host_fuzzy="(?:"+t.src_ip4+"|"+`(?:(?:(?:${t.src_domain})\\.)+(?:%TLDS%)))`,t.tpl_host_no_ip_fuzzy=`(?:(?:(?:${t.src_domain})\\.)+(?:%TLDS%))`,t.src_host_strict=t.src_host+t.src_host_terminator,t.tpl_host_fuzzy_strict=t.tpl_host_fuzzy+t.src_host_terminator,t.src_host_port_strict=t.src_host+t.src_port+t.src_host_terminator,t.tpl_host_port_fuzzy_strict=t.tpl_host_fuzzy+t.src_port+t.src_host_terminator,t.tpl_host_port_no_ip_fuzzy_strict=t.tpl_host_no_ip_fuzzy+t.src_port+t.src_host_terminator,t.tpl_host_fuzzy_test=`localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:${t.src_ZPCc}|>|$))`,t.tpl_email_fuzzy=`(^|${n}|"|\\(|${t.src_ZCc})(${t.src_email_name}@${t.tpl_host_fuzzy_strict})`,t.tpl_link_fuzzy=`(^|(?![.:/\\-_@])(?:[$+<=>^\`||]|${t.src_ZPCc}))((?![$+<=>^\`||])${t.tpl_host_port_fuzzy_strict}${t.src_path})`,t.tpl_link_no_ip_fuzzy=`(^|(?![.:/\\-_@])(?:[$+<=>^\`||]|${t.src_ZPCc}))((?![$+<=>^\`||])${t.tpl_host_port_no_ip_fuzzy_strict}${t.src_path})`,t}function Xr(e){return Array.prototype.slice.call(arguments,1).forEach(function(t){t&&Object.keys(t).forEach(function(n){e[n]=t[n]})}),e}function Qr(e){return Object.prototype.toString.call(e)}function eo(e){return"[object Function]"===Qr(e)}function to(e){return e.replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&")}n.dn(Jr);const no={fuzzyLink:!0,fuzzyEmail:!0,fuzzyIP:!1},ro={"http:":{validate:function(e,t,n){const r=e.slice(t);return n.re.http||(n.re.http=new RegExp(`^\\/\\/${n.re.src_auth}${n.re.src_host_port_strict}${n.re.src_path}`,"i")),n.re.http.test(r)?r.match(n.re.http)[0].length:0}},"https:":"http:","ftp:":"http:","//":{validate:function(e,t,n){const r=e.slice(t);return n.re.no_http||(n.re.no_http=new RegExp("^"+n.re.src_auth+`(?:localhost|(?:(?:${n.re.src_domain})\\.)+${n.re.src_domain_root})`+n.re.src_port+n.re.src_host_terminator+n.re.src_path,"i")),n.re.no_http.test(r)?t>=3&&":"===e[t-3]||t>=3&&"/"===e[t-3]?0:r.match(n.re.no_http)[0].length:0}},"mailto:":{validate:function(e,t,n){const r=e.slice(t);return n.re.mailto||(n.re.mailto=new RegExp(`^${n.re.src_email_name}@${n.re.src_host_strict}`,"i")),n.re.mailto.test(r)?r.match(n.re.mailto)[0].length:0}}},oo="biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф".split("|");function ao(e){const t=e.re=Jr(e.__opts__),n=e.__tlds__.slice();function r(e){return e.replace("%TLDS%",t.src_tlds)}e.onCompile(),e.__tlds_replaced__||n.push("a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]"),n.push(t.src_xn),t.src_tlds=n.join("|"),t.email_fuzzy=RegExp(r(t.tpl_email_fuzzy),"i"),t.email_fuzzy_global=RegExp(r(t.tpl_email_fuzzy),"ig"),t.link_fuzzy=RegExp(r(t.tpl_link_fuzzy),"i"),t.link_fuzzy_global=RegExp(r(t.tpl_link_fuzzy),"ig"),t.link_no_ip_fuzzy=RegExp(r(t.tpl_link_no_ip_fuzzy),"i"),t.link_no_ip_fuzzy_global=RegExp(r(t.tpl_link_no_ip_fuzzy),"ig"),t.host_fuzzy_test=RegExp(r(t.tpl_host_fuzzy_test),"i");const o=[];function a(e,t){throw new Error(`(LinkifyIt) Invalid schema "${e}": ${t}`)}e.__compiled__={},Object.keys(e.__schemas__).forEach(function(t){const n=e.__schemas__[t];if(null===n)return;const r={validate:null,link:null};if(e.__compiled__[t]=r,"[object Object]"===Qr(n))return"[object RegExp]"!==Qr(n.validate)?eo(n.validate)?r.validate=n.validate:a(t,n):r.validate=function(e){return function(t,n){const r=t.slice(n);return e.test(r)?r.match(e)[0].length:0}}(n.validate),void(eo(n.normalize)?r.normalize=n.normalize:n.normalize?a(t,n):r.normalize=function(e,t){t.normalize(e)});!function(e){return"[object String]"===Qr(e)}(n)?a(t,n):o.push(t)}),o.forEach(function(t){e.__compiled__[e.__schemas__[t]]&&(e.__compiled__[t].validate=e.__compiled__[e.__schemas__[t]].validate,e.__compiled__[t].normalize=e.__compiled__[e.__schemas__[t]].normalize)}),e.__compiled__[""]={validate:null,normalize:function(e,t){t.normalize(e)}};const i=Object.keys(e.__compiled__).filter(function(t){return t.length>0&&e.__compiled__[t]}).map(to).join("|");e.re.schema_test=RegExp(`(^|(?!_)(?:[><|]|${t.src_ZPCc}))(${i})`,"i"),e.re.schema_search=RegExp(`(^|(?!_)(?:[><|]|${t.src_ZPCc}))(${i})`,"ig"),e.re.schema_at_start=RegExp(`^${e.re.schema_search.source}`,"i"),e.re.pretest=RegExp(`(${e.re.schema_test.source})|(${e.re.host_fuzzy_test.source})|@`,"i")}function io(e,t,n,r){const o=e.slice(n,r);this.schema=t.toLowerCase(),this.index=n,this.lastIndex=r,this.raw=o,this.text=o,this.url=o}function uo(e,t){if(!(this instanceof uo))return new uo(e,t);var n;t||(n=e,Object.keys(n||{}).reduce(function(e,t){return e||no.hasOwnProperty(t)},!1)&&(t=e,e={})),this.__opts__=Xr({},no,t),this.__schemas__=Xr({},ro,e),this.__compiled__={},this.__tlds__=oo,this.__tlds_replaced__=!1,this.re={},ao(this)}uo.prototype.add=function(e,t){return this.__schemas__[e]=t,ao(this),this},uo.prototype.set=function(e){return this.__opts__=Xr(this.__opts__,e),this},uo.prototype.test=function(e){if(!e.length)return!1;let t,n;if(this.re.schema_test.test(e))for(n=this.re.schema_search,n.lastIndex=0;null!==(t=n.exec(e));)if(this.testSchemaAt(e,t[2],n.lastIndex))return!0;return!!(this.__opts__.fuzzyLink&&this.__compiled__["http:"]&&e.search(this.re.host_fuzzy_test)>=0&&null!==e.match(this.__opts__.fuzzyIP?this.re.link_fuzzy:this.re.link_no_ip_fuzzy))||!!(this.__opts__.fuzzyEmail&&this.__compiled__["mailto:"]&&e.indexOf("@")>=0&&null!==e.match(this.re.email_fuzzy))},uo.prototype.pretest=function(e){return this.re.pretest.test(e)},uo.prototype.testSchemaAt=function(e,t,n){return this.__compiled__[t.toLowerCase()]?this.__compiled__[t.toLowerCase()].validate(e,n,this):0},uo.prototype.match=function(e){const t=[],n=[],r=[],o=[];let a,i,u;function s(e,t){return e?t?e.index!==t.index?e.index<t.index?e:t:e.lastIndex>=t.lastIndex?e:t:e:t}if(!e.length)return null;if(this.re.schema_test.test(e))for(u=this.re.schema_search,u.lastIndex=0;null!==(a=u.exec(e));)i=this.testSchemaAt(e,a[2],u.lastIndex),i&&n.push({schema:a[2],index:a.index+a[1].length,lastIndex:a.index+a[0].length+i});if(this.__opts__.fuzzyLink&&this.__compiled__["http:"])for(u=this.__opts__.fuzzyIP?this.re.link_fuzzy_global:this.re.link_no_ip_fuzzy_global,u.lastIndex=0;null!==(a=u.exec(e));)r.push({schema:"",index:a.index+a[1].length,lastIndex:a.index+a[0].length});if(this.__opts__.fuzzyEmail&&this.__compiled__["mailto:"])for(u=this.re.email_fuzzy_global,u.lastIndex=0;null!==(a=u.exec(e));)o.push({schema:"mailto:",index:a.index+a[1].length,lastIndex:a.index+a[0].length});const l=[0,0,0];let c=0;for(;;){const a=[n[l[0]],o[l[1]],r[l[2]]],i=s(s(a[0],a[1]),a[2]);if(!i)break;if(i===a[0]?l[0]++:i===a[1]?l[1]++:l[2]++,i.index<c)continue;const u=new io(e,i.schema,i.index,i.lastIndex);this.__compiled__[u.schema].normalize(u,this),t.push(u),c=i.lastIndex}return t.length?t:null},uo.prototype.matchAtStart=function(e){if(!e.length)return null;const t=this.re.schema_at_start.exec(e);if(!t)return null;const n=this.testSchemaAt(e,t[2],t[0].length);if(!n)return null;const r=new io(e,t[2],t.index+t[1].length,t.index+t[0].length+n);return this.__compiled__[r.schema].normalize(r,this),r},uo.prototype.tlds=function(e,t){return e=Array.isArray(e)?e:[e],t?(this.__tlds__=this.__tlds__.concat(e).sort().filter(function(e,t,n){return e!==n[t-1]}).reverse(),ao(this),this):(this.__tlds__=e.slice(),this.__tlds_replaced__=!0,ao(this),this)},uo.prototype.normalize=function(e){e.schema||(e.url=`http://${e.url}`),"mailto:"!==e.schema||/^mailto:/i.test(e.url)||(e.url=`mailto:${e.url}`)},uo.prototype.onCompile=function(){};const so=uo,lo=2147483647,co=36,fo=/^xn--/,po=/[^\0-\x7F]/,ho=/[\x2E\u3002\uFF0E\uFF61]/g,mo={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},go=Math.floor,_o=String.fromCharCode;function bo(e){throw new RangeError(mo[e])}function yo(e,t){const n=e.split("@");let r="";n.length>1&&(r=n[0]+"@",e=n[1]);const o=function(e,t){const n=[];let r=e.length;for(;r--;)n[r]=t(e[r]);return n}((e=e.replace(ho,".")).split("."),t).join(".");return r+o}function Do(e){const t=[];let n=0;const r=e.length;for(;n<r;){const o=e.charCodeAt(n++);if(o>=55296&&o<=56319&&n<r){const r=e.charCodeAt(n++);56320==(64512&r)?t.push(((1023&o)<<10)+(1023&r)+65536):(t.push(o),n--)}else t.push(o)}return t}const ko=function(e){return e>=48&&e<58?e-48+26:e>=65&&e<91?e-65:e>=97&&e<123?e-97:co},wo=function(e,t){return e+22+75*(e<26)-((0!=t)<<5)},vo=function(e,t,n){let r=0;for(e=n?go(e/700):e>>1,e+=go(e/t);e>455;r+=co)e=go(e/35);return go(r+36*e/(e+38))},Fo=function(e){const t=[],n=e.length;let r=0,o=128,a=72,i=e.lastIndexOf("-");i<0&&(i=0);for(let n=0;n<i;++n)e.charCodeAt(n)>=128&&bo("not-basic"),t.push(e.charCodeAt(n));for(let u=i>0?i+1:0;u<n;){const i=r;for(let t=1,o=co;;o+=co){u>=n&&bo("invalid-input");const i=ko(e.charCodeAt(u++));i>=co&&bo("invalid-input"),i>go((lo-r)/t)&&bo("overflow"),r+=i*t;const s=o<=a?1:o>=a+26?26:o-a;if(i<s)break;const l=co-s;t>go(lo/l)&&bo("overflow"),t*=l}const s=t.length+1;a=vo(r-i,s,0==i),go(r/s)>lo-o&&bo("overflow"),o+=go(r/s),r%=s,t.splice(r++,0,o)}return String.fromCodePoint(...t)},Co=function(e){const t=[],n=(e=Do(e)).length;let r=128,o=0,a=72;for(const n of e)n<128&&t.push(_o(n));const i=t.length;let u=i;for(i&&t.push("-");u<n;){let n=lo;for(const t of e)t>=r&&t<n&&(n=t);const s=u+1;n-r>go((lo-o)/s)&&bo("overflow"),o+=(n-r)*s,r=n;for(const n of e)if(n<r&&++o>lo&&bo("overflow"),n===r){let e=o;for(let n=co;;n+=co){const r=n<=a?1:n>=a+26?26:n-a;if(e<r)break;const o=e-r,i=co-r;t.push(_o(wo(r+o%i,0))),e=go(o/i)}t.push(_o(wo(e,0))),a=vo(o,s,u===i),o=0,++u}++o,++r}return t.join("")},Eo=function(e){return yo(e,function(e){return po.test(e)?"xn--"+Co(e):e})},Ao=function(e){return yo(e,function(e){return fo.test(e)?Fo(e.slice(4).toLowerCase()):e})},xo={default:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:100},components:{core:{},block:{},inline:{}}},zero:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:20},components:{core:{rules:["normalize","block","inline","text_join"]},block:{rules:["paragraph"]},inline:{rules:["text"],rules2:["balance_pairs","fragments_join"]}}},commonmark:{options:{html:!0,xhtmlOut:!0,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:20},components:{core:{rules:["normalize","block","inline","text_join"]},block:{rules:["blockquote","code","fence","heading","hr","html_block","lheading","list","reference","paragraph"]},inline:{rules:["autolink","backticks","emphasis","entity","escape","html_inline","image","link","newline","text"],rules2:["balance_pairs","emphasis","fragments_join"]}}}},So=/^(vbscript|javascript|file|data):/,Bo=/^data:image\/(gif|png|jpeg|webp);/;function To(e){const t=e.trim().toLowerCase();return!So.test(t)||Bo.test(t)}const Lo=["http:","https:","mailto:"];function jo(e){const t=Pt(e,!0);if(t.hostname&&(!t.protocol||Lo.indexOf(t.protocol)>=0))try{t.hostname=Eo(t.hostname)}catch(e){}return Ct(Et(t))}function Mo(e){const t=Pt(e,!0);if(t.hostname&&(!t.protocol||Lo.indexOf(t.protocol)>=0))try{t.hostname=Ao(t.hostname)}catch(e){}return wt(Et(t),wt.defaultChars+"%")}function Oo(e,t){if(!(this instanceof Oo))return new Oo(e,t);t||hn(e)||(t=e||{},e="default"),this.inline=new Yr,this.block=new Lr,this.core=new br,this.renderer=new Vn,this.linkify=new so,this.validateLink=To,this.normalizeLink=jo,this.normalizeLinkText=Mo,this.utils=r,this.helpers=bn({},o),this.options={},this.configure(e),t&&this.set(t)}Oo.prototype.set=function(e){return bn(this.options,e),this},Oo.prototype.configure=function(e){const t=this;if(hn(e)){const t=e;if(!(e=xo[t]))throw new Error('Wrong `markdown-it` preset "'+t+'", check name')}if(!e)throw new Error("Wrong `markdown-it` preset, can't be empty");return e.options&&t.set(e.options),e.components&&Object.keys(e.components).forEach(function(n){e.components[n].rules&&t[n].ruler.enableOnly(e.components[n].rules),e.components[n].rules2&&t[n].ruler2.enableOnly(e.components[n].rules2)}),this},Oo.prototype.enable=function(e,t){let n=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach(function(t){n=n.concat(this[t].ruler.enable(e,!0))},this),n=n.concat(this.inline.ruler2.enable(e,!0));const r=e.filter(function(e){return n.indexOf(e)<0});if(r.length&&!t)throw new Error("MarkdownIt. Failed to enable unknown rule(s): "+r);return this},Oo.prototype.disable=function(e,t){let n=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach(function(t){n=n.concat(this[t].ruler.disable(e,!0))},this),n=n.concat(this.inline.ruler2.disable(e,!0));const r=e.filter(function(e){return n.indexOf(e)<0});if(r.length&&!t)throw new Error("MarkdownIt. Failed to disable unknown rule(s): "+r);return this},Oo.prototype.use=function(e){const t=[this].concat(Array.prototype.slice.call(arguments,1));return e.apply(e,t),this},Oo.prototype.parse=function(e,t){if("string"!=typeof e)throw new Error("Input data should be a String");const n=new this.core.State(e,this,t);return this.core.process(n),n.tokens},Oo.prototype.render=function(e,t){return t=t||{},this.renderer.render(this.parse(e,t),this.options,t)},Oo.prototype.parseInline=function(e,t){const n=new this.core.State(e,this,t);return n.inlineMode=!0,this.core.process(n),n.tokens},Oo.prototype.renderInline=function(e,t){return t=t||{},this.renderer.render(this.parseInline(e,t),this.options,t)};const Io=Oo;var Ro=n(428),No=n.n(Ro);function Po(e,t,n,r){const o=Number(e[t].meta.id+1).toString();let a="";return"string"==typeof r.docId&&(a=`-${r.docId}-`),a+o}function qo(e,t){let n=Number(e[t].meta.id+1).toString();return e[t].meta.subId>0&&(n+=`:${e[t].meta.subId}`),`[${n}]`}function zo(e,t,n,r,o){const a=o.rules.footnote_anchor_name(e,t,n,r,o),i=o.rules.footnote_caption(e,t,n,r,o);let u=a;return e[t].meta.subId>0&&(u+=`:${e[t].meta.subId}`),`<sup class="footnote-ref"><a href="#fn${a}" id="fnref${u}">${i}</a></sup>`}function $o(e,t,n){return(n.xhtmlOut?'<hr class="footnotes-sep" />\n':'<hr class="footnotes-sep">\n')+'<section class="footnotes">\n<ol class="footnotes-list">\n'}function Go(){return"</ol>\n</section>\n"}function Uo(e,t,n,r,o){let a=o.rules.footnote_anchor_name(e,t,n,r,o);return e[t].meta.subId>0&&(a+=`:${e[t].meta.subId}`),`<li id="fn${a}" class="footnote-item">`}function Ho(){return"</li>\n"}function Wo(e,t,n,r,o){let a=o.rules.footnote_anchor_name(e,t,n,r,o);return e[t].meta.subId>0&&(a+=`:${e[t].meta.subId}`),` <a href="#fnref${a}" class="footnote-backref">↩︎</a>`}var Zo=n(366),Vo=n.n(Zo);const Ko={100:"💯",1234:"🔢",grinning:"😀",smiley:"😃",smile:"😄",grin:"😁",laughing:"😆",satisfied:"😆",sweat_smile:"😅",rofl:"🤣",joy:"😂",slightly_smiling_face:"🙂",upside_down_face:"🙃",melting_face:"🫠",wink:"😉",blush:"😊",innocent:"😇",smiling_face_with_three_hearts:"🥰",heart_eyes:"😍",star_struck:"🤩",kissing_heart:"😘",kissing:"😗",relaxed:"☺️",kissing_closed_eyes:"😚",kissing_smiling_eyes:"😙",smiling_face_with_tear:"🥲",yum:"😋",stuck_out_tongue:"😛",stuck_out_tongue_winking_eye:"😜",zany_face:"🤪",stuck_out_tongue_closed_eyes:"😝",money_mouth_face:"🤑",hugs:"🤗",hand_over_mouth:"🤭",face_with_open_eyes_and_hand_over_mouth:"🫢",face_with_peeking_eye:"🫣",shushing_face:"🤫",thinking:"🤔",saluting_face:"🫡",zipper_mouth_face:"🤐",raised_eyebrow:"🤨",neutral_face:"😐",expressionless:"😑",no_mouth:"😶",dotted_line_face:"🫥",face_in_clouds:"😶🌫️",smirk:"😏",unamused:"😒",roll_eyes:"🙄",grimacing:"😬",face_exhaling:"😮💨",lying_face:"🤥",shaking_face:"🫨",relieved:"😌",pensive:"😔",sleepy:"😪",drooling_face:"🤤",sleeping:"😴",mask:"😷",face_with_thermometer:"🤒",face_with_head_bandage:"🤕",nauseated_face:"🤢",vomiting_face:"🤮",sneezing_face:"🤧",hot_face:"🥵",cold_face:"🥶",woozy_face:"🥴",dizzy_face:"😵",face_with_spiral_eyes:"😵💫",exploding_head:"🤯",cowboy_hat_face:"🤠",partying_face:"🥳",disguised_face:"🥸",sunglasses:"😎",nerd_face:"🤓",monocle_face:"🧐",confused:"😕",face_with_diagonal_mouth:"🫤",worried:"😟",slightly_frowning_face:"🙁",frowning_face:"☹️",open_mouth:"😮",hushed:"😯",astonished:"😲",flushed:"😳",pleading_face:"🥺",face_holding_back_tears:"🥹",frowning:"😦",anguished:"😧",fearful:"😨",cold_sweat:"😰",disappointed_relieved:"😥",cry:"😢",sob:"😭",scream:"😱",confounded:"😖",persevere:"😣",disappointed:"😞",sweat:"😓",weary:"😩",tired_face:"😫",yawning_face:"🥱",triumph:"😤",rage:"😡",pout:"😡",angry:"😠",cursing_face:"🤬",smiling_imp:"😈",imp:"👿",skull:"💀",skull_and_crossbones:"☠️",hankey:"💩",poop:"💩",shit:"💩",clown_face:"🤡",japanese_ogre:"👹",japanese_goblin:"👺",ghost:"👻",alien:"👽",space_invader:"👾",robot:"🤖",smiley_cat:"😺",smile_cat:"😸",joy_cat:"😹",heart_eyes_cat:"😻",smirk_cat:"😼",kissing_cat:"😽",scream_cat:"🙀",crying_cat_face:"😿",pouting_cat:"😾",see_no_evil:"🙈",hear_no_evil:"🙉",speak_no_evil:"🙊",love_letter:"💌",cupid:"💘",gift_heart:"💝",sparkling_heart:"💖",heartpulse:"💗",heartbeat:"💓",revolving_hearts:"💞",two_hearts:"💕",heart_decoration:"💟",heavy_heart_exclamation:"❣️",broken_heart:"💔",heart_on_fire:"❤️🔥",mending_heart:"❤️🩹",heart:"❤️",pink_heart:"🩷",orange_heart:"🧡",yellow_heart:"💛",green_heart:"💚",blue_heart:"💙",light_blue_heart:"🩵",purple_heart:"💜",brown_heart:"🤎",black_heart:"🖤",grey_heart:"🩶",white_heart:"🤍",kiss:"💋",anger:"💢",boom:"💥",collision:"💥",dizzy:"💫",sweat_drops:"💦",dash:"💨",hole:"🕳️",speech_balloon:"💬",eye_speech_bubble:"👁️🗨️",left_speech_bubble:"🗨️",right_anger_bubble:"🗯️",thought_balloon:"💭",zzz:"💤",wave:"👋",raised_back_of_hand:"🤚",raised_hand_with_fingers_splayed:"🖐️",hand:"✋",raised_hand:"✋",vulcan_salute:"🖖",rightwards_hand:"🫱",leftwards_hand:"🫲",palm_down_hand:"🫳",palm_up_hand:"🫴",leftwards_pushing_hand:"🫷",rightwards_pushing_hand:"🫸",ok_hand:"👌",pinched_fingers:"🤌",pinching_hand:"🤏",v:"✌️",crossed_fingers:"🤞",hand_with_index_finger_and_thumb_crossed:"🫰",love_you_gesture:"🤟",metal:"🤘",call_me_hand:"🤙",point_left:"👈",point_right:"👉",point_up_2:"👆",middle_finger:"🖕",fu:"🖕",point_down:"👇",point_up:"☝️",index_pointing_at_the_viewer:"🫵","+1":"👍",thumbsup:"👍","-1":"👎",thumbsdown:"👎",fist_raised:"✊",fist:"✊",fist_oncoming:"👊",facepunch:"👊",punch:"👊",fist_left:"🤛",fist_right:"🤜",clap:"👏",raised_hands:"🙌",heart_hands:"🫶",open_hands:"👐",palms_up_together:"🤲",handshake:"🤝",pray:"🙏",writing_hand:"✍️",nail_care:"💅",selfie:"🤳",muscle:"💪",mechanical_arm:"🦾",mechanical_leg:"🦿",leg:"🦵",foot:"🦶",ear:"👂",ear_with_hearing_aid:"🦻",nose:"👃",brain:"🧠",anatomical_heart:"🫀",lungs:"🫁",tooth:"🦷",bone:"🦴",eyes:"👀",eye:"👁️",tongue:"👅",lips:"👄",biting_lip:"🫦",baby:"👶",child:"🧒",boy:"👦",girl:"👧",adult:"🧑",blond_haired_person:"👱",man:"👨",bearded_person:"🧔",man_beard:"🧔♂️",woman_beard:"🧔♀️",red_haired_man:"👨🦰",curly_haired_man:"👨🦱",white_haired_man:"👨🦳",bald_man:"👨🦲",woman:"👩",red_haired_woman:"👩🦰",person_red_hair:"🧑🦰",curly_haired_woman:"👩🦱",person_curly_hair:"🧑🦱",white_haired_woman:"👩🦳",person_white_hair:"🧑🦳",bald_woman:"👩🦲",person_bald:"🧑🦲",blond_haired_woman:"👱♀️",blonde_woman:"👱♀️",blond_haired_man:"👱♂️",older_adult:"🧓",older_man:"👴",older_woman:"👵",frowning_person:"🙍",frowning_man:"🙍♂️",frowning_woman:"🙍♀️",pouting_face:"🙎",pouting_man:"🙎♂️",pouting_woman:"🙎♀️",no_good:"🙅",no_good_man:"🙅♂️",ng_man:"🙅♂️",no_good_woman:"🙅♀️",ng_woman:"🙅♀️",ok_person:"🙆",ok_man:"🙆♂️",ok_woman:"🙆♀️",tipping_hand_person:"💁",information_desk_person:"💁",tipping_hand_man:"💁♂️",sassy_man:"💁♂️",tipping_hand_woman:"💁♀️",sassy_woman:"💁♀️",raising_hand:"🙋",raising_hand_man:"🙋♂️",raising_hand_woman:"🙋♀️",deaf_person:"🧏",deaf_man:"🧏♂️",deaf_woman:"🧏♀️",bow:"🙇",bowing_man:"🙇♂️",bowing_woman:"🙇♀️",facepalm:"🤦",man_facepalming:"🤦♂️",woman_facepalming:"🤦♀️",shrug:"🤷",man_shrugging:"🤷♂️",woman_shrugging:"🤷♀️",health_worker:"🧑⚕️",man_health_worker:"👨⚕️",woman_health_worker:"👩⚕️",student:"🧑🎓",man_student:"👨🎓",woman_student:"👩🎓",teacher:"🧑🏫",man_teacher:"👨🏫",woman_teacher:"👩🏫",judge:"🧑⚖️",man_judge:"👨⚖️",woman_judge:"👩⚖️",farmer:"🧑🌾",man_farmer:"👨🌾",woman_farmer:"👩🌾",cook:"🧑🍳",man_cook:"👨🍳",woman_cook:"👩🍳",mechanic:"🧑🔧",man_mechanic:"👨🔧",woman_mechanic:"👩🔧",factory_worker:"🧑🏭",man_factory_worker:"👨🏭",woman_factory_worker:"👩🏭",office_worker:"🧑💼",man_office_worker:"👨💼",woman_office_worker:"👩💼",scientist:"🧑🔬",man_scientist:"👨🔬",woman_scientist:"👩🔬",technologist:"🧑💻",man_technologist:"👨💻",woman_technologist:"👩💻",singer:"🧑🎤",man_singer:"👨🎤",woman_singer:"👩🎤",artist:"🧑🎨",man_artist:"👨🎨",woman_artist:"👩🎨",pilot:"🧑✈️",man_pilot:"👨✈️",woman_pilot:"👩✈️",astronaut:"🧑🚀",man_astronaut:"👨🚀",woman_astronaut:"👩🚀",firefighter:"🧑🚒",man_firefighter:"👨🚒",woman_firefighter:"👩🚒",police_officer:"👮",cop:"👮",policeman:"👮♂️",policewoman:"👮♀️",detective:"🕵️",male_detective:"🕵️♂️",female_detective:"🕵️♀️",guard:"💂",guardsman:"💂♂️",guardswoman:"💂♀️",ninja:"🥷",construction_worker:"👷",construction_worker_man:"👷♂️",construction_worker_woman:"👷♀️",person_with_crown:"🫅",prince:"🤴",princess:"👸",person_with_turban:"👳",man_with_turban:"👳♂️",woman_with_turban:"👳♀️",man_with_gua_pi_mao:"👲",woman_with_headscarf:"🧕",person_in_tuxedo:"🤵",man_in_tuxedo:"🤵♂️",woman_in_tuxedo:"🤵♀️",person_with_veil:"👰",man_with_veil:"👰♂️",woman_with_veil:"👰♀️",bride_with_veil:"👰♀️",pregnant_woman:"🤰",pregnant_man:"🫃",pregnant_person:"🫄",breast_feeding:"🤱",woman_feeding_baby:"👩🍼",man_feeding_baby:"👨🍼",person_feeding_baby:"🧑🍼",angel:"👼",santa:"🎅",mrs_claus:"🤶",mx_claus:"🧑🎄",superhero:"🦸",superhero_man:"🦸♂️",superhero_woman:"🦸♀️",supervillain:"🦹",supervillain_man:"🦹♂️",supervillain_woman:"🦹♀️",mage:"🧙",mage_man:"🧙♂️",mage_woman:"🧙♀️",fairy:"🧚",fairy_man:"🧚♂️",fairy_woman:"🧚♀️",vampire:"🧛",vampire_man:"🧛♂️",vampire_woman:"🧛♀️",merperson:"🧜",merman:"🧜♂️",mermaid:"🧜♀️",elf:"🧝",elf_man:"🧝♂️",elf_woman:"🧝♀️",genie:"🧞",genie_man:"🧞♂️",genie_woman:"🧞♀️",zombie:"🧟",zombie_man:"🧟♂️",zombie_woman:"🧟♀️",troll:"🧌",massage:"💆",massage_man:"💆♂️",massage_woman:"💆♀️",haircut:"💇",haircut_man:"💇♂️",haircut_woman:"💇♀️",walking:"🚶",walking_man:"🚶♂️",walking_woman:"🚶♀️",standing_person:"🧍",standing_man:"🧍♂️",standing_woman:"🧍♀️",kneeling_person:"🧎",kneeling_man:"🧎♂️",kneeling_woman:"🧎♀️",person_with_probing_cane:"🧑🦯",man_with_probing_cane:"👨🦯",woman_with_probing_cane:"👩🦯",person_in_motorized_wheelchair:"🧑🦼",man_in_motorized_wheelchair:"👨🦼",woman_in_motorized_wheelchair:"👩🦼",person_in_manual_wheelchair:"🧑🦽",man_in_manual_wheelchair:"👨🦽",woman_in_manual_wheelchair:"👩🦽",runner:"🏃",running:"🏃",running_man:"🏃♂️",running_woman:"🏃♀️",woman_dancing:"💃",dancer:"💃",man_dancing:"🕺",business_suit_levitating:"🕴️",dancers:"👯",dancing_men:"👯♂️",dancing_women:"👯♀️",sauna_person:"🧖",sauna_man:"🧖♂️",sauna_woman:"🧖♀️",climbing:"🧗",climbing_man:"🧗♂️",climbing_woman:"🧗♀️",person_fencing:"🤺",horse_racing:"🏇",skier:"⛷️",snowboarder:"🏂",golfing:"🏌️",golfing_man:"🏌️♂️",golfing_woman:"🏌️♀️",surfer:"🏄",surfing_man:"🏄♂️",surfing_woman:"🏄♀️",rowboat:"🚣",rowing_man:"🚣♂️",rowing_woman:"🚣♀️",swimmer:"🏊",swimming_man:"🏊♂️",swimming_woman:"🏊♀️",bouncing_ball_person:"⛹️",bouncing_ball_man:"⛹️♂️",basketball_man:"⛹️♂️",bouncing_ball_woman:"⛹️♀️",basketball_woman:"⛹️♀️",weight_lifting:"🏋️",weight_lifting_man:"🏋️♂️",weight_lifting_woman:"🏋️♀️",bicyclist:"🚴",biking_man:"🚴♂️",biking_woman:"🚴♀️",mountain_bicyclist:"🚵",mountain_biking_man:"🚵♂️",mountain_biking_woman:"🚵♀️",cartwheeling:"🤸",man_cartwheeling:"🤸♂️",woman_cartwheeling:"🤸♀️",wrestling:"🤼",men_wrestling:"🤼♂️",women_wrestling:"🤼♀️",water_polo:"🤽",man_playing_water_polo:"🤽♂️",woman_playing_water_polo:"🤽♀️",handball_person:"🤾",man_playing_handball:"🤾♂️",woman_playing_handball:"🤾♀️",juggling_person:"🤹",man_juggling:"🤹♂️",woman_juggling:"🤹♀️",lotus_position:"🧘",lotus_position_man:"🧘♂️",lotus_position_woman:"🧘♀️",bath:"🛀",sleeping_bed:"🛌",people_holding_hands:"🧑🤝🧑",two_women_holding_hands:"👭",couple:"👫",two_men_holding_hands:"👬",couplekiss:"💏",couplekiss_man_woman:"👩❤️💋👨",couplekiss_man_man:"👨❤️💋👨",couplekiss_woman_woman:"👩❤️💋👩",couple_with_heart:"💑",couple_with_heart_woman_man:"👩❤️👨",couple_with_heart_man_man:"👨❤️👨",couple_with_heart_woman_woman:"👩❤️👩",family:"👪",family_man_woman_boy:"👨👩👦",family_man_woman_girl:"👨👩👧",family_man_woman_girl_boy:"👨👩👧👦",family_man_woman_boy_boy:"👨👩👦👦",family_man_woman_girl_girl:"👨👩👧👧",family_man_man_boy:"👨👨👦",family_man_man_girl:"👨👨👧",family_man_man_girl_boy:"👨👨👧👦",family_man_man_boy_boy:"👨👨👦👦",family_man_man_girl_girl:"👨👨👧👧",family_woman_woman_boy:"👩👩👦",family_woman_woman_girl:"👩👩👧",family_woman_woman_girl_boy:"👩👩👧👦",family_woman_woman_boy_boy:"👩👩👦👦",family_woman_woman_girl_girl:"👩👩👧👧",family_man_boy:"👨👦",family_man_boy_boy:"👨👦👦",family_man_girl:"👨👧",family_man_girl_boy:"👨👧👦",family_man_girl_girl:"👨👧👧",family_woman_boy:"👩👦",family_woman_boy_boy:"👩👦👦",family_woman_girl:"👩👧",family_woman_girl_boy:"👩👧👦",family_woman_girl_girl:"👩👧👧",speaking_head:"🗣️",bust_in_silhouette:"👤",busts_in_silhouette:"👥",people_hugging:"🫂",footprints:"👣",monkey_face:"🐵",monkey:"🐒",gorilla:"🦍",orangutan:"🦧",dog:"🐶",dog2:"🐕",guide_dog:"🦮",service_dog:"🐕🦺",poodle:"🐩",wolf:"🐺",fox_face:"🦊",raccoon:"🦝",cat:"🐱",cat2:"🐈",black_cat:"🐈⬛",lion:"🦁",tiger:"🐯",tiger2:"🐅",leopard:"🐆",horse:"🐴",moose:"🫎",donkey:"🫏",racehorse:"🐎",unicorn:"🦄",zebra:"🦓",deer:"🦌",bison:"🦬",cow:"🐮",ox:"🐂",water_buffalo:"🐃",cow2:"🐄",pig:"🐷",pig2:"🐖",boar:"🐗",pig_nose:"🐽",ram:"🐏",sheep:"🐑",goat:"🐐",dromedary_camel:"🐪",camel:"🐫",llama:"🦙",giraffe:"🦒",elephant:"🐘",mammoth:"🦣",rhinoceros:"🦏",hippopotamus:"🦛",mouse:"🐭",mouse2:"🐁",rat:"🐀",hamster:"🐹",rabbit:"🐰",rabbit2:"🐇",chipmunk:"🐿️",beaver:"🦫",hedgehog:"🦔",bat:"🦇",bear:"🐻",polar_bear:"🐻❄️",koala:"🐨",panda_face:"🐼",sloth:"🦥",otter:"🦦",skunk:"🦨",kangaroo:"🦘",badger:"🦡",feet:"🐾",paw_prints:"🐾",turkey:"🦃",chicken:"🐔",rooster:"🐓",hatching_chick:"🐣",baby_chick:"🐤",hatched_chick:"🐥",bird:"🐦",penguin:"🐧",dove:"🕊️",eagle:"🦅",duck:"🦆",swan:"🦢",owl:"🦉",dodo:"🦤",feather:"🪶",flamingo:"🦩",peacock:"🦚",parrot:"🦜",wing:"🪽",black_bird:"🐦⬛",goose:"🪿",frog:"🐸",crocodile:"🐊",turtle:"🐢",lizard:"🦎",snake:"🐍",dragon_face:"🐲",dragon:"🐉",sauropod:"🦕","t-rex":"🦖",whale:"🐳",whale2:"🐋",dolphin:"🐬",flipper:"🐬",seal:"🦭",fish:"🐟",tropical_fish:"🐠",blowfish:"🐡",shark:"🦈",octopus:"🐙",shell:"🐚",coral:"🪸",jellyfish:"🪼",snail:"🐌",butterfly:"🦋",bug:"🐛",ant:"🐜",bee:"🐝",honeybee:"🐝",beetle:"🪲",lady_beetle:"🐞",cricket:"🦗",cockroach:"🪳",spider:"🕷️",spider_web:"🕸️",scorpion:"🦂",mosquito:"🦟",fly:"🪰",worm:"🪱",microbe:"🦠",bouquet:"💐",cherry_blossom:"🌸",white_flower:"💮",lotus:"🪷",rosette:"🏵️",rose:"🌹",wilted_flower:"🥀",hibiscus:"🌺",sunflower:"🌻",blossom:"🌼",tulip:"🌷",hyacinth:"🪻",seedling:"🌱",potted_plant:"🪴",evergreen_tree:"🌲",deciduous_tree:"🌳",palm_tree:"🌴",cactus:"🌵",ear_of_rice:"🌾",herb:"🌿",shamrock:"☘️",four_leaf_clover:"🍀",maple_leaf:"🍁",fallen_leaf:"🍂",leaves:"🍃",empty_nest:"🪹",nest_with_eggs:"🪺",mushroom:"🍄",grapes:"🍇",melon:"🍈",watermelon:"🍉",tangerine:"🍊",orange:"🍊",mandarin:"🍊",lemon:"🍋",banana:"🍌",pineapple:"🍍",mango:"🥭",apple:"🍎",green_apple:"🍏",pear:"🍐",peach:"🍑",cherries:"🍒",strawberry:"🍓",blueberries:"🫐",kiwi_fruit:"🥝",tomato:"🍅",olive:"🫒",coconut:"🥥",avocado:"🥑",eggplant:"🍆",potato:"🥔",carrot:"🥕",corn:"🌽",hot_pepper:"🌶️",bell_pepper:"🫑",cucumber:"🥒",leafy_green:"🥬",broccoli:"🥦",garlic:"🧄",onion:"🧅",peanuts:"🥜",beans:"🫘",chestnut:"🌰",ginger_root:"🫚",pea_pod:"🫛",bread:"🍞",croissant:"🥐",baguette_bread:"🥖",flatbread:"🫓",pretzel:"🥨",bagel:"🥯",pancakes:"🥞",waffle:"🧇",cheese:"🧀",meat_on_bone:"🍖",poultry_leg:"🍗",cut_of_meat:"🥩",bacon:"🥓",hamburger:"🍔",fries:"🍟",pizza:"🍕",hotdog:"🌭",sandwich:"🥪",taco:"🌮",burrito:"🌯",tamale:"🫔",stuffed_flatbread:"🥙",falafel:"🧆",egg:"🥚",fried_egg:"🍳",shallow_pan_of_food:"🥘",stew:"🍲",fondue:"🫕",bowl_with_spoon:"🥣",green_salad:"🥗",popcorn:"🍿",butter:"🧈",salt:"🧂",canned_food:"🥫",bento:"🍱",rice_cracker:"🍘",rice_ball:"🍙",rice:"🍚",curry:"🍛",ramen:"🍜",spaghetti:"🍝",sweet_potato:"🍠",oden:"🍢",sushi:"🍣",fried_shrimp:"🍤",fish_cake:"🍥",moon_cake:"🥮",dango:"🍡",dumpling:"🥟",fortune_cookie:"🥠",takeout_box:"🥡",crab:"🦀",lobster:"🦞",shrimp:"🦐",squid:"🦑",oyster:"🦪",icecream:"🍦",shaved_ice:"🍧",ice_cream:"🍨",doughnut:"🍩",cookie:"🍪",birthday:"🎂",cake:"🍰",cupcake:"🧁",pie:"🥧",chocolate_bar:"🍫",candy:"🍬",lollipop:"🍭",custard:"🍮",honey_pot:"🍯",baby_bottle:"🍼",milk_glass:"🥛",coffee:"☕",teapot:"🫖",tea:"🍵",sake:"🍶",champagne:"🍾",wine_glass:"🍷",cocktail:"🍸",tropical_drink:"🍹",beer:"🍺",beers:"🍻",clinking_glasses:"🥂",tumbler_glass:"🥃",pouring_liquid:"🫗",cup_with_straw:"🥤",bubble_tea:"🧋",beverage_box:"🧃",mate:"🧉",ice_cube:"🧊",chopsticks:"🥢",plate_with_cutlery:"🍽️",fork_and_knife:"🍴",spoon:"🥄",hocho:"🔪",knife:"🔪",jar:"🫙",amphora:"🏺",earth_africa:"🌍",earth_americas:"🌎",earth_asia:"🌏",globe_with_meridians:"🌐",world_map:"🗺️",japan:"🗾",compass:"🧭",mountain_snow:"🏔️",mountain:"⛰️",volcano:"🌋",mount_fuji:"🗻",camping:"🏕️",beach_umbrella:"🏖️",desert:"🏜️",desert_island:"🏝️",national_park:"🏞️",stadium:"🏟️",classical_building:"🏛️",building_construction:"🏗️",bricks:"🧱",rock:"🪨",wood:"🪵",hut:"🛖",houses:"🏘️",derelict_house:"🏚️",house:"🏠",house_with_garden:"🏡",office:"🏢",post_office:"🏣",european_post_office:"🏤",hospital:"🏥",bank:"🏦",hotel:"🏨",love_hotel:"🏩",convenience_store:"🏪",school:"🏫",department_store:"🏬",factory:"🏭",japanese_castle:"🏯",european_castle:"🏰",wedding:"💒",tokyo_tower:"🗼",statue_of_liberty:"🗽",church:"⛪",mosque:"🕌",hindu_temple:"🛕",synagogue:"🕍",shinto_shrine:"⛩️",kaaba:"🕋",fountain:"⛲",tent:"⛺",foggy:"🌁",night_with_stars:"🌃",cityscape:"🏙️",sunrise_over_mountains:"🌄",sunrise:"🌅",city_sunset:"🌆",city_sunrise:"🌇",bridge_at_night:"🌉",hotsprings:"♨️",carousel_horse:"🎠",playground_slide:"🛝",ferris_wheel:"🎡",roller_coaster:"🎢",barber:"💈",circus_tent:"🎪",steam_locomotive:"🚂",railway_car:"🚃",bullettrain_side:"🚄",bullettrain_front:"🚅",train2:"🚆",metro:"🚇",light_rail:"🚈",station:"🚉",tram:"🚊",monorail:"🚝",mountain_railway:"🚞",train:"🚋",bus:"🚌",oncoming_bus:"🚍",trolleybus:"🚎",minibus:"🚐",ambulance:"🚑",fire_engine:"🚒",police_car:"🚓",oncoming_police_car:"🚔",taxi:"🚕",oncoming_taxi:"🚖",car:"🚗",red_car:"🚗",oncoming_automobile:"🚘",blue_car:"🚙",pickup_truck:"🛻",truck:"🚚",articulated_lorry:"🚛",tractor:"🚜",racing_car:"🏎️",motorcycle:"🏍️",motor_scooter:"🛵",manual_wheelchair:"🦽",motorized_wheelchair:"🦼",auto_rickshaw:"🛺",bike:"🚲",kick_scooter:"🛴",skateboard:"🛹",roller_skate:"🛼",busstop:"🚏",motorway:"🛣️",railway_track:"🛤️",oil_drum:"🛢️",fuelpump:"⛽",wheel:"🛞",rotating_light:"🚨",traffic_light:"🚥",vertical_traffic_light:"🚦",stop_sign:"🛑",construction:"🚧",anchor:"⚓",ring_buoy:"🛟",boat:"⛵",sailboat:"⛵",canoe:"🛶",speedboat:"🚤",passenger_ship:"🛳️",ferry:"⛴️",motor_boat:"🛥️",ship:"🚢",airplane:"✈️",small_airplane:"🛩️",flight_departure:"🛫",flight_arrival:"🛬",parachute:"🪂",seat:"💺",helicopter:"🚁",suspension_railway:"🚟",mountain_cableway:"🚠",aerial_tramway:"🚡",artificial_satellite:"🛰️",rocket:"🚀",flying_saucer:"🛸",bellhop_bell:"🛎️",luggage:"🧳",hourglass:"⌛",hourglass_flowing_sand:"⏳",watch:"⌚",alarm_clock:"⏰",stopwatch:"⏱️",timer_clock:"⏲️",mantelpiece_clock:"🕰️",clock12:"🕛",clock1230:"🕧",clock1:"🕐",clock130:"🕜",clock2:"🕑",clock230:"🕝",clock3:"🕒",clock330:"🕞",clock4:"🕓",clock430:"🕟",clock5:"🕔",clock530:"🕠",clock6:"🕕",clock630:"🕡",clock7:"🕖",clock730:"🕢",clock8:"🕗",clock830:"🕣",clock9:"🕘",clock930:"🕤",clock10:"🕙",clock1030:"🕥",clock11:"🕚",clock1130:"🕦",new_moon:"🌑",waxing_crescent_moon:"🌒",first_quarter_moon:"🌓",moon:"🌔",waxing_gibbous_moon:"🌔",full_moon:"🌕",waning_gibbous_moon:"🌖",last_quarter_moon:"🌗",waning_crescent_moon:"🌘",crescent_moon:"🌙",new_moon_with_face:"🌚",first_quarter_moon_with_face:"🌛",last_quarter_moon_with_face:"🌜",thermometer:"🌡️",sunny:"☀️",full_moon_with_face:"🌝",sun_with_face:"🌞",ringed_planet:"🪐",star:"⭐",star2:"🌟",stars:"🌠",milky_way:"🌌",cloud:"☁️",partly_sunny:"⛅",cloud_with_lightning_and_rain:"⛈️",sun_behind_small_cloud:"🌤️",sun_behind_large_cloud:"🌥️",sun_behind_rain_cloud:"🌦️",cloud_with_rain:"🌧️",cloud_with_snow:"🌨️",cloud_with_lightning:"🌩️",tornado:"🌪️",fog:"🌫️",wind_face:"🌬️",cyclone:"🌀",rainbow:"🌈",closed_umbrella:"🌂",open_umbrella:"☂️",umbrella:"☔",parasol_on_ground:"⛱️",zap:"⚡",snowflake:"❄️",snowman_with_snow:"☃️",snowman:"⛄",comet:"☄️",fire:"🔥",droplet:"💧",ocean:"🌊",jack_o_lantern:"🎃",christmas_tree:"🎄",fireworks:"🎆",sparkler:"🎇",firecracker:"🧨",sparkles:"✨",balloon:"🎈",tada:"🎉",confetti_ball:"🎊",tanabata_tree:"🎋",bamboo:"🎍",dolls:"🎎",flags:"🎏",wind_chime:"🎐",rice_scene:"🎑",red_envelope:"🧧",ribbon:"🎀",gift:"🎁",reminder_ribbon:"🎗️",tickets:"🎟️",ticket:"🎫",medal_military:"🎖️",trophy:"🏆",medal_sports:"🏅","1st_place_medal":"🥇","2nd_place_medal":"🥈","3rd_place_medal":"🥉",soccer:"⚽",baseball:"⚾",softball:"🥎",basketball:"🏀",volleyball:"🏐",football:"🏈",rugby_football:"🏉",tennis:"🎾",flying_disc:"🥏",bowling:"🎳",cricket_game:"🏏",field_hockey:"🏑",ice_hockey:"🏒",lacrosse:"🥍",ping_pong:"🏓",badminton:"🏸",boxing_glove:"🥊",martial_arts_uniform:"🥋",goal_net:"🥅",golf:"⛳",ice_skate:"⛸️",fishing_pole_and_fish:"🎣",diving_mask:"🤿",running_shirt_with_sash:"🎽",ski:"🎿",sled:"🛷",curling_stone:"🥌",dart:"🎯",yo_yo:"🪀",kite:"🪁",gun:"🔫","8ball":"🎱",crystal_ball:"🔮",magic_wand:"🪄",video_game:"🎮",joystick:"🕹️",slot_machine:"🎰",game_die:"🎲",jigsaw:"🧩",teddy_bear:"🧸",pinata:"🪅",mirror_ball:"🪩",nesting_dolls:"🪆",spades:"♠️",hearts:"♥️",diamonds:"♦️",clubs:"♣️",chess_pawn:"♟️",black_joker:"🃏",mahjong:"🀄",flower_playing_cards:"🎴",performing_arts:"🎭",framed_picture:"🖼️",art:"🎨",thread:"🧵",sewing_needle:"🪡",yarn:"🧶",knot:"🪢",eyeglasses:"👓",dark_sunglasses:"🕶️",goggles:"🥽",lab_coat:"🥼",safety_vest:"🦺",necktie:"👔",shirt:"👕",tshirt:"👕",jeans:"👖",scarf:"🧣",gloves:"🧤",coat:"🧥",socks:"🧦",dress:"👗",kimono:"👘",sari:"🥻",one_piece_swimsuit:"🩱",swim_brief:"🩲",shorts:"🩳",bikini:"👙",womans_clothes:"👚",folding_hand_fan:"🪭",purse:"👛",handbag:"👜",pouch:"👝",shopping:"🛍️",school_satchel:"🎒",thong_sandal:"🩴",mans_shoe:"👞",shoe:"👞",athletic_shoe:"👟",hiking_boot:"🥾",flat_shoe:"🥿",high_heel:"👠",sandal:"👡",ballet_shoes:"🩰",boot:"👢",hair_pick:"🪮",crown:"👑",womans_hat:"👒",tophat:"🎩",mortar_board:"🎓",billed_cap:"🧢",military_helmet:"🪖",rescue_worker_helmet:"⛑️",prayer_beads:"📿",lipstick:"💄",ring:"💍",gem:"💎",mute:"🔇",speaker:"🔈",sound:"🔉",loud_sound:"🔊",loudspeaker:"📢",mega:"📣",postal_horn:"📯",bell:"🔔",no_bell:"🔕",musical_score:"🎼",musical_note:"🎵",notes:"🎶",studio_microphone:"🎙️",level_slider:"🎚️",control_knobs:"🎛️",microphone:"🎤",headphones:"🎧",radio:"📻",saxophone:"🎷",accordion:"🪗",guitar:"🎸",musical_keyboard:"🎹",trumpet:"🎺",violin:"🎻",banjo:"🪕",drum:"🥁",long_drum:"🪘",maracas:"🪇",flute:"🪈",iphone:"📱",calling:"📲",phone:"☎️",telephone:"☎️",telephone_receiver:"📞",pager:"📟",fax:"📠",battery:"🔋",low_battery:"🪫",electric_plug:"🔌",computer:"💻",desktop_computer:"🖥️",printer:"🖨️",keyboard:"⌨️",computer_mouse:"🖱️",trackball:"🖲️",minidisc:"💽",floppy_disk:"💾",cd:"💿",dvd:"📀",abacus:"🧮",movie_camera:"🎥",film_strip:"🎞️",film_projector:"📽️",clapper:"🎬",tv:"📺",camera:"📷",camera_flash:"📸",video_camera:"📹",vhs:"📼",mag:"🔍",mag_right:"🔎",candle:"🕯️",bulb:"💡",flashlight:"🔦",izakaya_lantern:"🏮",lantern:"🏮",diya_lamp:"🪔",notebook_with_decorative_cover:"📔",closed_book:"📕",book:"📖",open_book:"📖",green_book:"📗",blue_book:"📘",orange_book:"📙",books:"📚",notebook:"📓",ledger:"📒",page_with_curl:"📃",scroll:"📜",page_facing_up:"📄",newspaper:"📰",newspaper_roll:"🗞️",bookmark_tabs:"📑",bookmark:"🔖",label:"🏷️",moneybag:"💰",coin:"🪙",yen:"💴",dollar:"💵",euro:"💶",pound:"💷",money_with_wings:"💸",credit_card:"💳",receipt:"🧾",chart:"💹",envelope:"✉️",email:"📧","e-mail":"📧",incoming_envelope:"📨",envelope_with_arrow:"📩",outbox_tray:"📤",inbox_tray:"📥",package:"📦",mailbox:"📫",mailbox_closed:"📪",mailbox_with_mail:"📬",mailbox_with_no_mail:"📭",postbox:"📮",ballot_box:"🗳️",pencil2:"✏️",black_nib:"✒️",fountain_pen:"🖋️",pen:"🖊️",paintbrush:"🖌️",crayon:"🖍️",memo:"📝",pencil:"📝",briefcase:"💼",file_folder:"📁",open_file_folder:"📂",card_index_dividers:"🗂️",date:"📅",calendar:"📆",spiral_notepad:"🗒️",spiral_calendar:"🗓️",card_index:"📇",chart_with_upwards_trend:"📈",chart_with_downwards_trend:"📉",bar_chart:"📊",clipboard:"📋",pushpin:"📌",round_pushpin:"📍",paperclip:"📎",paperclips:"🖇️",straight_ruler:"📏",triangular_ruler:"📐",scissors:"✂️",card_file_box:"🗃️",file_cabinet:"🗄️",wastebasket:"🗑️",lock:"🔒",unlock:"🔓",lock_with_ink_pen:"🔏",closed_lock_with_key:"🔐",key:"🔑",old_key:"🗝️",hammer:"🔨",axe:"🪓",pick:"⛏️",hammer_and_pick:"⚒️",hammer_and_wrench:"🛠️",dagger:"🗡️",crossed_swords:"⚔️",bomb:"💣",boomerang:"🪃",bow_and_arrow:"🏹",shield:"🛡️",carpentry_saw:"🪚",wrench:"🔧",screwdriver:"🪛",nut_and_bolt:"🔩",gear:"⚙️",clamp:"🗜️",balance_scale:"⚖️",probing_cane:"🦯",link:"🔗",chains:"⛓️",hook:"🪝",toolbox:"🧰",magnet:"🧲",ladder:"🪜",alembic:"⚗️",test_tube:"🧪",petri_dish:"🧫",dna:"🧬",microscope:"🔬",telescope:"🔭",satellite:"📡",syringe:"💉",drop_of_blood:"🩸",pill:"💊",adhesive_bandage:"🩹",crutch:"🩼",stethoscope:"🩺",x_ray:"🩻",door:"🚪",elevator:"🛗",mirror:"🪞",window:"🪟",bed:"🛏️",couch_and_lamp:"🛋️",chair:"🪑",toilet:"🚽",plunger:"🪠",shower:"🚿",bathtub:"🛁",mouse_trap:"🪤",razor:"🪒",lotion_bottle:"🧴",safety_pin:"🧷",broom:"🧹",basket:"🧺",roll_of_paper:"🧻",bucket:"🪣",soap:"🧼",bubbles:"🫧",toothbrush:"🪥",sponge:"🧽",fire_extinguisher:"🧯",shopping_cart:"🛒",smoking:"🚬",coffin:"⚰️",headstone:"🪦",funeral_urn:"⚱️",nazar_amulet:"🧿",hamsa:"🪬",moyai:"🗿",placard:"🪧",identification_card:"🪪",atm:"🏧",put_litter_in_its_place:"🚮",potable_water:"🚰",wheelchair:"♿",mens:"🚹",womens:"🚺",restroom:"🚻",baby_symbol:"🚼",wc:"🚾",passport_control:"🛂",customs:"🛃",baggage_claim:"🛄",left_luggage:"🛅",warning:"⚠️",children_crossing:"🚸",no_entry:"⛔",no_entry_sign:"🚫",no_bicycles:"🚳",no_smoking:"🚭",do_not_litter:"🚯","non-potable_water":"🚱",no_pedestrians:"🚷",no_mobile_phones:"📵",underage:"🔞",radioactive:"☢️",biohazard:"☣️",arrow_up:"⬆️",arrow_upper_right:"↗️",arrow_right:"➡️",arrow_lower_right:"↘️",arrow_down:"⬇️",arrow_lower_left:"↙️",arrow_left:"⬅️",arrow_upper_left:"↖️",arrow_up_down:"↕️",left_right_arrow:"↔️",leftwards_arrow_with_hook:"↩️",arrow_right_hook:"↪️",arrow_heading_up:"⤴️",arrow_heading_down:"⤵️",arrows_clockwise:"🔃",arrows_counterclockwise:"🔄",back:"🔙",end:"🔚",on:"🔛",soon:"🔜",top:"🔝",place_of_worship:"🛐",atom_symbol:"⚛️",om:"🕉️",star_of_david:"✡️",wheel_of_dharma:"☸️",yin_yang:"☯️",latin_cross:"✝️",orthodox_cross:"☦️",star_and_crescent:"☪️",peace_symbol:"☮️",menorah:"🕎",six_pointed_star:"🔯",khanda:"🪯",aries:"♈",taurus:"♉",gemini:"♊",cancer:"♋",leo:"♌",virgo:"♍",libra:"♎",scorpius:"♏",sagittarius:"♐",capricorn:"♑",aquarius:"♒",pisces:"♓",ophiuchus:"⛎",twisted_rightwards_arrows:"🔀",repeat:"🔁",repeat_one:"🔂",arrow_forward:"▶️",fast_forward:"⏩",next_track_button:"⏭️",play_or_pause_button:"⏯️",arrow_backward:"◀️",rewind:"⏪",previous_track_button:"⏮️",arrow_up_small:"🔼",arrow_double_up:"⏫",arrow_down_small:"🔽",arrow_double_down:"⏬",pause_button:"⏸️",stop_button:"⏹️",record_button:"⏺️",eject_button:"⏏️",cinema:"🎦",low_brightness:"🔅",high_brightness:"🔆",signal_strength:"📶",wireless:"🛜",vibration_mode:"📳",mobile_phone_off:"📴",female_sign:"♀️",male_sign:"♂️",transgender_symbol:"⚧️",heavy_multiplication_x:"✖️",heavy_plus_sign:"➕",heavy_minus_sign:"➖",heavy_division_sign:"➗",heavy_equals_sign:"🟰",infinity:"♾️",bangbang:"‼️",interrobang:"⁉️",question:"❓",grey_question:"❔",grey_exclamation:"❕",exclamation:"❗",heavy_exclamation_mark:"❗",wavy_dash:"〰️",currency_exchange:"💱",heavy_dollar_sign:"💲",medical_symbol:"⚕️",recycle:"♻️",fleur_de_lis:"⚜️",trident:"🔱",name_badge:"📛",beginner:"🔰",o:"⭕",white_check_mark:"✅",ballot_box_with_check:"☑️",heavy_check_mark:"✔️",x:"❌",negative_squared_cross_mark:"❎",curly_loop:"➰",loop:"➿",part_alternation_mark:"〽️",eight_spoked_asterisk:"✳️",eight_pointed_black_star:"✴️",sparkle:"❇️",copyright:"©️",registered:"®️",tm:"™️",hash:"#️⃣",asterisk:"*️⃣",zero:"0️⃣",one:"1️⃣",two:"2️⃣",three:"3️⃣",four:"4️⃣",five:"5️⃣",six:"6️⃣",seven:"7️⃣",eight:"8️⃣",nine:"9️⃣",keycap_ten:"🔟",capital_abcd:"🔠",abcd:"🔡",symbols:"🔣",abc:"🔤",a:"🅰️",ab:"🆎",b:"🅱️",cl:"🆑",cool:"🆒",free:"🆓",information_source:"ℹ️",id:"🆔",m:"Ⓜ️",new:"🆕",ng:"🆖",o2:"🅾️",ok:"🆗",parking:"🅿️",sos:"🆘",up:"🆙",vs:"🆚",koko:"🈁",sa:"🈂️",ideograph_advantage:"🉐",accept:"🉑",congratulations:"㊗️",secret:"㊙️",u6e80:"🈵",red_circle:"🔴",orange_circle:"🟠",yellow_circle:"🟡",green_circle:"🟢",large_blue_circle:"🔵",purple_circle:"🟣",brown_circle:"🟤",black_circle:"⚫",white_circle:"⚪",red_square:"🟥",orange_square:"🟧",yellow_square:"🟨",green_square:"🟩",blue_square:"🟦",purple_square:"🟪",brown_square:"🟫",black_large_square:"⬛",white_large_square:"⬜",black_medium_square:"◼️",white_medium_square:"◻️",black_medium_small_square:"◾",white_medium_small_square:"◽",black_small_square:"▪️",white_small_square:"▫️",large_orange_diamond:"🔶",large_blue_diamond:"🔷",small_orange_diamond:"🔸",small_blue_diamond:"🔹",small_red_triangle:"🔺",small_red_triangle_down:"🔻",diamond_shape_with_a_dot_inside:"💠",radio_button:"🔘",white_square_button:"🔳",black_square_button:"🔲",checkered_flag:"🏁",triangular_flag_on_post:"🚩",crossed_flags:"🎌",black_flag:"🏴",white_flag:"🏳️",rainbow_flag:"🏳️🌈",transgender_flag:"🏳️⚧️",pirate_flag:"🏴☠️",ascension_island:"🇦🇨",andorra:"🇦🇩",united_arab_emirates:"🇦🇪",afghanistan:"🇦🇫",antigua_barbuda:"🇦🇬",anguilla:"🇦🇮",albania:"🇦🇱",armenia:"🇦🇲",angola:"🇦🇴",antarctica:"🇦🇶",argentina:"🇦🇷",american_samoa:"🇦🇸",austria:"🇦🇹",australia:"🇦🇺",aruba:"🇦🇼",aland_islands:"🇦🇽",azerbaijan:"🇦🇿",bosnia_herzegovina:"🇧🇦",barbados:"🇧🇧",bangladesh:"🇧🇩",belgium:"🇧🇪",burkina_faso:"🇧🇫",bulgaria:"🇧🇬",bahrain:"🇧🇭",burundi:"🇧🇮",benin:"🇧🇯",st_barthelemy:"🇧🇱",bermuda:"🇧🇲",brunei:"🇧🇳",bolivia:"🇧🇴",caribbean_netherlands:"🇧🇶",brazil:"🇧🇷",bahamas:"🇧🇸",bhutan:"🇧🇹",bouvet_island:"🇧🇻",botswana:"🇧🇼",belarus:"🇧🇾",belize:"🇧🇿",canada:"🇨🇦",cocos_islands:"🇨🇨",congo_kinshasa:"🇨🇩",central_african_republic:"🇨🇫",congo_brazzaville:"🇨🇬",switzerland:"🇨🇭",cote_divoire:"🇨🇮",cook_islands:"🇨🇰",chile:"🇨🇱",cameroon:"🇨🇲",cn:"🇨🇳",colombia:"🇨🇴",clipperton_island:"🇨🇵",costa_rica:"🇨🇷",cuba:"🇨🇺",cape_verde:"🇨🇻",curacao:"🇨🇼",christmas_island:"🇨🇽",cyprus:"🇨🇾",czech_republic:"🇨🇿",de:"🇩🇪",diego_garcia:"🇩🇬",djibouti:"🇩🇯",denmark:"🇩🇰",dominica:"🇩🇲",dominican_republic:"🇩🇴",algeria:"🇩🇿",ceuta_melilla:"🇪🇦",ecuador:"🇪🇨",estonia:"🇪🇪",egypt:"🇪🇬",western_sahara:"🇪🇭",eritrea:"🇪🇷",es:"🇪🇸",ethiopia:"🇪🇹",eu:"🇪🇺",european_union:"🇪🇺",finland:"🇫🇮",fiji:"🇫🇯",falkland_islands:"🇫🇰",micronesia:"🇫🇲",faroe_islands:"🇫🇴",fr:"🇫🇷",gabon:"🇬🇦",gb:"🇬🇧",uk:"🇬🇧",grenada:"🇬🇩",georgia:"🇬🇪",french_guiana:"🇬🇫",guernsey:"🇬🇬",ghana:"🇬🇭",gibraltar:"🇬🇮",greenland:"🇬🇱",gambia:"🇬🇲",guinea:"🇬🇳",guadeloupe:"🇬🇵",equatorial_guinea:"🇬🇶",greece:"🇬🇷",south_georgia_south_sandwich_islands:"🇬🇸",guatemala:"🇬🇹",guam:"🇬🇺",guinea_bissau:"🇬🇼",guyana:"🇬🇾",hong_kong:"🇭🇰",heard_mcdonald_islands:"🇭🇲",honduras:"🇭🇳",croatia:"🇭🇷",haiti:"🇭🇹",hungary:"🇭🇺",canary_islands:"🇮🇨",indonesia:"🇮🇩",ireland:"🇮🇪",israel:"🇮🇱",isle_of_man:"🇮🇲",india:"🇮🇳",british_indian_ocean_territory:"🇮🇴",iraq:"🇮🇶",iran:"🇮🇷",iceland:"🇮🇸",it:"🇮🇹",jersey:"🇯🇪",jamaica:"🇯🇲",jordan:"🇯🇴",jp:"🇯🇵",kenya:"🇰🇪",kyrgyzstan:"🇰🇬",cambodia:"🇰🇭",kiribati:"🇰🇮",comoros:"🇰🇲",st_kitts_nevis:"🇰🇳",north_korea:"🇰🇵",kr:"🇰🇷",kuwait:"🇰🇼",cayman_islands:"🇰🇾",kazakhstan:"🇰🇿",laos:"🇱🇦",lebanon:"🇱🇧",st_lucia:"🇱🇨",liechtenstein:"🇱🇮",sri_lanka:"🇱🇰",liberia:"🇱🇷",lesotho:"🇱🇸",lithuania:"🇱🇹",luxembourg:"🇱🇺",latvia:"🇱🇻",libya:"🇱🇾",morocco:"🇲🇦",monaco:"🇲🇨",moldova:"🇲🇩",montenegro:"🇲🇪",st_martin:"🇲🇫",madagascar:"🇲🇬",marshall_islands:"🇲🇭",macedonia:"🇲🇰",mali:"🇲🇱",myanmar:"🇲🇲",mongolia:"🇲🇳",macau:"🇲🇴",northern_mariana_islands:"🇲🇵",martinique:"🇲🇶",mauritania:"🇲🇷",montserrat:"🇲🇸",malta:"🇲🇹",mauritius:"🇲🇺",maldives:"🇲🇻",malawi:"🇲🇼",mexico:"🇲🇽",malaysia:"🇲🇾",mozambique:"🇲🇿",namibia:"🇳🇦",new_caledonia:"🇳🇨",niger:"🇳🇪",norfolk_island:"🇳🇫",nigeria:"🇳🇬",nicaragua:"🇳🇮",netherlands:"🇳🇱",norway:"🇳🇴",nepal:"🇳🇵",nauru:"🇳🇷",niue:"🇳🇺",new_zealand:"🇳🇿",oman:"🇴🇲",panama:"🇵🇦",peru:"🇵🇪",french_polynesia:"🇵🇫",papua_new_guinea:"🇵🇬",philippines:"🇵🇭",pakistan:"🇵🇰",poland:"🇵🇱",st_pierre_miquelon:"🇵🇲",pitcairn_islands:"🇵🇳",puerto_rico:"🇵🇷",palestinian_territories:"🇵🇸",portugal:"🇵🇹",palau:"🇵🇼",paraguay:"🇵🇾",qatar:"🇶🇦",reunion:"🇷🇪",romania:"🇷🇴",serbia:"🇷🇸",ru:"🇷🇺",rwanda:"🇷🇼",saudi_arabia:"🇸🇦",solomon_islands:"🇸🇧",seychelles:"🇸🇨",sudan:"🇸🇩",sweden:"🇸🇪",singapore:"🇸🇬",st_helena:"🇸🇭",slovenia:"🇸🇮",svalbard_jan_mayen:"🇸🇯",slovakia:"🇸🇰",sierra_leone:"🇸🇱",san_marino:"🇸🇲",senegal:"🇸🇳",somalia:"🇸🇴",suriname:"🇸🇷",south_sudan:"🇸🇸",sao_tome_principe:"🇸🇹",el_salvador:"🇸🇻",sint_maarten:"🇸🇽",syria:"🇸🇾",swaziland:"🇸🇿",tristan_da_cunha:"🇹🇦",turks_caicos_islands:"🇹🇨",chad:"🇹🇩",french_southern_territories:"🇹🇫",togo:"🇹🇬",thailand:"🇹🇭",tajikistan:"🇹🇯",tokelau:"🇹🇰",timor_leste:"🇹🇱",turkmenistan:"🇹🇲",tunisia:"🇹🇳",tonga:"🇹🇴",tr:"🇹🇷",trinidad_tobago:"🇹🇹",tuvalu:"🇹🇻",taiwan:"🇹🇼",tanzania:"🇹🇿",ukraine:"🇺🇦",uganda:"🇺🇬",us_outlying_islands:"🇺🇲",united_nations:"🇺🇳",us:"🇺🇸",uruguay:"🇺🇾",uzbekistan:"🇺🇿",vatican_city:"🇻🇦",st_vincent_grenadines:"🇻🇨",venezuela:"🇻🇪",british_virgin_islands:"🇻🇬",us_virgin_islands:"🇻🇮",vietnam:"🇻🇳",vanuatu:"🇻🇺",wallis_futuna:"🇼🇫",samoa:"🇼🇸",kosovo:"🇽🇰",yemen:"🇾🇪",mayotte:"🇾🇹",south_africa:"🇿🇦",zambia:"🇿🇲",zimbabwe:"🇿🇼",england:"🏴",scotland:"🏴",wales:"🏴"},Yo={angry:[">:(",">:-("],blush:[':")',':-")'],broken_heart:["</3","<\\3"],confused:[":/",":-/"],cry:[":'(",":'-(",":,(",":,-("],frowning:[":(",":-("],heart:["<3"],imp:["]:(","]:-("],innocent:["o:)","O:)","o:-)","O:-)","0:)","0:-)"],joy:[":')",":'-)",":,)",":,-)",":'D",":'-D",":,D",":,-D"],kissing:[":*",":-*"],laughing:["x-)","X-)"],neutral_face:[":|",":-|"],open_mouth:[":o",":-o",":O",":-O"],rage:[":@",":-@"],smile:[":D",":-D"],smiley:[":)",":-)"],smiling_imp:["]:)","]:-)"],sob:[":,'(",":,'-(",";(",";-("],stuck_out_tongue:[":P",":-P"],sunglasses:["8-)","B-)"],sweat:[",:(",",:-("],sweat_smile:[",:)",",:-)"],unamused:[":s",":-S",":z",":-Z",":$",":-$"],wink:[";)",";-)"]};function Jo(e,t){return e[t].content}var Xo=function(e){if(!1===(null===(t=window)||void 0===t||null===(t=t.wpGfmConfig)||void 0===t||null===(t=t.features)||void 0===t?void 0:t.iframeSafeMode))return window.document;var t,n=e&&"current"in e?e.current:e;return(null==n?void 0:n.ownerDocument)||window.document},Qo=function(e){return(null==e?void 0:e.defaultView)||window},ea=n(859),ta=n.n(ea),na=n(341),ra=n.n(na),oa=n(286),aa=n.n(oa),ia=n(304),ua=n.n(ia),sa=function(e){var t=new Set;return String(e||"").split(",").forEach(function(e){var n=e.trim();if(n){var r=n.match(/^(\d+)\s*-\s*(\d+)$/);if(r){var o=parseInt(r[1],10),a=parseInt(r[2],10);if(o>a){var i=[a,o];o=i[0],a=i[1]}for(var u=o;u<=a;u++)t.add(u)}else/^\d+$/.test(n)&&t.add(parseInt(n,10))}}),Array.from(t).sort(function(e,t){return e-t})},la=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e||!e.includes('class="shiki"'))return e;var n=!!t.showLineNumbers,r=!!t.advancedSyntax,o="number"==typeof t.collapseLines?t.collapseLines:30,a=t.labels||{};if(!n&&!r)return e;var i=document.createElement("div");return i.innerHTML=e,i.querySelectorAll("pre.shiki").forEach(function(e){n&&e.classList.add("gfmr-line-numbers");var t=e.getAttribute("data-gfmr-hl"),i=e.getAttribute("data-gfmr-filename"),u=e.hasAttribute("data-gfmr-collapse");if(e.removeAttribute("data-gfmr-hl"),e.removeAttribute("data-gfmr-filename"),e.removeAttribute("data-gfmr-collapse"),r){var s=e.querySelectorAll("code .line");if(t){var l=new Set(sa(t));s.forEach(function(e,t){l.has(t+1)&&e.classList.add("gfmr-hl")})}var c=s.length,f=u||o>0&&c>o,p=!!i;if(p||f){var d=document.createElement("div");if(d.className="gfmr-code-enhanced",f&&(d.classList.add("gfmr-code-collapsible"),d.setAttribute("data-gfmr-collapsed","true")),e.replaceWith(d),p){var h=document.createElement("div");h.className="gfmr-code-filename",h.textContent=i,d.appendChild(h)}if(d.appendChild(e),f){var m=document.createElement("button");m.type="button",m.className="gfmr-code-collapse-toggle",m.setAttribute("aria-expanded","false"),m.setAttribute("data-gfmr-lines",String(c)),m.textContent=a.show||"Show all lines",d.appendChild(m)}}}}),i.innerHTML};function ca(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",o=n.toStringTag||"@@toStringTag";function a(n,r,o,a){var s=r&&r.prototype instanceof u?r:u,l=Object.create(s.prototype);return fa(l,"_invoke",function(n,r,o){var a,u,s,l=0,c=o||[],f=!1,p={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,n){return a=t,u=0,s=e,p.n=n,i}};function d(n,r){for(u=n,s=r,t=0;!f&&l&&!o&&t<c.length;t++){var o,a=c[t],d=p.p,h=a[2];n>3?(o=h===r)&&(s=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=e):a[0]<=d&&((o=n<2&&d<a[1])?(u=0,p.v=r,p.n=a[1]):d<h&&(o=n<3||a[0]>r||r>h)&&(a[4]=n,a[5]=r,p.n=h,u=0))}if(o||n>1)return i;throw f=!0,r}return function(o,c,h){if(l>1)throw TypeError("Generator is already running");for(f&&1===c&&d(c,h),u=c,s=h;(t=u<2?e:s)||!f;){a||(u?u<3?(u>1&&(p.n=-1),d(u,s)):p.n=s:p.v=s);try{if(l=2,a){if(u||(o="next"),t=a[o]){if(!(t=t.call(a,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,u<2&&(u=0)}else 1===u&&(t=a.return)&&t.call(a),u<2&&(s=TypeError("The iterator does not provide a '"+o+"' method"),u=1);a=e}else if((t=(f=p.n<0)?s:n.call(r,p))!==i)break}catch(t){a=e,u=1,s=t}finally{l=1}}return{value:t,done:f}}}(n,o,a),!0),l}var i={};function u(){}function s(){}function l(){}t=Object.getPrototypeOf;var c=[][r]?t(t([][r]())):(fa(t={},r,function(){return this}),t),f=l.prototype=u.prototype=Object.create(c);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,fa(e,o,"GeneratorFunction")),e.prototype=Object.create(f),e}return s.prototype=l,fa(f,"constructor",l),fa(l,"constructor",s),s.displayName="GeneratorFunction",fa(l,o,"GeneratorFunction"),fa(f),fa(f,o,"Generator"),fa(f,r,function(){return this}),fa(f,"toString",function(){return"[object Generator]"}),(ca=function(){return{w:a,m:p}})()}function fa(e,t,n,r){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}fa=function(e,t,n,r){function a(t,n){fa(e,t,function(e){return this._invoke(t,n,e)})}t?o?o(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(a("next",0),a("throw",1),a("return",2))},fa(e,t,n,r)}function pa(e){return function(e){if(Array.isArray(e))return da(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return da(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?da(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function da(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function ha(e){return ha="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ha(e)}function ma(e,t,n,r,o,a,i){try{var u=e[a](i),s=u.value}catch(e){return void n(e)}u.done?t(s):Promise.resolve(s).then(r,o)}function ga(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var a=e.apply(t,n);function i(e){ma(a,r,o,i,u,"next",e)}function u(e){ma(a,r,o,i,u,"throw",e)}i(void 0)})}}var _a=function(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")},ba=new Io({html:!0,breaks:!0,linkify:!0,typographer:!0,highlight:function(e,t){var n=t?' class="language-'.concat(t,'"'):"";return'<pre class="gfmr-code-fallback"><code'.concat(n,">").concat(_a(e),"</code></pre>")}}).use(No(),{enabled:!0}).use(function(e){const t=e.helpers.parseLinkLabel,n=e.utils.isSpace;e.renderer.rules.footnote_ref=zo,e.renderer.rules.footnote_block_open=$o,e.renderer.rules.footnote_block_close=Go,e.renderer.rules.footnote_open=Uo,e.renderer.rules.footnote_close=Ho,e.renderer.rules.footnote_anchor=Wo,e.renderer.rules.footnote_caption=qo,e.renderer.rules.footnote_anchor_name=Po,e.block.ruler.before("reference","footnote_def",function(e,t,r,o){const a=e.bMarks[t]+e.tShift[t],i=e.eMarks[t];if(a+4>i)return!1;if(91!==e.src.charCodeAt(a))return!1;if(94!==e.src.charCodeAt(a+1))return!1;let u;for(u=a+2;u<i;u++){if(32===e.src.charCodeAt(u))return!1;if(93===e.src.charCodeAt(u))break}if(u===a+2)return!1;if(u+1>=i||58!==e.src.charCodeAt(++u))return!1;if(o)return!0;u++,e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.refs||(e.env.footnotes.refs={});const s=e.src.slice(a+2,u-2);e.env.footnotes.refs[`:${s}`]=-1;const l=new e.Token("footnote_reference_open","",1);l.meta={label:s},l.level=e.level++,e.tokens.push(l);const c=e.bMarks[t],f=e.tShift[t],p=e.sCount[t],d=e.parentType,h=u,m=e.sCount[t]+u-(e.bMarks[t]+e.tShift[t]);let g=m;for(;u<i;){const t=e.src.charCodeAt(u);if(!n(t))break;9===t?g+=4-g%4:g++,u++}e.tShift[t]=u-h,e.sCount[t]=g-m,e.bMarks[t]=h,e.blkIndent+=4,e.parentType="footnote",e.sCount[t]<e.blkIndent&&(e.sCount[t]+=e.blkIndent),e.md.block.tokenize(e,t,r,!0),e.parentType=d,e.blkIndent-=4,e.tShift[t]=f,e.sCount[t]=p,e.bMarks[t]=c;const _=new e.Token("footnote_reference_close","",-1);return _.level=--e.level,e.tokens.push(_),!0},{alt:["paragraph","reference"]}),e.inline.ruler.after("image","footnote_inline",function(e,n){const r=e.posMax,o=e.pos;if(o+2>=r)return!1;if(94!==e.src.charCodeAt(o))return!1;if(91!==e.src.charCodeAt(o+1))return!1;const a=o+2,i=t(e,o+1);if(i<0)return!1;if(!n){e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.list||(e.env.footnotes.list=[]);const t=e.env.footnotes.list.length,n=[];e.md.inline.parse(e.src.slice(a,i),e.md,e.env,n),e.push("footnote_ref","",0).meta={id:t},e.env.footnotes.list[t]={content:e.src.slice(a,i),tokens:n}}return e.pos=i+1,e.posMax=r,!0}),e.inline.ruler.after("footnote_inline","footnote_ref",function(e,t){const n=e.posMax,r=e.pos;if(r+3>n)return!1;if(!e.env.footnotes||!e.env.footnotes.refs)return!1;if(91!==e.src.charCodeAt(r))return!1;if(94!==e.src.charCodeAt(r+1))return!1;let o;for(o=r+2;o<n;o++){if(32===e.src.charCodeAt(o))return!1;if(10===e.src.charCodeAt(o))return!1;if(93===e.src.charCodeAt(o))break}if(o===r+2)return!1;if(o>=n)return!1;o++;const a=e.src.slice(r+2,o-1);if(void 0===e.env.footnotes.refs[`:${a}`])return!1;if(!t){let t;e.env.footnotes.list||(e.env.footnotes.list=[]),e.env.footnotes.refs[`:${a}`]<0?(t=e.env.footnotes.list.length,e.env.footnotes.list[t]={label:a,count:0},e.env.footnotes.refs[`:${a}`]=t):t=e.env.footnotes.refs[`:${a}`];const n=e.env.footnotes.list[t].count;e.env.footnotes.list[t].count++,e.push("footnote_ref","",0).meta={id:t,subId:n,label:a}}return e.pos=o,e.posMax=n,!0}),e.core.ruler.after("inline","footnote_tail",function(e){let t,n,r,o=!1;const a={};if(!e.env.footnotes)return;if(e.tokens=e.tokens.filter(function(e){return"footnote_reference_open"===e.type?(o=!0,n=[],r=e.meta.label,!1):"footnote_reference_close"===e.type?(o=!1,a[":"+r]=n,!1):(o&&n.push(e),!o)}),!e.env.footnotes.list)return;const i=e.env.footnotes.list;e.tokens.push(new e.Token("footnote_block_open","",1));for(let n=0,r=i.length;n<r;n++){const r=new e.Token("footnote_open","",1);if(r.meta={id:n,label:i[n].label},e.tokens.push(r),i[n].tokens){t=[];const r=new e.Token("paragraph_open","p",1);r.block=!0,t.push(r);const o=new e.Token("inline","",0);o.children=i[n].tokens,o.content=i[n].content,t.push(o);const a=new e.Token("paragraph_close","p",-1);a.block=!0,t.push(a)}else i[n].label&&(t=a[`:${i[n].label}`]);let o;t&&(e.tokens=e.tokens.concat(t)),o="paragraph_close"===e.tokens[e.tokens.length-1].type?e.tokens.pop():null;const u=i[n].count>0?i[n].count:1;for(let t=0;t<u;t++){const r=new e.Token("footnote_anchor","",0);r.meta={id:n,subId:t,label:i[n].label},e.tokens.push(r)}o&&e.tokens.push(o),e.tokens.push(new e.Token("footnote_close","",-1))}e.tokens.push(new e.Token("footnote_block_close","",-1))})}).use(function(e){function t(e,t){const n=[],r=t.length;for(let o=0;o<r;o++){const r=t[o];if(61!==r.marker)continue;if(-1===r.end)continue;const a=t[r.end],i=e.tokens[r.token];i.type="mark_open",i.tag="mark",i.nesting=1,i.markup="==",i.content="";const u=e.tokens[a.token];u.type="mark_close",u.tag="mark",u.nesting=-1,u.markup="==",u.content="","text"===e.tokens[a.token-1].type&&"="===e.tokens[a.token-1].content&&n.push(a.token-1)}for(;n.length;){const t=n.pop();let r=t+1;for(;r<e.tokens.length&&"mark_close"===e.tokens[r].type;)r++;if(r--,t!==r){const n=e.tokens[r];e.tokens[r]=e.tokens[t],e.tokens[t]=n}}}e.inline.ruler.before("emphasis","mark",function(e,t){const n=e.pos,r=e.src.charCodeAt(n);if(t)return!1;if(61!==r)return!1;const o=e.scanDelims(e.pos,!0);let a=o.length;const i=String.fromCharCode(r);if(a<2)return!1;a%2&&(e.push("text","",0).content=i,a--);for(let t=0;t<a;t+=2)e.push("text","",0).content=i+i,(o.can_open||o.can_close)&&e.delimiters.push({marker:r,length:0,jump:t/2,token:e.tokens.length-1,end:-1,open:o.can_open,close:o.can_close});return e.pos+=o.length,!0}),e.inline.ruler2.before("emphasis","mark",function(e){let n;const r=e.tokens_meta,o=(e.tokens_meta||[]).length;for(t(e,e.delimiters),n=0;n<o;n++)r[n]&&r[n].delimiters&&t(e,r[n].delimiters)})}).use(Vo()).use(function(e,t){const n={defs:Ko,shortcuts:Yo,enabled:[]};!function(e,t){const n=function(e){let t=e.defs;e.enabled.length&&(t=Object.keys(t).reduce((n,r)=>(e.enabled.indexOf(r)>=0&&(n[r]=t[r]),n),{}));const n=Object.keys(e.shortcuts).reduce((n,r)=>t[r]?Array.isArray(e.shortcuts[r])?(e.shortcuts[r].forEach(e=>{n[e]=r}),n):(n[e.shortcuts[r]]=r,n):n,{}),r=Object.keys(t);let o;o=0===r.length?"^$":r.map(e=>`:${e}:`).concat(Object.keys(n)).sort().reverse().map(e=>function(e){return e.replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&")}(e)).join("|");const a=RegExp(o),i=RegExp(o,"g");return{defs:t,shortcuts:n,scanRE:a,replaceRE:i}}(Object.assign({},{defs:{},shortcuts:{},enabled:[]},t||{}));e.renderer.rules.emoji=Jo,e.core.ruler.after("linkify","emoji",function(e,t,n,r,o){const a=e.utils.arrayReplaceAt,i=e.utils.lib.ucmicro,u=new RegExp([i.Z.source,i.P.source,i.Cc.source].join("|"));function s(e,r,a){let i=0;const s=[];if(e.replace(o,function(r,o,l){let c;if(Object.prototype.hasOwnProperty.call(n,r)){if(c=n[r],o>0&&!u.test(l[o-1]))return;if(o+r.length<l.length&&!u.test(l[o+r.length]))return}else c=r.slice(1,-1);if(o>i){const t=new a("text","",0);t.content=e.slice(i,o),s.push(t)}const f=new a("emoji","",0);f.markup=c,f.content=t[c],s.push(f),i=o+r.length}),i<e.length){const t=new a("text","",0);t.content=e.slice(i),s.push(t)}return s}return function(e){let t;const n=e.tokens;let o=0;for(let i=0,u=n.length;i<u;i++){if("inline"!==n[i].type)continue;let u=n[i].children;for(let l=u.length-1;l>=0;l--)t=u[l],"link_open"!==t.type&&"link_close"!==t.type||"auto"===t.info&&(o-=t.nesting),"text"===t.type&&0===o&&r.test(t.content)&&(n[i].children=u=a(u,l,s(t.content,t.level,e.Token)))}}}(e,n.defs,n.shortcuts,n.scanRE,n.replaceRE))}(e,Object.assign({},n,t||{}))},{shortcuts:{}}).use(ra().markdownItGfmrAlerts).use(aa().markdownItGfmrHeadingAnchor,{title:(0,i.__)("Permalink to this heading","markdown-renderer-for-github")}),ya=function(){return ba},Da=null,ka=null,wa=0,va=function(e){var t=1e3*Math.pow(2,e);return Math.min(t,8e3)},Fa=function(e){return new Promise(function(t){return setTimeout(t,e)})},Ca=function(){return window.wpGfmBuildLocalAssetUrl?window.wpGfmBuildLocalAssetUrl("assets/libs/shiki/shiki.min.js"):window.wpGfmConfig&&window.wpGfmConfig.pluginUrl?window.wpGfmConfig.pluginUrl+"assets/libs/shiki/shiki.min.js":"/wp-content/plugins/markdown-renderer-for-github/assets/libs/shiki/shiki.min.js"},Ea=function(){var e=ga(ca().m(function e(){var t,n,r,o,a,i,u,s=arguments;return ca().w(function(e){for(;;)switch(e.n){case 0:if(n=s.length>0&&void 0!==s[0]?s[0]:window.document,!(r=Qo(n)).shiki){e.n=1;break}return console.log("[WP GFM Editor] Shiki already loaded globally"),e.a(2,r.shiki);case 1:return(o=n.createElement("script")).src=Ca(),o.async=!0,console.log("[WP GFM Editor] Loading Shiki locally:",o.src),e.n=2,new Promise(function(e,t){o.onload=e,o.onerror=function(){return t(new Error("Script load failed: ".concat(o.src)))},n.head.appendChild(o)});case 2:if(r.shiki&&r.shiki.createHighlighter){e.n=3;break}throw new Error("Shiki global object not found after local asset load");case 3:return console.log("[WP GFM Editor] Shiki loaded successfully from local assets"),a=r.shiki.createHighlighter,i=((null===(t=window.wpGfmConfig)||void 0===t||null===(t=t.theme)||void 0===t?void 0:t.customThemes)||[]).filter(function(e){return e&&e.theme&&"object"===ha(e.theme)}).map(function(e){return e.theme}),e.n=4,a({themes:["github-dark","github-light"].concat(pa(i)),langs:["javascript","typescript","python","ruby","go","rust","bash","css","html","json","yaml","xml","sql","php","java","csharp","cpp","diff","markdown"]});case 4:return u=e.v,e.a(2,u)}},e)}));return function(){return e.apply(this,arguments)}}(),Aa=function(e){ba=ba.set({highlight:function(t,n,r){try{var o,a,i,u,s,l=function(e){var t=String(e||"").trim(),n=t.match(/\{([^}]*)\}/),r=n?sa(n[1]):[],o=t.replace(/\{[^}]*\}/g," "),a=/(?:^|\s)collapse(?=\s|$)/i.test(o),i=(o=o.replace(/(?:^|\s)collapse(?=\s|$)/i," ")).trim().split(/\s+/)[0]||"",u=i,s=null,l=i.indexOf(":");-1!==l&&(u=i.slice(0,l),s=i.slice(l+1)||null);var c="diff"===u.toLowerCase();return{lang:u,filename:s,highlightLines:r,isDiff:c,collapse:a}}((n||"")+(r?" ".concat(r):"")),c=l.lang;if(!c||""===c.trim())return"<pre><code>".concat(_a(t),"</code></pre>");var f=c.toLowerCase().trim(),p=ta()[f]||f;if("chart"===p||"chart-pro"===p)return'<pre><code class="language-'.concat(p,'">').concat(_a(t),"</code></pre>");if("math"===p)return'<pre><code class="language-math">'.concat(_a(t),"</code></pre>");if("plantuml"===p||"puml"===p)return'<pre><code class="language-'.concat(p,'">').concat(_a(t),"</code></pre>");var d,h=e.getLoadedLanguages();if("mermaid"===p)d="plaintext";else if(h.includes(p))d=p;else{var m=ua()[p];d=m&&h.includes(m)?m:"plaintext"}var g=null!==(o=null===(a=window.wpGfmConfig)||void 0===a||null===(a=a.theme)||void 0===a?void 0:a.shiki_theme)&&void 0!==o?o:null!==(i=(u=window).matchMedia)&&void 0!==i&&i.call(u,"(prefers-color-scheme: dark)").matches?"github-dark":"github-light";"auto"===g&&(g=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"github-dark":"github-light");var _=e.codeToHtml(t,{lang:d,theme:g}),b=null===(s=window.wpGfmConfig)||void 0===s?void 0:s.codeFeatures;return null!=b&&b.advancedSyntax?function(e,t){var n=[];return t.filename&&n.push('data-gfmr-filename="'.concat(function(e){return _a(String(e)).replace(/"/g,""")}(t.filename),'"')),t.highlightLines&&t.highlightLines.length&&n.push('data-gfmr-hl="'.concat(t.highlightLines.join(","),'"')),t.collapse&&n.push('data-gfmr-collapse="1"'),n.length?e.replace("<pre","<pre ".concat(n.join(" "))):e}(_,l):_}catch(e){return console.warn("[WP GFM Editor] Highlighting failed:",e),'<pre><code class="language-'.concat(n||"plaintext",'">').concat(_a(t),"</code></pre>")}}})},xa=function(){var e=ga(ca().m(function e(){var t,n=arguments;return ca().w(function(e){for(;;)switch(e.n){case 0:if(t=n.length>0&&void 0!==n[0]?n[0]:window.document,!Da){e.n=1;break}return e.a(2,Da);case 1:if(!ka){e.n=2;break}return e.a(2,ka);case 2:return ka=ga(ca().m(function e(){var n,r,o;return ca().w(function(e){for(;;)switch(e.p=e.n){case 0:if(!(wa<=3)){e.n=7;break}return e.p=1,e.n=2,Ea(t);case 2:if(!(n=e.v)){e.n=3;break}return Da=n,Aa(n),wa=0,e.a(2,Da);case 3:e.n=6;break;case 4:if(e.p=4,o=e.v,!(wa>=3)){e.n=5;break}return console.error("[WP GFM Editor] Failed to load Shiki after ".concat(wa+1," attempts:"),o),console.log("[WP GFM Editor] Available globals:",{wpGfmBuildLocalAssetUrl:ha(window.wpGfmBuildLocalAssetUrl),wpGfmConfig:ha(window.wpGfmConfig),wpGfmConfigContent:window.wpGfmConfig}),ka=null,e.a(2,null);case 5:return r=va(wa),console.warn("[WP GFM Editor] Shiki load attempt ".concat(wa+1," failed, retrying in ").concat(r,"ms..."),o.message),wa++,e.n=6,Fa(r);case 6:e.n=0;break;case 7:return e.a(2,null)}},e,null,[[1,4]])}))(),e.a(2,ka)}},e)}));return function(){return e.apply(this,arguments)}}(),Sa=function(){return Da};function Ba(e){return Ba="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ba(e)}function Ta(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function La(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ta(Object(n),!0).forEach(function(t){ja(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ta(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ja(e,t,n){return(t=function(e){var t=function(e){if("object"!=Ba(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=Ba(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Ba(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ma(e,t,n){var r=La({},e[t]||{}),o=Number(n);return Number.isInteger(o)&&o>0?r.featuredImage=o:delete r.featuredImage,La(La({},e),{},ja({},t,r))}function Oa(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Ia(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Oa(Object(n),!0).forEach(function(t){Ra(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Oa(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Ra(e,t,n){return(t=function(e){var t=function(e){if("object"!=Na(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=Na(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Na(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Na(e){return Na="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Na(e)}function Pa(e,t){var n=e?e[t]:void 0;return n&&"object"===Na(n)&&!Array.isArray(n)?n:{}}function qa(e,t,n,r){var o=Ia({},Pa(e,t)),a="string"==typeof r?r:"";return a?o[n]=a:delete o[n],Ia(Ia({},e||{}),{},Ra({},t,o))}var za=function(e,t){var n=t.presentProp,r=t.promiseProp,o=t.inject;if(e[n])return Promise.resolve(!0);if(e[r])return e[r];var a=o().finally(function(){delete e[r]});return e[r]=a,a},$a=new Set(["script","iframe","object","embed","link","meta","base","audio","video","animate","animatetransform","animatemotion","set","mpath","discard"]),Ga=new Set(["href","xlink:href","src","srcset","data","action","formaction"]),Ua=new Set(["http","https","mailto","tel","ftp"]),Ha=/^data:image\/(?:png|jpe?g|gif|webp);base64,/i,Wa=/^data:image\/(?:png|webp|jpe?g|gif);base64,[A-Za-z0-9+/]+={0,2}$/,Za=/expression\(|javascript:|vbscript:|@import|url\(\s*['"]?\s*(?:javascript|vbscript|data:text)/i,Va=function(e){var t=String(e).trim();if(""===t)return!0;if(/^[#/.]/.test(t))return!0;var n=t.match(/^([a-z][a-z0-9+.-]*):/i);if(!n)return!0;var r=n[1].toLowerCase();return"data"===r?Ha.test(t):Ua.has(r)},Ka=function(e){var t=e.tagName?e.tagName.toLowerCase():"";if($a.has(t))e.remove();else{if("style"===t){var n=e.textContent||"";Za.test(n)&&(e.textContent=n.replace(/@import[^;]*;?/gi,"").replace(/expression\([^)]*\)/gi,"").replace(/(?:javascript|vbscript):/gi,""))}for(var r=0,o=Array.from(e.attributes||[]);r<o.length;r++){var a=o[r],i=a.name.toLowerCase();i.startsWith("on")?e.removeAttribute(a.name):!Ga.has(i)||Va(a.value)?"style"===i&&Za.test(a.value)&&e.removeAttribute(a.name):e.removeAttribute(a.name)}for(var u=0,s=Array.from(e.children);u<s.length;u++){var l=s[u];Ka(l)}}},Ya=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1048576;if("string"!=typeof e||!Wa.test(e))return!1;var n=e.slice(e.indexOf(",")+1);return Math.floor(3*n.length/4)<=t},Ja="gfmr_diag_",Xa=function(){return Math.floor(Date.now()/1e3)},Qa=function(){try{var e;return"undefined"==typeof window||null!==(e=window.wpGfmConfig)&&void 0!==e&&e.disableDiagramPersistence?null:window.localStorage||null}catch(e){return null}},ei=function(e,t){return"".concat(Ja).concat(e,"_").concat(function(e){for(var t=0,n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t&=t;return Math.abs(t).toString(16)}(t),"_").concat(t.length)},ti=function(e,t){try{e.removeItem(t)}catch(e){}},ni=function(e,t){var n=Qa();if(!n||"string"!=typeof t)return null;var r,o,a=ei(e,t);try{r=n.getItem(a)}catch(e){return null}if(!r)return null;try{o=JSON.parse(r)}catch(e){return ti(n,a),null}if(!o||1!==o.v||o.k!==t||"number"!=typeof o.ts)return ti(n,a),null;if(Xa()-o.ts>604800)return ti(n,a),null;var i=function(e,t){return"string"!=typeof t||""===t?null:"mermaid"===e?function(e){if("string"!=typeof e||-1===e.indexOf("<svg"))return"";var t;try{t=(new DOMParser).parseFromString(e,"text/html")}catch(e){return""}var n=t&&t.body;if(!n)return"";var r=Array.from(n.children).filter(function(e){return e.tagName&&"svg"===e.tagName.toLowerCase()});if(0===r.length)return"";r.forEach(Ka);var o=r.map(function(e){return e.outerHTML}).join("");return!o||/<script/i.test(o)?"":o}(t)||null:"chart"===e&&Ya(t)?t:null}(e,o.p);return i||(ti(n,a),null)},ri=function(e,t,n){var r=Qa();if(r&&"string"==typeof t&&!("string"!=typeof n||""===n||n.length>204800)&&("chart"!==e||Ya(n))){var o=ei(e,t),a=JSON.stringify({v:1,k:t,ts:Xa(),p:n});try{r.setItem(o,a)}catch(e){!function(e){try{for(var t=[],n=0;n<e.length;n++){var r=e.key(n);r&&0===r.indexOf(Ja)&&t.push(r)}t.forEach(function(t){return ti(e,t)})}catch(e){}}(r);try{r.setItem(o,a)}catch(e){}}}};function oi(e){if(null!=e){var t=e["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],n=0;if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length))return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}throw new TypeError(ai(e)+" is not iterable")}function ai(e){return ai="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ai(e)}function ii(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ui(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ii(Object(n),!0).forEach(function(t){si(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ii(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function si(e,t,n){return(t=function(e){var t=function(e){if("object"!=ai(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=ai(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==ai(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function li(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return ci(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ci(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var _n=0,r=function(){};return{s:r,n:function(){return _n>=e.length?{done:!0}:{done:!1,value:e[_n++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,i=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){i=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(i)throw o}}}}function ci(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function fi(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",o=n.toStringTag||"@@toStringTag";function a(n,r,o,a){var s=r&&r.prototype instanceof u?r:u,l=Object.create(s.prototype);return pi(l,"_invoke",function(n,r,o){var a,u,s,l=0,c=o||[],f=!1,p={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,n){return a=t,u=0,s=e,p.n=n,i}};function d(n,r){for(u=n,s=r,t=0;!f&&l&&!o&&t<c.length;t++){var o,a=c[t],d=p.p,h=a[2];n>3?(o=h===r)&&(s=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=e):a[0]<=d&&((o=n<2&&d<a[1])?(u=0,p.v=r,p.n=a[1]):d<h&&(o=n<3||a[0]>r||r>h)&&(a[4]=n,a[5]=r,p.n=h,u=0))}if(o||n>1)return i;throw f=!0,r}return function(o,c,h){if(l>1)throw TypeError("Generator is already running");for(f&&1===c&&d(c,h),u=c,s=h;(t=u<2?e:s)||!f;){a||(u?u<3?(u>1&&(p.n=-1),d(u,s)):p.n=s:p.v=s);try{if(l=2,a){if(u||(o="next"),t=a[o]){if(!(t=t.call(a,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,u<2&&(u=0)}else 1===u&&(t=a.return)&&t.call(a),u<2&&(s=TypeError("The iterator does not provide a '"+o+"' method"),u=1);a=e}else if((t=(f=p.n<0)?s:n.call(r,p))!==i)break}catch(t){a=e,u=1,s=t}finally{l=1}}return{value:t,done:f}}}(n,o,a),!0),l}var i={};function u(){}function s(){}function l(){}t=Object.getPrototypeOf;var c=[][r]?t(t([][r]())):(pi(t={},r,function(){return this}),t),f=l.prototype=u.prototype=Object.create(c);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,pi(e,o,"GeneratorFunction")),e.prototype=Object.create(f),e}return s.prototype=l,pi(f,"constructor",l),pi(l,"constructor",s),s.displayName="GeneratorFunction",pi(l,o,"GeneratorFunction"),pi(f),pi(f,o,"Generator"),pi(f,r,function(){return this}),pi(f,"toString",function(){return"[object Generator]"}),(fi=function(){return{w:a,m:p}})()}function pi(e,t,n,r){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}pi=function(e,t,n,r){function a(t,n){pi(e,t,function(e){return this._invoke(t,n,e)})}t?o?o(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(a("next",0),a("throw",1),a("return",2))},pi(e,t,n,r)}function di(e,t,n,r,o,a,i){try{var u=e[a](i),s=u.value}catch(e){return void n(e)}u.done?t(s):Promise.resolve(s).then(r,o)}function hi(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var a=e.apply(t,n);function i(e){di(a,r,o,i,u,"next",e)}function u(e){di(a,r,o,i,u,"throw",e)}i(void 0)})}}var mi=new WeakMap,gi=function(){var e,t,n,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.wpGfmConfig||{},o=(null==r||null===(e=r.mermaid)||void 0===e?void 0:e.theme)||"auto";if("dark"===o)return"dark";if("light"===o)return"default";var a,i,u=(null==r||null===(t=r.theme)||void 0===t?void 0:t.shiki_theme)||"auto";if("auto"===u&&(u=null!==(a=(i=window).matchMedia)&&void 0!==a&&a.call(i,"(prefers-color-scheme: dark)").matches?"github-dark":"github-light"),"github-dark"===u)return"dark";if("github-light"===u)return"default";var s=null==r||null===(n=r.theme)||void 0===n?void 0:n.customThemes,l=Array.isArray(s)?s.find(function(e){return(null==e?void 0:e.name)===u}):null;return"dark"===(null==l?void 0:l.type)?"dark":"default"},_i=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window.wpGfmConfig||{},n="string"==typeof e?e.trimStart():"";return!n||n.startsWith("---")||/^%%\{\s*init\b/i.test(n)?e:'%%{init: {"theme":"'.concat(gi(t),'"}}%%\n').concat(e)},bi=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:50,t=new Map;return mi.set(t,e),t},yi=function(e,t,n){var r;if(e){var o=null!==(r=mi.get(e))&&void 0!==r?r:50;e.size>=o&&!e.has(t)&&e.delete(e.keys().next().value),e.set(t,n)}},Di=function(){var e=hi(fi().m(function e(t,n,r){var o,a;return fi().w(function(e){for(;;)switch(e.n){case 0:if(!(o=null==t?void 0:t.get(n))){e.n=1;break}return e.a(2,o);case 1:return e.n=2,r();case 2:return a=e.v,yi(t,n,a),e.a(2,a)}},e)}));return function(_x,t,n){return e.apply(this,arguments)}}(),ki=function(e,t,n,r){if(!e)return[];var o,a=li(t);try{for(a.s();!(o=a.n()).done;){var i=o.value,u=e.querySelectorAll(i);if(u.length>0)return Array.from(u)}}catch(e){a.e(e)}finally{a.f()}var s,l=[],c=li(n);try{for(c.s();!(s=c.n()).done;){var f,p=s.value,d=li(e.querySelectorAll(p));try{for(d.s();!(f=d.n()).done;){var h=f.value;r(h)&&l.push(h)}}catch(e){d.e(e)}finally{d.f()}if(l.length>0)break}}catch(e){c.e(e)}finally{c.f()}return l},wi=function(e){return function(e){if(!e)return!1;var t=Qe.some(function(t){return e.startsWith(t)})||et.some(function(t){return e.includes(t)}),n=tt.some(function(t){return e.includes(t)});return t&&!n}((e.textContent||"").trim().replace(/\s+/g," "))},vi=function(e){return t=(e.textContent||"").trim(),n=(t||"").trim(),ot.some(function(e){return n.startsWith(e)});var t,n},Fi=function(e){return ki(e,nt,rt,wi).filter(function(e){return!function(e){return"function"==typeof e.closest&&null!==e.closest("[data-mermaid-rendered]")}(e)})},Ci="code.language-chart:not([data-gfmr-chart-processed]), code.language-chart-pro:not([data-gfmr-chart-processed])",Ei=function(e){var t=e||("undefined"!=typeof window?window.document:null);if(!t)return Promise.resolve(!1);var n=Qo(t);return za(n,{presentProp:"Chart",promiseProp:"__gfmrChartLoadPromise",inject:function(){var e,n=(null===(e=window.wpGfmConfig)||void 0===e?void 0:e.pluginUrl)||"/wp-content/plugins/markdown-renderer-for-github/";return new Promise(function(e,r){var o=t.createElement("script");o.src=n+"assets/libs/chartjs/chart.umd.min.js",o.onload=e,o.onerror=r,t.head.appendChild(o)}).then(function(){return dt("[Chart.js] Library loaded"),!0}).catch(function(e){return console.warn("[WP GFM Editor] Failed to load Chart.js:",e),!1})}})},Ai=ui({mermaid:"mermaid",chart:"chart","chart-pro":"chart",chartjs:"chart",plantuml:"plantuml",puml:"plantuml",uml:"plantuml"},Object.fromEntries(st.map(function(e){return[e,"plantuml"]}))),xi=0,Si=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.cloneNode(!0);n.querySelectorAll("span").forEach(function(e){var t=document.createTextNode(e.textContent);e.parentNode.replaceChild(t,e)});var r=n.textContent||n.innerText||"";return r=r.replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&").replace(/"/g,'"').replace(/'/g,"'"),t.decodeNbsp&&(r=r.replace(/ /g," ")),t.trim?r.trim():r},Bi=function(e){return Si(e,{trim:!0,decodeNbsp:!0})},Ti=Si,Li=function(e){if(!e||!e.includes('class="shiki"'))return e;var t=document.createElement("div");return t.innerHTML=e,t.querySelectorAll("pre.shiki").forEach(function(e){var t=e.querySelector("code");if(t){var n=t.querySelectorAll(".line"),r=!1;n.forEach(function(e){var t=(e.textContent||"").trim();t?t.startsWith("+")&&!t.startsWith("+++")?(e.classList.add("diff","add"),r=!0):t.startsWith("-")&&!t.startsWith("---")?(e.classList.add("diff","remove"),r=!0):t.startsWith("@@")&&(e.classList.add("diff","hunk"),r=!0):e.remove()}),r&&e.classList.add("has-diff")}}),t.innerHTML},ji=function(){var e=hi(fi().m(function e(t,n){var r,o,a,i,u,s,l,c,f,p,d,h,m,g,_,b,y,D,k=arguments;return fi().w(function(e){for(;;)switch(e.n){case 0:if(r=k.length>2&&void 0!==k[2]?k[2]:null,t){e.n=1;break}return e.a(2,0);case 1:if(o=n||t.ownerDocument||window.document,a=Qo(o),0!==(i=t.querySelectorAll(Ci)).length){e.n=2;break}return e.a(2,0);case 2:return dt("[Chart.js] Found ".concat(i.length," chart blocks")),e.n=3,Ei(o);case 3:if(e.v){e.n=4;break}return e.a(2,0);case 4:u=function(e,t){var n=ui({},e);for(var r in t)t[r]&&"object"===ai(t[r])&&!Array.isArray(t[r])?n[r]=u(e[r]||{},t[r]):void 0===e[r]&&(n[r]=t[r]);return n},s=function(){return{isDark:!1,colors:{text:"#24292f",grid:"#d0d7de",border:"#d0d7de",bg:"#ffffff"}}}(),l=!1,c=function(){var e,t;l||(l=!0,a.Chart.defaults.color=s.colors.text,a.Chart.defaults.borderColor=s.colors.border,a.Chart.defaults.scale&&(a.Chart.defaults.scale.grid=a.Chart.defaults.scale.grid||{},a.Chart.defaults.scale.grid.color=s.colors.grid,a.Chart.defaults.scale.ticks=a.Chart.defaults.scale.ticks||{},a.Chart.defaults.scale.ticks.color=s.colors.text),null!==(e=a.Chart.defaults.plugins)&&void 0!==e&&null!==(e=e.legend)&&void 0!==e&&e.labels&&(a.Chart.defaults.plugins.legend.labels.color=s.colors.text),null!==(t=a.Chart.defaults.plugins)&&void 0!==t&&t.title&&(a.Chart.defaults.plugins.title.color=s.colors.text))},f=function(e){var t=o.createElement("div");return t.className="gfmr-chart-container gfmr-chart-image",t.style.cssText="position: relative; width: 100%; max-width: 800px; margin: 1rem auto; padding: 1rem; display: flex; justify-content: center; box-sizing: border-box;",t.innerHTML='<img src="'.concat(e,'" alt="Chart" style="max-width: 100%; height: auto;" />'),t},p=function(e,t){var n=e.closest("pre")||e.parentElement;null!=n&&n.parentNode&&n.parentNode.replaceChild(t,n)},d={responsive:!0,maintainAspectRatio:!0,animation:!1,color:s.colors.text,borderColor:s.colors.border,scales:{x:{grid:{color:s.colors.grid},ticks:{color:s.colors.text}},y:{grid:{color:s.colors.grid},ticks:{color:s.colors.text}}},plugins:{legend:{labels:{color:s.colors.text}},title:{color:s.colors.text},tooltip:{backgroundColor:"rgba(255, 255, 255, 0.95)",titleColor:s.colors.text,bodyColor:s.colors.text,borderColor:s.colors.border,borderWidth:1}}},h=function(){var e=hi(fi().m(function e(t){var n,i,s,l;return fi().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,t.setAttribute("data-gfmr-chart-processed","true"),n=Bi(t),dt("[Chart.js] Extracted content:",n.substring(0,100)),e.n=1,Di(r,n,hi(fi().m(function e(){var t,i,s,l,f,p,h,m;return fi().w(function(e){for(;;)switch(e.p=e.n){case 0:if(!(t=r?ni("chart",n):null)){e.n=1;break}return e.a(2,t);case 1:return(i=JSON.parse(n)).options=u(d,i.options||{}),(s=o.createElement("div")).style.width="600px",s.style.height="400px",s.style.position="absolute",s.style.left="-9999px",o.body.appendChild(s),l=o.createElement("canvas"),s.appendChild(l),c(),f=null,e.p=2,f=new a.Chart(l.getContext("2d"),i),p=f.toBase64Image("image/png",1),r&&ri("chart",n,p),e.a(2,p);case 3:return e.p=3,null===(h=f)||void 0===h||h.destroy(),null===(m=s.parentNode)||void 0===m||m.removeChild(s),e.f(3);case 4:return e.a(2)}},e,null,[[2,,3,4]])})));case 1:return i=e.v,p(t,f(i)),e.a(2,!0);case 2:return e.p=2,l=e.v,console.warn("[WP GFM Editor] Chart render error:",l),(s=o.createElement("div")).className="gfmr-chart-error",s.innerHTML='<div class="gfmr-chart-error-content"><strong>Chart Error:</strong> '.concat(l.message,"</div>"),p(t,s),e.a(2,!0)}},e,null,[[0,2]])}));return function(t){return e.apply(this,arguments)}}(),m=4,g=0,_=Array.from(i),b=0;case 5:if(!(b<_.length)){e.n=8;break}return y=_.slice(b,b+m),e.n=6,Promise.allSettled(y.map(h));case 6:D=e.v,g+=D.filter(function(e){return"fulfilled"===e.status&&e.value}).length;case 7:b+=m,e.n=5;break;case 8:return e.a(2,g)}},e)}));return function(t,n){return e.apply(this,arguments)}}(),Mi=function(){var e=hi(fi().m(function e(t,n){var r,o,a,i,u,s,l,c,f,p,d,h=arguments;return fi().w(function(e){for(;;)switch(e.n){case 0:if(o=h.length>2&&void 0!==h[2]?h[2]:"editor",a=h.length>3&&void 0!==h[3]?h[3]:null,i=h.length>4&&void 0!==h[4]?h[4]:null,dt("processMermaidBlocksLocal called"),dt("Container HTML preview:",null==t||null===(r=t.innerHTML)||void 0===r?void 0:r.substring(0,200)),t){e.n=1;break}return e.a(2,0);case 1:return u=t.ownerDocument||window.document,s=Qo(u),e.n=2,n();case 2:if(e.v){e.n=3;break}return dt("Mermaid not available"),e.a(2,0);case 3:if(dt("Mermaid is available"),l=Fi(t),dt("Mermaid detection result: ".concat(l.length," blocks")),0!==l.length){e.n=4;break}return e.a(2,0);case 4:c=function(e,t){e.innerHTML=t,e.setAttribute("data-mermaid-rendered","true"),e.setAttribute("data-mermaid-context",o)},f=0,p=fi().m(function e(){var t,n,r,o,p,h,m,g,_,b,y,D;return fi().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t=l[d],e.p=1,n=Ti(t),(r=t.parentElement)&&null!=n&&n.trim()){e.n=2;break}return e.a(2,1);case 2:return(o=u.createElement("div")).className="gfmr-mermaid-container",o.style.cssText=mt(a||"transparent"),p="gfmr-editor-mermaid-".concat(++xi,"-").concat(d),(h=u.createElement("div")).id=p,h.className="gfmr-mermaid",o.appendChild(h),r.parentNode.replaceChild(o,r),m=n.trim(),g=_i(m),_=g,e.p=3,e.n=4,Di(i,_,hi(fi().m(function e(){var t,n,r;return fi().w(function(e){for(;;)switch(e.n){case 0:if(!(t=i?ni("mermaid",_):null)){e.n=1;break}return e.a(2,t);case 1:return e.n=2,s.mermaid.render(p+"-svg",g);case 2:if(n=e.v,r="",!n||"object"!==ai(n)||!n.svg){e.n=3;break}r=n.svg,e.n=5;break;case 3:if("string"!=typeof n){e.n=4;break}r=n,e.n=5;break;case 4:throw new Error("Invalid render result format");case 5:return i&&ri("mermaid",_,r),e.a(2,r)}},e)})));case 4:b=e.v,c(h,b),f++,e.n=6;break;case 5:e.p=5,y=e.v,console.error("[WP GFM Editor] ❌ Render error for block ".concat(d,":"),y),h.innerHTML=gt(y.message,n);case 6:e.n=8;break;case 7:e.p=7,D=e.v,console.error("[WP GFM Editor] ❌ Processing error for block ".concat(d,":"),D);case 8:return e.a(2)}},e,null,[[3,5],[1,7]])}),d=0;case 5:if(!(d<l.length)){e.n=8;break}return e.d(oi(p()),6);case 6:if(!e.v){e.n=7;break}return e.a(3,7);case 7:d++,e.n=5;break;case 8:return e.a(2,f)}},e)}));return function(t,n){return e.apply(this,arguments)}}(),Oi=function(){var e=hi(fi().m(function e(t,n,r){var o,a,i,u,s,l,c,f,p,d=arguments;return fi().w(function(e){for(;;)switch(e.p=e.n){case 0:return o=d.length>3&&void 0!==d[3]?d[3]:"",(a=new FormData).append("action","gfmr_render_plantuml"),a.append("nonce",n.nonce),a.append("content",t),o&&a.append("lang",o),i=new AbortController,u=setTimeout(function(){return i.abort()},1e4),s=r&&ft?AbortSignal.any([r,i.signal]):r||i.signal,e.p=1,e.n=2,fetch(n.ajaxUrl,{method:"POST",body:a,signal:s});case 2:if((c=e.v).ok){e.n=3;break}throw new Error("HTTP ".concat(c.status));case 3:return e.n=4,c.json();case 4:if((f=e.v).success){e.n=5;break}throw new Error((null===(p=f.data)||void 0===p?void 0:p.message)||"PlantUML render failed");case 5:return e.a(2,(null===(l=f.data)||void 0===l?void 0:l.svg)||f.data||"");case 6:return e.p=6,clearTimeout(u),e.f(6);case 7:return e.a(2)}},e,null,[[1,,6,7]])}));return function(t,n,r){return e.apply(this,arguments)}}(),Ii=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=(null==t?void 0:t.c4Labels)||{},o=e.createElement("div");o.className="gfmr-c4-blocked";var a=e.createElement("div");a.className="gfmr-c4-upgrade-prompt";var i=e.createElement("h4");i.textContent=r.title||"C4 Model diagrams are a Pro feature",a.appendChild(i);var u=e.createElement("p");u.textContent=r.body||"C4 architecture diagrams require the Pro version.",a.appendChild(u);var s=(null==t?void 0:t.c4UpgradeUrl)||"";if(s){var l=e.createElement("a");l.className="gfmr-upgrade-button",l.href=s,l.target="_blank",l.rel="noopener noreferrer",l.textContent=r.cta||"Learn more",a.appendChild(l)}if(o.appendChild(a),n){var c=e.createElement("details");c.className="gfmr-c4-source";var f=e.createElement("summary");f.textContent=r.source||"Original Content",c.appendChild(f);var p=e.createElement("pre"),d=e.createElement("code");d.textContent=n,p.appendChild(d),c.appendChild(p),o.appendChild(c)}return o},Ri=function(){var e=hi(fi().m(function e(t,n){var r,o,a,i,u,s,l,c,f,p=arguments;return fi().w(function(e){for(;;)switch(e.n){case 0:if(o=p.length>2&&void 0!==p[2]?p[2]:null,null!=(a=null===(r=window.wpGfmConfig)||void 0===r?void 0:r.plantuml)&&a.enabled){e.n=1;break}return e.a(2,0);case 1:if(t){e.n=2;break}return e.a(2,0);case 2:if(i=t.ownerDocument||window.document,u=ki(t,it,ut,vi).map(function(e){return{el:e,lang:""}}),s=Array.from(t.querySelectorAll(lt)).map(function(e){return{el:e,lang:ct(e)||"c4"}}),0!==(l=u.concat(s)).length){e.n=3;break}return e.a(2,0);case 3:return dt("[PlantUML] Found ".concat(u.length," block(s), ").concat(s.length," C4 block(s)")),c=0,f=new Map,e.n=4,Promise.allSettled(l.map(function(){var e=hi(fi().m(function e(t){var r,u,s,l,p,d,h,m,g,_,b,y,D,k,w,v,F,C;return fi().w(function(e){for(;;)switch(e.p=e.n){case 0:if(u=t.el,s=t.lang,!u.getAttribute("data-gfmr-plantuml-processed")){e.n=1;break}return e.a(2);case 1:if(u.setAttribute("data-gfmr-plantuml-processed","1"),l=Si(u).trim()){e.n=2;break}return e.a(2);case 2:if(p=u.closest("pre")||u.parentElement){e.n=3;break}return e.a(2);case 3:if(!s||!1!==a.c4Enabled){e.n=4;break}return null===(d=p.parentNode)||void 0===d||d.replaceChild(Ii(i,a,l),p),c++,e.a(2);case 4:if(s||_t(l)){e.n=5;break}return(m=i.createElement("div")).className="gfmr-plantuml-placeholder",null===(h=p.parentNode)||void 0===h||h.replaceChild(m,p),e.a(2);case 5:return(g=i.createElement("div")).className="gfmr-plantuml-loading",null===(r=p.parentNode)||void 0===r||r.insertBefore(g,p.nextSibling),_=s?"".concat(s,"\n").concat(l):l,e.p=6,e.n=7,Di(o,_,function(){var e=f.get(_);return e||(e=Oi(l,a,n,s).finally(function(){return f.delete(_)}),f.set(_,e)),e});case 7:y=e.v,(D=i.createElement("div")).className="gfmr-plantuml-container",(k=i.createElement("div")).className="gfmr-plantuml-rendered",k.innerHTML=y,D.appendChild(k),null===(b=p.parentNode)||void 0===b||b.replaceChild(D,p),c++,e.n=10;break;case 8:if(e.p=8,"AbortError"!==(C=e.v).name){e.n=9;break}return e.a(2);case 9:console.warn("[WP GFM Editor] PlantUML render error:",C),(v=i.createElement("div")).className="gfmr-plantuml-error",v.textContent=C.message||"PlantUML render failed",null===(w=p.parentNode)||void 0===w||w.replaceChild(v,p),c++;case 10:return e.p=10,null===(F=g.parentNode)||void 0===F||F.removeChild(g),e.f(10);case 11:return e.a(2)}},e,null,[[6,8,10,11]])}));return function(t){return e.apply(this,arguments)}}()));case 4:return e.a(2,c)}},e)}));return function(t,n){return e.apply(this,arguments)}}();function Ni(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",o=n.toStringTag||"@@toStringTag";function a(n,r,o,a){var s=r&&r.prototype instanceof u?r:u,l=Object.create(s.prototype);return Pi(l,"_invoke",function(n,r,o){var a,u,s,l=0,c=o||[],f=!1,p={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,n){return a=t,u=0,s=e,p.n=n,i}};function d(n,r){for(u=n,s=r,t=0;!f&&l&&!o&&t<c.length;t++){var o,a=c[t],d=p.p,h=a[2];n>3?(o=h===r)&&(s=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=e):a[0]<=d&&((o=n<2&&d<a[1])?(u=0,p.v=r,p.n=a[1]):d<h&&(o=n<3||a[0]>r||r>h)&&(a[4]=n,a[5]=r,p.n=h,u=0))}if(o||n>1)return i;throw f=!0,r}return function(o,c,h){if(l>1)throw TypeError("Generator is already running");for(f&&1===c&&d(c,h),u=c,s=h;(t=u<2?e:s)||!f;){a||(u?u<3?(u>1&&(p.n=-1),d(u,s)):p.n=s:p.v=s);try{if(l=2,a){if(u||(o="next"),t=a[o]){if(!(t=t.call(a,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,u<2&&(u=0)}else 1===u&&(t=a.return)&&t.call(a),u<2&&(s=TypeError("The iterator does not provide a '"+o+"' method"),u=1);a=e}else if((t=(f=p.n<0)?s:n.call(r,p))!==i)break}catch(t){a=e,u=1,s=t}finally{l=1}}return{value:t,done:f}}}(n,o,a),!0),l}var i={};function u(){}function s(){}function l(){}t=Object.getPrototypeOf;var c=[][r]?t(t([][r]())):(Pi(t={},r,function(){return this}),t),f=l.prototype=u.prototype=Object.create(c);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,Pi(e,o,"GeneratorFunction")),e.prototype=Object.create(f),e}return s.prototype=l,Pi(f,"constructor",l),Pi(l,"constructor",s),s.displayName="GeneratorFunction",Pi(l,o,"GeneratorFunction"),Pi(f),Pi(f,o,"Generator"),Pi(f,r,function(){return this}),Pi(f,"toString",function(){return"[object Generator]"}),(Ni=function(){return{w:a,m:p}})()}function Pi(e,t,n,r){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}Pi=function(e,t,n,r){function a(t,n){Pi(e,t,function(e){return this._invoke(t,n,e)})}t?o?o(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(a("next",0),a("throw",1),a("return",2))},Pi(e,t,n,r)}function qi(e,t,n,r,o,a,i){try{var u=e[a](i),s=u.value}catch(e){return void n(e)}u.done?t(s):Promise.resolve(s).then(r,o)}var zi="code.language-math:not([data-gfmr-math-processed]), pre.language-math > code:not([data-gfmr-math-processed])",$i=[/\$\$[\s\S]+?\$\$/,/(?<!\$)\$(?!\$)[^$\n]+\$(?!\$)/,/\\\([^)]+\\\)/,/\\\[[\s\S]+?\\\]/,/\[latex\][\s\S]*?\[\/latex\]/i],Gi=function(e){var t;if("function"==typeof window.wpGfmBuildAssetUrl)return window.wpGfmBuildAssetUrl(e);var n=(null===(t=window.wpGfmConfig)||void 0===t?void 0:t.pluginUrl)||"/wp-content/plugins/markdown-renderer-for-github/";return"".concat(n.replace(/\/+$/,""),"/").concat(e.replace(/^\/+/,""))},Ui=function(e,t){var n=null==e?void 0:e.ownerDocument;if(!e||!n)return[];for(var r,o=n.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode:function(e){return function(e){var t;return Boolean(null===(t=e.parentElement)||void 0===t?void 0:t.closest("code, pre, style, script, svg, math, textarea, noscript, .katex, .gfmr-math"))}(e)?NodeFilter.FILTER_REJECT:t(e.textContent)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}}),a=[];null!==(r=o.nextNode());)a.push(r);return a},Hi=function(e,t,n,r){var o,a=n.tagName,i=n.className,u=n.displayMode,s=e.textContent,l=e.ownerDocument,c=[],f=0,p=0;for(t.lastIndex=0;null!==(o=t.exec(s));){o.index>f&&c.push(l.createTextNode(s.slice(f,o.index)));var d=l.createElement(a);d.className=i;try{r.render(o[1].trim(),d,{displayMode:u,throwOnError:!1,output:"html"})}catch(e){console.warn("[WP GFM Editor] KaTeX render error:",e),d.textContent=o[0]}c.push(d),f=t.lastIndex,p++}return 0===p?0:(f<s.length&&c.push(l.createTextNode(s.slice(f))),c.forEach(function(t){e.parentNode.insertBefore(t,e)}),e.parentNode.removeChild(e),p)},Wi=function(e,t){var n=e.querySelectorAll(zi),r=e.ownerDocument||window.document,o=0;return n.forEach(function(e){e.setAttribute("data-gfmr-math-processed","true");var n=(e.textContent||"").trim();if(n){var a=r.createElement("div");a.className="gfmr-math gfmr-math-block";try{t.render(n,a,{displayMode:!0,throwOnError:!1,output:"html"})}catch(e){console.warn("[WP GFM Editor] KaTeX fence render error:",e),a.textContent=n}var i=e.closest("pre")||e;i.parentNode&&(i.parentNode.replaceChild(a,i),o++)}}),o},Zi=function(e){var t;return!!e&&(!(null===(t=e.querySelector)||void 0===t||!t.call(e,zi))||Ui(e,function(e){return $i.some(function(t){return t.test(e)})}).length>0)},Vi=function(e){var t=e||("undefined"!=typeof window?window.document:null);if(!t)return Promise.resolve(!1);var n=Qo(t);return za(n,{presentProp:"katex",promiseProp:"__gfmrKaTeXLoadPromise",inject:function(){return new Promise(function(e){if(!t.querySelector('link[href*="katex"]')){var n=t.createElement("link");n.rel="stylesheet",n.href=Gi("assets/libs/katex/katex.min.css"),t.head.appendChild(n)}var r=t.createElement("script");r.src=Gi("assets/libs/katex/katex.min.js"),r.onload=function(){return e(!0)},r.onerror=function(t){console.warn("[WP GFM Editor] Failed to load KaTeX:",t),e(!1)},t.head.appendChild(r)}).then(function(){return Boolean(n.katex)})}})},Ki=function(){var e,t=(e=Ni().m(function e(t){var n,r,o,a;return Ni().w(function(e){for(;;)switch(e.n){case 0:if(Zi(t)){e.n=1;break}return e.a(2,0);case 1:return n=t.ownerDocument||window.document,e.n=2,Vi(n);case 2:if(r=e.v,o=Qo(n),r&&o.katex){e.n=3;break}return e.a(2,0);case 3:return a=0,a+=Wi(t,o.katex),Ui(t,function(e){return/\$\$[\s\S]+?\$\$/.test(e)}).forEach(function(e){a+=Hi(e,/\$\$([\s\S]+?)\$\$/g,{tagName:"div",className:"gfmr-math gfmr-math-block",displayMode:!0},o.katex)}),Ui(t,function(e){return/(?<!\$)\$(?!\$)[^$\n]+\$(?!\$)/.test(e)}).forEach(function(e){a+=Hi(e,/(?<!\$)\$(?!\$)([^$\n]+)\$(?!\$)/g,{tagName:"span",className:"gfmr-math gfmr-math-inline",displayMode:!1},o.katex)}),Ui(t,function(e){return/\\\([^)]+\\\)/.test(e)}).forEach(function(e){a+=Hi(e,/\\\(([^)]+)\\\)/g,{tagName:"span",className:"gfmr-math gfmr-math-inline",displayMode:!1},o.katex)}),Ui(t,function(e){return/\\\[[\s\S]+?\\\]/.test(e)}).forEach(function(e){a+=Hi(e,/\\\[([\s\S]+?)\\\]/g,{tagName:"div",className:"gfmr-math gfmr-math-block",displayMode:!0},o.katex)}),Ui(t,function(e){return/\[latex\][\s\S]*?\[\/latex\]/i.test(e)}).forEach(function(e){a+=Hi(e,/\[latex\]([\s\S]*?)\[\/latex\]/gi,{tagName:"span",className:"gfmr-math gfmr-math-shortcode",displayMode:!1},o.katex)}),e.a(2,a)}},e)}),function(){var t=this,n=arguments;return new Promise(function(r,o){var a=e.apply(t,n);function i(e){qi(a,r,o,i,u,"next",e)}function u(e){qi(a,r,o,i,u,"throw",e)}i(void 0)})});return function(_x){return t.apply(this,arguments)}}();function Yi(e){return function(e){if(Array.isArray(e))return Qi(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Xi(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ji(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,u=[],s=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(u.push(r.value),u.length!==t);s=!0);}catch(e){l=!0,o=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw o}}return u}}(e,t)||Xi(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Xi(e,t){if(e){if("string"==typeof e)return Qi(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Qi(e,t):void 0}}function Qi(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function eu(e){var t=e.onAdd,n=e.onClose,r=e.existingLanguages,o=Ji((0,l.useState)(""),2),a=o[0],u=o[1],c=Ji((0,l.useState)(""),2),f=c[0],p=c[1],d=Ji((0,l.useState)(""),2),h=d[0],m=d[1],g=Ji((0,l.useState)(""),2),_=g[0],b=g[1],y=Je.filter(function(e){return!r.includes(e.value)});return React.createElement(s.Modal,{title:(0,i.__)("Add Language","markdown-renderer-for-github"),onRequestClose:n,className:"gfmr-add-language-modal"},React.createElement("div",{style:{minWidth:"300px"}},React.createElement(s.SelectControl,{label:(0,i.__)("Language","markdown-renderer-for-github"),value:a,options:[{value:"",label:(0,i.__)("Select...","markdown-renderer-for-github")}].concat(Yi(y),[{value:"custom",label:(0,i.__)("Other (enter code)","markdown-renderer-for-github")}]),onChange:function(e){u(e),b("")}}),"custom"===a&&React.createElement(s.TextControl,{label:(0,i.__)("Language Code (e.g., pt, nl, ar)","markdown-renderer-for-github"),value:f,onChange:function(e){p(e),b("")},maxLength:5,help:(0,i.__)('Use ISO 639-1 format (2 letters, e.g., "pt" for Portuguese)',"markdown-renderer-for-github")}),r.length>0&&React.createElement(s.SelectControl,{label:(0,i.__)("Copy content from","markdown-renderer-for-github"),value:h,options:[{value:"",label:(0,i.__)("Start empty","markdown-renderer-for-github")}].concat(Yi(r.map(function(e){return{value:e,label:e.toUpperCase()}}))),onChange:m}),_&&React.createElement("p",{style:{color:"#d63638",marginTop:"8px"}},_),React.createElement("div",{style:{marginTop:"16px",display:"flex",gap:"8px",justifyContent:"flex-end"}},React.createElement(s.Button,{variant:"secondary",onClick:n},(0,i.__)("Cancel","markdown-renderer-for-github")),React.createElement(s.Button,{variant:"primary",onClick:function(){var e="custom"===a?f.toLowerCase().trim():a;e?Xe(e)?r.includes(e)?b((0,i.__)("This language already exists","markdown-renderer-for-github")):t(e,h):b((0,i.__)("Invalid language code format","markdown-renderer-for-github")):b((0,i.__)("Please select a language","markdown-renderer-for-github"))}},(0,i.__)("Add","markdown-renderer-for-github")))))}function tu(e){return function(e){if(Array.isArray(e))return du(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||pu(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function nu(e){return nu="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},nu(e)}function ru(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",o=n.toStringTag||"@@toStringTag";function a(n,r,o,a){var s=r&&r.prototype instanceof u?r:u,l=Object.create(s.prototype);return ou(l,"_invoke",function(n,r,o){var a,u,s,l=0,c=o||[],f=!1,p={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,n){return a=t,u=0,s=e,p.n=n,i}};function d(n,r){for(u=n,s=r,t=0;!f&&l&&!o&&t<c.length;t++){var o,a=c[t],d=p.p,h=a[2];n>3?(o=h===r)&&(s=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=e):a[0]<=d&&((o=n<2&&d<a[1])?(u=0,p.v=r,p.n=a[1]):d<h&&(o=n<3||a[0]>r||r>h)&&(a[4]=n,a[5]=r,p.n=h,u=0))}if(o||n>1)return i;throw f=!0,r}return function(o,c,h){if(l>1)throw TypeError("Generator is already running");for(f&&1===c&&d(c,h),u=c,s=h;(t=u<2?e:s)||!f;){a||(u?u<3?(u>1&&(p.n=-1),d(u,s)):p.n=s:p.v=s);try{if(l=2,a){if(u||(o="next"),t=a[o]){if(!(t=t.call(a,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,u<2&&(u=0)}else 1===u&&(t=a.return)&&t.call(a),u<2&&(s=TypeError("The iterator does not provide a '"+o+"' method"),u=1);a=e}else if((t=(f=p.n<0)?s:n.call(r,p))!==i)break}catch(t){a=e,u=1,s=t}finally{l=1}}return{value:t,done:f}}}(n,o,a),!0),l}var i={};function u(){}function s(){}function l(){}t=Object.getPrototypeOf;var c=[][r]?t(t([][r]())):(ou(t={},r,function(){return this}),t),f=l.prototype=u.prototype=Object.create(c);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,ou(e,o,"GeneratorFunction")),e.prototype=Object.create(f),e}return s.prototype=l,ou(f,"constructor",l),ou(l,"constructor",s),s.displayName="GeneratorFunction",ou(l,o,"GeneratorFunction"),ou(f),ou(f,o,"Generator"),ou(f,r,function(){return this}),ou(f,"toString",function(){return"[object Generator]"}),(ru=function(){return{w:a,m:p}})()}function ou(e,t,n,r){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}ou=function(e,t,n,r){function a(t,n){ou(e,t,function(e){return this._invoke(t,n,e)})}t?o?o(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(a("next",0),a("throw",1),a("return",2))},ou(e,t,n,r)}function au(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function iu(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?au(Object(n),!0).forEach(function(t){uu(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):au(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function uu(e,t,n){return(t=su(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function su(e){var t=function(e){if("object"!=nu(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=nu(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==nu(t)?t:t+""}function lu(e,t,n,r,o,a,i){try{var u=e[a](i),s=u.value}catch(e){return void n(e)}u.done?t(s):Promise.resolve(s).then(r,o)}function cu(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var a=e.apply(t,n);function i(e){lu(a,r,o,i,u,"next",e)}function u(e){lu(a,r,o,i,u,"throw",e)}i(void 0)})}}function fu(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,u=[],s=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=a.call(n)).done)&&(u.push(r.value),u.length!==t);s=!0);}catch(e){l=!0,o=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw o}}return u}}(e,t)||pu(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function pu(e,t){if(e){if("string"==typeof e)return du(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?du(e,t):void 0}}function du(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var hu=function(e){var t,n=(null===(t=window.wpGfmConfig)||void 0===t?void 0:t.codeFeatures)||{},r="on"===e||"off"!==e&&!!n.lineNumbersDefault;return{showLineNumbers:!!n.lineNumbers&&r,advancedSyntax:!!n.advancedSyntax,collapseLines:n.collapseLines,labels:n.labels}},mu=["content","html"];function gu(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function _u(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?gu(Object(n),!0).forEach(function(t){bu(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):gu(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function bu(e,t,n){return(t=function(e){var t=function(e){if("object"!=yu(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=yu(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==yu(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function yu(e){return yu="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yu(e)}const Du=[{attributes:{content:{type:"string",default:""},html:{type:"string",default:""},mermaidBgColor:{type:"string",default:"transparent"},shikiTheme:{type:"string",default:""},showFrontmatter:{type:"boolean",default:!1},frontmatterData:{type:"object",default:{}}},isEligible:function(e){var t=!e.languages||"object"===yu(e.languages)&&0===Object.keys(e.languages).length,n=e.content||e.html;return t&&n},save:function(e){var t=e.attributes,n=t.content,r=t.html,o=t.mermaidBgColor,a=t.shikiTheme,i=(t.showFrontmatter,o||"transparent"),s=a||"",l=u.useBlockProps.save({className:"gfmr-markdown-container"});return React.createElement("div",l,React.createElement("div",{className:"gfmr-markdown-source",style:{display:"none",visibility:"hidden",position:"absolute",left:"-9999px",top:"-9999px",width:"1px",height:"1px",overflow:"hidden"},"aria-hidden":"true"},n),React.createElement("div",{className:"gfmr-markdown-rendered","data-mermaid-bg-color":i,"data-shiki-theme":s,dangerouslySetInnerHTML:{__html:r||""}}))},migrate:function(e){var t,n="undefined"!=typeof window&&(null===(t=window.wpGfmConfig)||void 0===t?void 0:t.siteLanguage)||"en",r=e.content,o=e.html,a=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,mu);return"undefined"!=typeof window&&window.WP_DEBUG&&console.log("[GFMR] Migrating block to multilingual format:",{defaultLang:n,contentLength:(r||"").length}),_u(_u({},a),{},{content:r||"",html:o||"",languages:bu({},n,{content:r||"",html:o||""}),defaultLanguage:n,availableLanguages:[n],showLanguageSwitcher:!1})}},{attributes:{content:{type:"string",default:""},html:{type:"string",default:""},mermaidBgColor:{type:"string",default:"transparent"},shikiTheme:{type:"string",default:""},showFrontmatter:{type:"boolean",default:!1,source:"attribute",selector:".gfmr-markdown-rendered",attribute:"data-show-frontmatter"},frontmatterData:{type:"object",default:{}}},save:function(e){var t=e.attributes,n=t.content,r=t.html,o=t.mermaidBgColor,a=t.shikiTheme,i=t.showFrontmatter,s=void 0!==i&&i,l=(t.frontmatterData,o||"transparent"),c=a||"",f=u.useBlockProps.save({className:"gfmr-markdown-container"});return React.createElement("div",f,React.createElement("div",{className:"gfmr-markdown-source",style:{display:"none",visibility:"hidden",position:"absolute",left:"-9999px",top:"-9999px",width:"1px",height:"1px",overflow:"hidden"},"aria-hidden":"true"},n),React.createElement("div",{className:"gfmr-markdown-rendered","data-mermaid-bg-color":l,"data-shiki-theme":c,"data-show-frontmatter":s,dangerouslySetInnerHTML:{__html:r||""}}))},migrate:function(e){return{content:e.content||"",html:e.html||"",mermaidBgColor:e.mermaidBgColor||"transparent",shikiTheme:e.shikiTheme||"",showFrontmatter:e.showFrontmatter||!1,frontmatterData:e.frontmatterData||{}}}},{attributes:{content:{type:"string",default:""},html:{type:"string",default:""},mermaidBgColor:{type:"string",default:"transparent"},shikiTheme:{type:"string",default:""}},save:function(e){var t=e.attributes,n=t.content,r=t.html,o=t.mermaidBgColor||"transparent",a=t.shikiTheme||"",i=u.useBlockProps.save({className:"gfmr-markdown-container"});return React.createElement("div",i,React.createElement("div",{className:"gfmr-markdown-source",style:{display:"none",visibility:"hidden",position:"absolute",left:"-9999px",top:"-9999px",width:"1px",height:"1px",overflow:"hidden"},"aria-hidden":"true"},n),React.createElement("div",{className:"gfmr-markdown-rendered","data-mermaid-bg-color":o,"data-shiki-theme":a,dangerouslySetInnerHTML:{__html:r||""}}))},migrate:function(e){return{content:e.content||"",html:e.html||"",mermaidBgColor:e.mermaidBgColor||"transparent",shikiTheme:e.shikiTheme||"",showFrontmatter:!1,frontmatterData:{}}}},{attributes:{content:{type:"string",default:""},html:{type:"string",default:""},mermaidBgColor:{type:"string",default:"transparent"}},save:function(e){var t=e.attributes,n=t.content,r=t.html,o=t.mermaidBgColor||"transparent",a=u.useBlockProps.save({className:"gfmr-markdown-container"});return React.createElement("div",a,React.createElement("div",{className:"gfmr-markdown-source",style:{display:"none",visibility:"hidden",position:"absolute",left:"-9999px",top:"-9999px",width:"1px",height:"1px",overflow:"hidden"},"aria-hidden":"true"},n),React.createElement("div",{className:"gfmr-markdown-rendered","data-mermaid-bg-color":o,dangerouslySetInnerHTML:{__html:r||""}}))},migrate:function(e){return{content:e.content||"",html:e.html||"",mermaidBgColor:e.mermaidBgColor||"transparent",shikiTheme:""}}},{attributes:{content:{type:"string",default:""},html:{type:"string",default:""}},save:function(e){var t=e.attributes,n=t.content,r=t.html,o=u.useBlockProps.save({className:"gfmr-markdown-container"});return React.createElement("div",o,React.createElement("div",{className:"gfmr-markdown-source",style:{display:"none",visibility:"hidden",position:"absolute",left:"-9999px",top:"-9999px",width:"1px",height:"1px",overflow:"hidden"},"aria-hidden":"true"},n),React.createElement("div",{className:"gfmr-markdown-rendered",dangerouslySetInnerHTML:{__html:r||""}}))},migrate:function(e){return{content:e.content||"",html:e.html||"",mermaidBgColor:"transparent",shikiTheme:""}}},{attributes:{content:{type:"string",default:""},html:{type:"string",default:""}},save:function(e){var t=e.attributes,n=t.content,r=t.html,o=u.useBlockProps.save({className:"gfmr-markdown-container"});return React.createElement("div",o,React.createElement("div",{className:"gfmr-markdown-source",style:{display:"none"}},n),React.createElement("div",{className:"gfmr-markdown-rendered",dangerouslySetInnerHTML:{__html:r||""}}))},migrate:function(e){return{content:e.content||"",html:e.html||"",mermaidBgColor:"transparent",shikiTheme:""}}}],ku=JSON.parse('{"UU":"gfm-renderer/markdown"}');(0,a.registerBlockType)(ku.UU,{title:(0,i.__)("Markdown","markdown-renderer-for-github"),description:(0,i.__)("Write in GitHub Flavored Markdown with real-time preview.","markdown-renderer-for-github"),category:"text",icon:{src:"editor-code",foreground:"#007cba"},keywords:[(0,i.__)("markdown","markdown-renderer-for-github"),(0,i.__)("gfm","markdown-renderer-for-github"),(0,i.__)("github","markdown-renderer-for-github"),(0,i.__)("code","markdown-renderer-for-github")],example:{attributes:{content:'# Heading 1\n\n**Bold** text and *italic* text.\n\n- List item 1\n- List item 2\n\n```javascript\nconst greeting = "Hello, World!";\nconsole.log(greeting);\n```'}},supports:{html:!1,className:!0,customClassName:!0},edit:function(e){var t,n,r,o,a,p,d=e.attributes,h=e.setAttributes,m=d.content,g=d.html,_=d.mermaidBgColor,b=d.showFrontmatter,y=void 0!==b&&b,D=(d.frontmatterData,d.languages),k=void 0===D?{}:D,w=d.defaultLanguage,v=void 0===w?"en":w,F=d.availableLanguages,C=void 0===F?[]:F,E=d.showLanguageSwitcher,A=void 0===E||E,x=d.codeLineNumbers,S=void 0===x?"default":x,B=fu((0,l.useState)(!1),2),T=B[0],L=B[1],j=fu((0,l.useState)(g||""),2),M=j[0],O=j[1],I=fu((0,l.useState)(null),2),R=I[0],N=I[1],P=fu((0,l.useState)(!1),2),q=P[0],z=P[1],$=(0,l.useRef)(null),G=(0,l.useRef)(null),U=(0,l.useRef)(null),H=(0,l.useRef)(null),W=(0,l.useRef)(null),Z=(0,l.useRef)(bi()),V=(0,l.useRef)(bi()),K=(0,l.useRef)(bi()),Y=(0,l.useRef)(!1),J=(0,l.useRef)(""),X=(0,l.useRef)(!1),Q=(0,l.useRef)(m);(0,l.useEffect)(function(){Q.current=m},[m]);var ee=(0,l.useRef)(k);(0,l.useEffect)(function(){ee.current=k},[k]);var te=(0,l.useRef)(0),ne=(0,l.useRef)(new Set),re=(0,l.useRef)(_),oe=fu((0,l.useState)(v),2),ae=oe[0],ie=oe[1],ue=fu((0,l.useState)(!1),2),se=ue[0],le=ue[1],ce=C.length>0||Object.keys(k).length>0;(0,l.useEffect)(function(){var e,t;if(!(C.length>0||Object.keys(k).length>0||"en"!==v||m||g)){var n=(null===(e=window.wpGfmConfig)||void 0===e?void 0:e.defaultBlockLanguage)||(null===(t=window.wpGfmConfig)||void 0===t?void 0:t.siteLanguage);n&&/^[a-z]{2,3}(-[A-Z]{2})?$/.test(n)&&n!==v&&(h({defaultLanguage:n}),ie(n))}},[]),(0,l.useEffect)(function(){var e=Object.keys(k);if(e.length>0&&(0===C.length||!e.every(function(e){return C.includes(e)}))){var t=e.includes(v)?v:e[0];h({availableLanguages:e,defaultLanguage:t,showLanguageSwitcher:e.length>1}),ie(t)}},[k]);var fe=(0,l.useCallback)(function(){return ce&&k[ae]?k[ae].content||"":m||""},[ce,k,ae,m]),pe=((0,l.useCallback)(function(){return ce&&k[ae]?k[ae].html||"":g||""},[ce,k,ae,g]),null===(t=null===(n=window.wpGfmConfig)||void 0===n||null===(n=n.features)||void 0===n?void 0:n.imageInsert)||void 0===t||t),de=(null===(r=window.wpGfmConfig)||void 0===r?void 0:r.metaDescription)||{},he=!!de.enabled,me=de.metaKey||"_gfmr_meta_descriptions",ge=Array.isArray(de.postTypes)?de.postTypes:["post","page"],_e=(0,c.useSelect)(function(e){return!1!==e("core").canUser("create","media")},[]),be=(0,c.useDispatch)("core/notices"),ye=be.createErrorNotice,De=be.createWarningNotice,ke=(0,c.useSelect)(function(e){var t=e("core"),n={per_page:100,hide_empty:!1,orderby:"name",order:"asc"};return{categoryTerms:t.getEntityRecords("taxonomy","category",n)||[],tagTerms:t.getEntityRecords("taxonomy","post_tag",n)||[]}},[]),we=ke.categoryTerms,ve=ke.tagTerms,Fe=(0,c.useSelect)(function(e){var t=e("core"),n={};return Object.keys(k).forEach(function(e){var r,o=null===(r=k[e])||void 0===r?void 0:r.featuredImage;o&&(n[e]=t.getEntityRecord("root","media",o))}),n},[k]),Ce=(0,c.useSelect)(function(e){var t=e("core/editor");return t?t.getCurrentPostType():null},[]),Ee=(0,c.useSelect)(function(e){var t=e("core/editor");return t&&t.getEditedPostAttribute("meta")||{}},[]),Ae=(0,c.useDispatch)("core/editor").editPost,xe=Pa(Ee,me),Se=he&&-1!==ge.indexOf(Ce),Be=(0,c.useSelect)(function(e){var t=e("core/editor"),n=t&&t.getEditedPostAttribute("featured_media")||0;return n?e("core").getEntityRecord("root","media",n):null},[]),Te=Be&&((null===(o=Be.media_details)||void 0===o||null===(o=o.sizes)||void 0===o||null===(o=o.thumbnail)||void 0===o?void 0:o.source_url)||Be.source_url)||"",Le=(0,l.useCallback)(function(e,t){var n="error"===e?ye:De;"function"==typeof n?n(t,{type:"snackbar",isDismissible:!0}):console.warn("[handlePaste]",t)},[ye,De]),je=(0,l.useCallback)(function(){var e=cu(ru().m(function e(t){var n,r,o;return ru().w(function(e){for(;;)switch(e.p=e.n){case 0:if(!ce){e.n=5;break}return n=iu(iu({},k),{},uu({},ae,iu(iu({},k[ae]||{}),{},{content:t}))),h({languages:n}),e.p=1,e.n=2,Ge(t,ae,n);case 2:e.n=4;break;case 3:e.p=3,r=e.v,console.warn("[updateContentWithRender] Render failed:",r.message);case 4:e.n=9;break;case 5:return h({content:t}),e.p=6,e.n=7,qe(t);case 7:e.n=9;break;case 8:e.p=8,o=e.v,console.warn("[updateContentWithRender] Render failed:",o.message);case 9:return e.a(2)}},e,null,[[6,8],[1,3]])}));return function(_x){return e.apply(this,arguments)}}(),[ce,k,ae,h,qe,Ge]),Me=(0,l.useCallback)(function(){var e=cu(ru().m(function e(t){var n,r,o,a,i,u,s;return ru().w(function(e){for(;;)switch(e.n){case 0:if(n=Array.isArray(t)?t[0]:t){e.n=1;break}return console.warn("[handleImageInsert] No media selected"),e.a(2);case 1:if(r=yt(n)){e.n=2;break}return console.warn("[handleImageInsert] Invalid or missing URL. Media ID:",null==n?void 0:n.id),e.a(2);case 2:return T&&L(!1),o=fe(),a=$.current,i=G.current,s=o&&o.length>0?"\n":"",u=i&&i.start>=0?o.substring(0,i.start)+r+o.substring(i.end):o+s+r,e.n=3,je(u);case 3:G.current=null,setTimeout(function(){if(a){try{a.focus({preventScroll:!0})}catch(e){console.warn("preventScroll not supported, using fallback:",e),a.focus()}var e=i&&i.start>=0?i.start+r.length:u.length;a.setSelectionRange(e,e)}},0);case 4:return e.a(2)}},e)}));return function(t){return e.apply(this,arguments)}}(),[h,T,L,fe,je]),Oe=(0,l.useMemo)(function(){var e,t,n,r,o=null!==(e=null===(t=window.wpGfmConfig)||void 0===t||null===(t=t.theme)||void 0===t?void 0:t.shiki_theme)&&void 0!==e?e:null!==(n=(r=window).matchMedia)&&void 0!==n&&n.call(r,"(prefers-color-scheme: dark)").matches?"github-dark":"github-light";return"auto"===o&&(o=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"github-dark":"github-light"),"github-dark"===o?"gfmr-dark":"gfmr-light"},[]);(0,l.useEffect)(function(){var e,t;m||!1!==y||null!==(e=null===(t=window.wpGfmConfig)||void 0===t||null===(t=t.frontmatter)||void 0===t?void 0:t.showHeader)&&void 0!==e&&e&&h({showFrontmatter:!0})},[]);var Ie=(0,l.useCallback)(function(){var e,t=Xo(U)||Xo($),n=Qo(t);return za(n,{presentProp:"mermaid",promiseProp:"__gfmrMermaidLoadPromise",inject:(e=cu(ru().m(function e(){var r,o,a;return ru().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,(o=t.createElement("script")).src=window.wpGfmBuildAssetUrl?window.wpGfmBuildAssetUrl("assets/libs/mermaid/mermaid.min.js"):((null===(r=window.wpGfmConfig)||void 0===r?void 0:r.pluginUrl)||"")+"/assets/libs/mermaid/mermaid.min.js",o.async=!0,e.n=1,new Promise(function(e,n){o.onload=e,o.onerror=n,t.head.appendChild(o)});case 1:if(!n.mermaid){e.n=4;break}if(!window.wpGfmInitializeMermaidUnified){e.n=3;break}return e.n=2,window.wpGfmInitializeMermaidUnified(!0);case 2:if(!e.v){e.n=3;break}return e.a(2,!0);case 3:return n.mermaid.initialize({startOnLoad:!1,theme:gi(),securityLevel:"loose",fontFamily:"monospace",themeVariables:{background:"transparent"},flowchart:{useMaxWidth:!1,htmlLabels:!0,curve:"basis"},sequence:{useMaxWidth:!0,height:65},class:{useMaxWidth:!0},state:{useMaxWidth:!1},er:{useMaxWidth:!1},gantt:{useMaxWidth:!0},gitGraph:{useMaxWidth:!1,mainLineWidth:2,mainBranchOrder:0}}),e.a(2,!0);case 4:e.n=6;break;case 5:e.p=5,a=e.v,console.error("[WP GFM Editor] Failed to load Mermaid:",a);case 6:return e.a(2,!1)}},e,null,[[0,5]])})),function(){return e.apply(this,arguments)})})},[]),Re=(0,l.useCallback)(function(){var e=cu(ru().m(function e(t){var n,r,o,a=arguments;return ru().w(function(e){for(;;)switch(e.p=e.n){case 0:if(n=a.length>1&&void 0!==a[1]?a[1]:null,dt("processMermaidBlocks called, container:",null==t?void 0:t.tagName,null==t?void 0:t.className),t){e.n=1;break}return ht("No container provided for Mermaid processing"),e.a(2);case 1:if(!window.wpGfmProcessMermaidBlocksUnified){e.n=7;break}return dt("Using unified Mermaid processing for editor"),e.p=2,e.n=3,Ie();case 3:if(e.v){e.n=4;break}return ht("Mermaid not available, skipping processing"),e.a(2);case 4:return e.n=5,window.wpGfmProcessMermaidBlocksUnified(t,"editor");case 5:return r=e.v,dt("✅ Unified Mermaid processing completed: ".concat(r," blocks processed")),e.a(2,r);case 6:e.p=6,o=e.v,console.error("[WP GFM Editor] Unified Mermaid processing failed:",o);case 7:return e.a(2,Mi(t,Ie,"editor",n,V.current))}},e,null,[[2,6]])}));return function(t){return e.apply(this,arguments)}}(),[Ie]);(0,l.useEffect)(function(){H.current=Re},[Re]);var Ne=(0,l.useCallback)(function(){var e=cu(ru().m(function e(t,n){return ru().w(function(e){for(;;)if(0===e.n)return e.a(2,Ri(t,n,Z.current))},e)}));return function(t,n){return e.apply(this,arguments)}}(),[]);(0,l.useEffect)(function(){W.current=Ne},[Ne]);var Pe=(0,l.useCallback)(function(){if(!T){var e=function(e){var t={mermaid:!1,chart:!1,plantuml:!1};if(!e||"string"!=typeof e)return t;for(var n,r=/(?:^|\n)[ \t]*(?:`{3,}|~{3,})[ \t]*([a-zA-Z0-9_-]+)/g;null!==(n=r.exec(e));){var o=Ai[n[1].toLowerCase()];o&&(t[o]=!0)}return t}(ce?Object.values(k).map(function(e){return(null==e?void 0:e.content)||""}).join("\n"):m||"");if((e.mermaid||e.chart)&&(e.mermaid&&Ie(),e.chart)){var t=Xo(U)||Xo($);t&&Ei(t)}}},[T,ce,k,m,Ie]);(0,l.useEffect)(function(){if(!q){var e=Xo($)||Xo(U);xa(e).then(function(e){e&&(z(!0),console.log("[WP GFM Editor] Shiki initialized for editor"),m&&qe(m))}).catch(function(e){console.warn("[WP GFM Editor] Shiki initialization failed:",e)})}},[]),(0,l.useEffect)(function(){m&&qe(m)},[]),(0,l.useEffect)(function(){m&&qe(m)},[y]);var qe=(0,l.useCallback)(function(){var e=cu(ru().m(function e(t){var n,r,o,a,i,u,s,l,c,f,p,d,m,g;return ru().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t){e.n=1;break}return O(""),h({html:"",shikiTheme:"",frontmatterData:{},renderedDiagramsHtml:""}),N(null),e.a(2);case 1:if(e.p=1,i=Ze(t),u=i.frontmatter,s=i.body,h({frontmatterData:u}),q||Sa()){e.n=3;break}return e.n=2,xa(Xo($)||Xo(U));case 2:z(!0);case 3:l=ya(),window.wpGfmRenderWithIndentPreprocessing?(console.log("[WP GFM Editor] Using indent block preprocessing for editor"),c=window.wpGfmRenderWithIndentPreprocessing(s,l)):(console.warn("[WP GFM Editor] Indent preprocessor not available, using fallback"),c=l.render(s)),f=y?Ve(u):"",p=Li(p=f+c),p=la(p,hu(S)),"auto"===(d=null!==(n=null===(r=window.wpGfmConfig)||void 0===r||null===(r=r.theme)||void 0===r?void 0:r.shiki_theme)&&void 0!==n?n:null!==(o=(a=window).matchMedia)&&void 0!==o&&o.call(a,"(prefers-color-scheme: dark)").matches?"github-dark":"github-light")&&(m=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches,d=m?"github-dark":"github-light"),O(p),h({html:p,shikiTheme:d}),J.current!==p&&(N(null),h({renderedDiagramsHtml:""}),J.current=p),e.n=5;break;case 4:e.p=4,g=e.v,console.error("[WP GFM Renderer] Rendering error:",g),O("<p>An error occurred while rendering Markdown</p>"),N(null);case 5:return e.a(2)}},e,null,[[1,4]])}));return function(t){return e.apply(this,arguments)}}(),[q,y,O,N]);(0,l.useEffect)(function(){var e=!1,t=null,n=null;if(dt("🔍 useEffect triggered:",{isPreview:T,renderedHtml:!!M,previewRefExists:!!U.current}),T&&M&&U.current){n=new AbortController,dt("✅ All conditions met for diagram processing");var r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.container,n=e.isPreviewSwitch,r=void 0!==n&&n,o=e.shikiLoaded,a=void 0===o||o,i=e.caches,u=void 0===i?{}:i,s=e.debounceDelay,l=void 0===s?400:s,c=e.immediateDelay,f=void 0===c?0:c;return a&&(r||function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e)return!1;var n=function(e){var t,n={mermaid:[],chart:[],plantuml:[]};if(!e)return n;var r,o=li(Fi(e));try{for(o.s();!(r=o.n()).done;){var a=r.value,i=Ti(a).trim();i&&n.mermaid.push(_i(i))}}catch(e){o.e(e)}finally{o.f()}var u,s=li(e.querySelectorAll(Ci));try{for(s.s();!(u=s.n()).done;){var l=u.value;n.chart.push(Bi(l))}}catch(e){s.e(e)}finally{s.f()}var c,f=li(ki(e,it,ut,vi));try{for(f.s();!(c=f.n()).done;){var p=c.value,d=Si(p).trim();d&&_t(d)&&n.plantuml.push(d)}}catch(e){f.e(e)}finally{f.f()}if(!1!==(null===(t=window.wpGfmConfig)||void 0===t||null===(t=t.plantuml)||void 0===t?void 0:t.c4Enabled)){var h,m=li(e.querySelectorAll(lt));try{for(m.s();!(h=m.n()).done;){var g=h.value,_=Si(g).trim();_&&n.plantuml.push("".concat(ct(g)||"c4","\n").concat(_))}}catch(e){m.e(e)}finally{m.f()}}return n}(e);if(0===n.mermaid.length&&0===n.chart.length&&0===n.plantuml.length)return!0;var r=function(e,t){return t.every(function(t){return!!e&&e.has(t)})};return r(t.mermaid,n.mermaid)&&r(t.chart,n.chart)&&r(t.plantuml,n.plantuml)}(t,u))?f:l}({container:U.current,isPreviewSwitch:T&&!X.current,shikiLoaded:q,caches:{mermaid:V.current,chart:K.current,plantuml:Z.current}});dt("⏱️ Diagram processing delay: ".concat(r,"ms")),t=setTimeout(cu(ru().m(function t(){var r,o,a,i,u,s,l,c,f,p,d,m,g,_;return ru().w(function(t){for(;;)switch(t.p=t.n){case 0:if(!e&&!Y.current){t.n=1;break}return dt("⏭️ Skipping: cleanup=",e,"isDiagramProcessing=",Y.current),t.a(2);case 1:if(Y.current=!0,dt("⏰ previewRef.current exists in setTimeout:",!!U.current),t.p=2,!U.current||!H.current){t.n=4;break}return dt("🎯 previewRef.current type:",nu(U.current)),dt("🎯 previewRef.current tagName:",null===(r=U.current)||void 0===r?void 0:r.tagName),dt("🎯 previewRef.current innerHTML length:",(null===(o=U.current)||void 0===o||null===(o=o.innerHTML)||void 0===o?void 0:o.length)||0),a=cu(ru().m(function e(){var t,n;return ru().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,H.current(U.current,re.current);case 1:return t=e.v,dt("🎯 processMermaidBlocks call completed successfully, result:",t),e.a(2,t||0);case 2:return e.p=2,n=e.v,console.error("[WP GFM Editor] ❌ processMermaidBlocks error:",n),e.a(2,0)}},e,null,[[0,2]])}))(),i=cu(ru().m(function t(){var r,o;return ru().w(function(t){for(;;)switch(t.p=t.n){case 0:if(!e&&U.current&&W.current){t.n=1;break}return t.a(2,0);case 1:return t.p=1,t.n=2,W.current(U.current,n.signal);case 2:return r=t.v,dt("[PlantUML] Processing completed, result:",r),t.a(2,r||0);case 3:return t.p=3,"AbortError"!==(o=t.v).name&&console.warn("[WP GFM Editor] PlantUML processing error:",o),t.a(2,0)}},t,null,[[1,3]])}))(),u=cu(ru().m(function t(){var n,r;return ru().w(function(t){for(;;)switch(t.p=t.n){case 0:if(!e&&U.current){t.n=1;break}return t.a(2,0);case 1:return t.p=1,t.n=2,ji(U.current,void 0,K.current);case 2:return n=t.v,dt("[Chart.js] Processing completed, result:",n),t.a(2,n||0);case 3:return t.p=3,r=t.v,console.warn("[WP GFM Editor] Chart processing error:",r),t.a(2,0)}},t,null,[[1,3]])}))(),s=cu(ru().m(function t(){var n,r;return ru().w(function(t){for(;;)switch(t.p=t.n){case 0:if(!e&&U.current){t.n=1;break}return t.a(2,0);case 1:return t.p=1,t.n=2,Ki(U.current);case 2:return n=t.v,dt("[KaTeX] Processing completed, result:",n),t.a(2,n||0);case 3:return t.p=3,r=t.v,console.warn("[WP GFM Editor] KaTeX processing error:",r),t.a(2,0)}},t,null,[[1,3]])}))(),t.n=3,Promise.all([a,i,u,s]);case 3:l=t.v,c=fu(l,4),f=c[0],p=c[1],d=c[2],m=c[3],!e&&(f>0||p>0||d>0||m>0)&&U.current&&(g=U.current.innerHTML,N(g),ce||h({renderedDiagramsHtml:g})),t.n=5;break;case 4:dt("❌ previewRef.current or processMermaidBlocksRef.current is null/undefined");case 5:t.n=7;break;case 6:t.p=6,_=t.v,console.error("[WP GFM Editor] ❌ processMermaidBlocks error:",_),console.error("[WP GFM Editor] ❌ Error stack:",_.stack);case 7:return t.p=7,Y.current=!1,t.f(7);case 8:return t.a(2)}},t,null,[[2,6,7,8]])})),r)}else dt("❌ Conditions not met:",{isPreview:T,renderedHtml:!!M,previewRefExists:!!U.current});return X.current=T,function(){var r;e=!0,null===(r=n)||void 0===r||r.abort(),t&&clearTimeout(t),Y.current=!1}},[T,M,ce,h,q]),(0,l.useEffect)(function(){re.current=_;var e=U.current;e&&e.style.setProperty("--gfmr-mermaid-block-bg",_||"transparent")},[_,T]);var ze,$e=function(){var e=cu(ru().m(function e(t){var n,r;return ru().w(function(e){for(;;)switch(e.n){case 0:if(n=t.target.value,!ce){e.n=2;break}return r=iu(iu({},k),{},uu({},ae,iu(iu({},k[ae]||{}),{},{content:n}))),e.n=1,Ge(n,ae,r);case 1:e.n=3;break;case 2:return h({content:n}),e.n=3,qe(n);case 3:return e.a(2)}},e)}));return function(t){return e.apply(this,arguments)}}(),Ge=function(){var e=cu(ru().m(function e(t,n,r){var o,a,i,u,s,l,c,f,p,d,m,g,_,b,D,k,w,F;return ru().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t){e.n=1;break}return o=iu(iu({},r),{},uu({},n,{content:"",html:""})),h({languages:o}),O(""),N(null),e.a(2);case 1:if(e.p=1,f=Ze(t),p=f.frontmatter,d=f.body,h({frontmatterData:p}),q||Sa()){e.n=3;break}return e.n=2,xa();case 2:z(!0);case 3:m=ya(),g=window.wpGfmRenderWithIndentPreprocessing?window.wpGfmRenderWithIndentPreprocessing(d,m):m.render(d),_=y?Ve(p):"",b=Li(b=_+g),b=la(b,hu(S)),"auto"===(D=null!==(a=null===(i=window.wpGfmConfig)||void 0===i||null===(i=i.theme)||void 0===i?void 0:i.shiki_theme)&&void 0!==a?a:null!==(u=(s=window).matchMedia)&&void 0!==u&&u.call(s,"(prefers-color-scheme: dark)").matches?"github-dark":"github-light")&&(k=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches,D=k?"github-dark":"github-light"),w=iu(iu({},r),{},uu({},n,{content:t,html:b})),h({languages:w,shikiTheme:D,content:(null===(l=w[v])||void 0===l?void 0:l.content)||"",html:(null===(c=w[v])||void 0===c?void 0:c.html)||""}),O(b),J.current!==b&&(N(null),J.current=b),e.n=5;break;case 4:e.p=4,F=e.v,console.error("[WP GFM Renderer] Rendering error:",F),O("<p>An error occurred while rendering Markdown</p>"),N(null);case 5:return e.a(2)}},e,null,[[1,4]])}));return function(t,n,r){return e.apply(this,arguments)}}(),Ue=(0,l.useCallback)(function(e){var t,n,r=fe(),o=G.current,a=r&&r.length>0?"\n":"";if(o&&o.start>=0?(t=r.substring(0,o.start)+e+r.substring(o.end),n=o.start+e.length):n=(t=r+a+e).length,ce){var i=ee.current||{};ee.current=iu(iu({},i),{},uu({},ae,iu(iu({},i[ae]||{}),{},{content:t})))}else Q.current=t;je(t),G.current=null,setTimeout(function(){var e=$.current;if(e){try{e.focus({preventScroll:!0})}catch(t){e.focus()}e.setSelectionRange(n,n)}},0)},[fe,je,ce,ae]),He=(0,l.useCallback)(function(e,t,n){var r=ee.current||{},o=function(e,t,n){if("string"!=typeof e||!t)return null;var r=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),o="!\\[[^\\]]*\\(".concat(r,"\\)\\]\\(\\)"),a=new RegExp(o);return a.test(e)?""===n?e.replace(new RegExp("".concat(o,"\\n?")),""):e.replace(a,n):null}(ce?(r[e]||{}).content||"":Q.current||"",t,n);if(null===o)return!1;var a=function(e){return console.warn("[handlePaste] Render failed:",null==e?void 0:e.message)};if(ce){var i=iu(iu({},r),{},uu({},e,iu(iu({},r[e]||{}),{},{content:o})));ee.current=i,Ge(o,e,i).catch(a)}else Q.current=o,h({content:o}),qe(o).catch(a);return!0},[ce,h,qe,Ge]),We=(0,l.useCallback)(function(e,t){if(0!==e.length){var n=(0,i.__)("Uploading image…","markdown-renderer-for-github"),r=e.map(function(e){return te.current+=1,{file:e,token:"".concat("gfmr-upload-").concat(te.current)}}),o=r.map(function(e){return t=e.token,"![".concat(n," (").concat(t,")]()");var t}).join("\n");Ue(o),r.forEach(function(e){var n=e.file,r=e.token;(0,f.uploadMedia)({filesList:[n],allowedTypes:["image"],onFileChange:function(e){var n=Array.isArray(e)?e[e.length-1]:e;if(function(e){if(!e||!e.id)return!1;var t=e.source_url||e.url;return!!t&&!/^blob:/i.test(t)}(n)&&!ne.current.has(r)){ne.current.add(r);var o=yt(n);if(!o)return He(t,r,""),void Le("error",(0,i.__)("Image upload failed.","markdown-renderer-for-github"));He(t,r,o)||Le("warning",(0,i.__)("Upload completed, but the placeholder was removed. Please insert the image from the Media Library.","markdown-renderer-for-github"))}},onError:function(e){He(t,r,""),Le("error",(0,i.sprintf)(/* translators: %s: error message returned by the upload */ /* translators: %s: error message returned by the upload */ 3 3 (0,i.__)("Image upload failed: %s","markdown-renderer-for-github"),(null==e?void 0:e.message)||String(e)))}})})}},[Ue,He,Le]),Ke=(0,l.useCallback)(function(e){if(pe&&!T&&_e){var t,n=(t=e.clipboardData,bt(t));if(0!==n.length){e.preventDefault();var r=$.current;r&&(G.current={start:r.selectionStart,end:r.selectionEnd}),We(n,ae)}}},[pe,T,_e,ae,We]),Ye=(0,l.useCallback)(function(e){pe&&!T&&_e&&0!==bt(e.dataTransfer).length&&(e.preventDefault(),e.dataTransfer.dropEffect="copy")},[pe,T,_e]),Je=(0,l.useCallback)(function(e){if(pe&&!T&&_e){var t=bt(e.dataTransfer);if(0!==t.length){e.preventDefault();var n=$.current;n&&(G.current={start:n.selectionStart,end:n.selectionEnd}),We(t,ae)}}},[pe,T,_e,ae,We]),Qe=(0,l.useCallback)(function(){var e,t,n=(null===(e=window.wpGfmConfig)||void 0===e?void 0:e.defaultBlockLanguage)||(null===(t=window.wpGfmConfig)||void 0===t?void 0:t.siteLanguage)||"en";if(!(C.length>0)){var r=uu({},n,{content:m||"",html:g||""});h({languages:r,defaultLanguage:n,availableLanguages:[n],showLanguageSwitcher:!1,renderedDiagramsHtml:""}),ie(n)}},[m,g,C.length,h]),et=(0,l.useCallback)(function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(Xe(e))if(C.includes(e))console.warn("[GFMR] Language already exists:",e);else if(C.length>=10)console.warn("[GFMR] Maximum language limit reached:",10);else{ce||Qe();var n={content:"",html:""};t&&k[t]&&(n=iu({},k[t]));var r=iu(iu({},k),{},uu({},e,n)),o=[].concat(tu(C),[e]);h({languages:r,availableLanguages:o,showLanguageSwitcher:o.length>1}),ie(e),le(!1)}else console.error("[GFMR] Invalid language code:",e)},[C,k,ce,Qe,h]),tt=(0,l.useCallback)(function(e){if(e!==v){if(window.confirm((0,i.__)("Are you sure you want to delete this translation? This cannot be undone.","markdown-renderer-for-github"))){k[e];var t=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(k,[e].map(su)),n=C.filter(function(t){return t!==e});h({languages:t,availableLanguages:n,showLanguageSwitcher:n.length>1}),ae===e&&ie(v)}}else alert((0,i.__)("Cannot delete the default language. Please change the default first.","markdown-renderer-for-github"))},[v,k,C,ae,h]),nt=(0,l.useCallback)(function(e){if(C.includes(e)||k[e]){ie(e);var t=k[e];t&&(O(t.html||""),N(null))}},[C,k]),rt=(0,l.useCallback)(function(e){return Array.isArray(e)?tu(new Set(e.map(function(e){return parseInt(e,10)}).filter(function(e){return Number.isInteger(e)&&e>0}))):[]},[]),ot=(0,l.useCallback)(function(e,t,n,r){var o=k[e]||{},a=o.taxonomy||{},i=rt(a[t]),u=parseInt(n,10),s=r?[].concat(tu(i),[u]):i.filter(function(e){return e!==u});h({languages:iu(iu({},k),{},uu({},e,iu(iu({},o),{},{taxonomy:iu(iu({},a),{},uu({},t,rt(s)))})))})},[k,rt,h]),at=(0,l.useCallback)(function(e,t){h({languages:Ma(k,e,t)})},[k,h]),st=(0,l.useCallback)(function(e,t){Ae({meta:qa(Ee,me,e,t)})},[Ae,Ee,me]),ft=function(e,t){var n=xe[e]||"",r=xe[v]||"",o=e!==v&&!n&&r;return React.createElement("div",{style:{marginTop:t}},React.createElement(s.TextareaControl,{label:(0,i.__)("Meta Description","markdown-renderer-for-github"),help:o?(0,i.__)("Inherits the default language when empty.","markdown-renderer-for-github"):(0,i.sprintf)(/* translators: %d: number of characters entered. */ /* translators: %d: number of characters entered. */ 4 4 (0,i.__)("%d characters","markdown-renderer-for-github"),n.length),placeholder:e!==v?r:"",value:n,rows:3,onChange:function(t){return st(e,t)}}))},pt=(0,u.useBlockProps)({className:"gfmr-markdown-block"}),mt=R||M;return React.createElement(React.Fragment,null,React.createElement(u.BlockControls,null,React.createElement(s.ToolbarGroup,null,React.createElement(s.ToolbarButton,{icon:T?"edit":"visibility",label:T?(0,i.__)("Edit","markdown-renderer-for-github"):(0,i.__)("Preview","markdown-renderer-for-github"),onClick:function(){return L(!T)},onMouseEnter:Pe,isActive:T}),pe&&React.createElement(u.MediaUploadCheck,null,React.createElement(u.MediaUpload,{onSelect:Me,allowedTypes:["image"],multiple:!1,render:function(e){var t=e.open;return React.createElement(s.ToolbarButton,{icon:"format-image",label:(0,i.__)("Insert Image","markdown-renderer-for-github"),disabled:T,onClick:function(){if(!T){var e=$.current;e&&(G.current={start:e.selectionStart,end:e.selectionEnd}),t()}}})}})))),React.createElement(u.InspectorControls,null,React.createElement(s.PanelBody,{title:(0,i.__)("Language Settings","markdown-renderer-for-github"),initialOpen:ce},ce?React.createElement(React.Fragment,null,React.createElement(s.SelectControl,{label:(0,i.__)("Default Language","markdown-renderer-for-github"),value:v,options:C.map(function(e){return{label:e.toUpperCase(),value:e}}),onChange:function(e){var t,n;h({defaultLanguage:e,content:(null===(t=k[e])||void 0===t?void 0:t.content)||"",html:(null===(n=k[e])||void 0===n?void 0:n.html)||""})}}),React.createElement(s.ToggleControl,{label:(0,i.__)("Show Language Switcher","markdown-renderer-for-github"),checked:A,onChange:function(e){return h({showLanguageSwitcher:e})},help:(0,i.__)("Display language buttons on the frontend","markdown-renderer-for-github")}),C.length>0&&React.createElement("div",{className:"gfmr-language-list",style:{marginTop:"16px"}},React.createElement("p",{className:"components-base-control__label",style:{marginBottom:"8px"}},(0,i.__)("Languages","markdown-renderer-for-github")," (",C.length,"/",10,")"),C.map(function(e){var t,n,r,o=(null===(t=k[e])||void 0===t?void 0:t.taxonomy)||{},a=rt(o.categories),l=rt(o.tags),c=parseInt(null===(n=k[e])||void 0===n?void 0:n.featuredImage,10)||0,f=Fe[e],p=f&&((null===(r=f.media_details)||void 0===r||null===(r=r.sizes)||void 0===r||null===(r=r.thumbnail)||void 0===r?void 0:r.source_url)||f.source_url)||"";return React.createElement("div",{key:e,style:{padding:"8px 0",borderBottom:"1px solid #ddd"}},React.createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"8px"}},React.createElement("span",null,e.toUpperCase(),e===v&&React.createElement("span",{style:{color:"#757575",marginLeft:"8px",fontSize:"12px"}},"(",(0,i.__)("default","markdown-renderer-for-github"),")")),e!==v&&React.createElement(s.Button,{isDestructive:!0,isSmall:!0,onClick:function(){return tt(e)}},(0,i.__)("Delete","markdown-renderer-for-github"))),e===v?React.createElement("p",{className:"components-base-control__help",style:{margin:"0 0 8px"}},(0,i.__)("Set the default language's categories, tags, and featured image in the standard post panels.","markdown-renderer-for-github")):React.createElement(React.Fragment,null,React.createElement("div",{style:{marginBottom:"12px"}},React.createElement("p",{className:"components-base-control__label",style:{marginBottom:"6px"}},(0,i.__)("Categories","markdown-renderer-for-github")),we.length>0?we.map(function(t){return React.createElement(s.CheckboxControl,{key:t.id,label:t.name,checked:a.includes(t.id),onChange:function(n){return ot(e,"categories",t.id,n)}})}):React.createElement("p",{className:"components-base-control__help"},(0,i.__)("No categories available.","markdown-renderer-for-github"))),React.createElement("div",{style:{marginBottom:"8px"}},React.createElement("p",{className:"components-base-control__label",style:{marginBottom:"6px"}},(0,i.__)("Tags","markdown-renderer-for-github")),ve.length>0?ve.map(function(t){return React.createElement(s.CheckboxControl,{key:t.id,label:t.name,checked:l.includes(t.id),onChange:function(n){return ot(e,"tags",t.id,n)}})}):React.createElement("p",{className:"components-base-control__help"},(0,i.__)("No tags available.","markdown-renderer-for-github"))),React.createElement("div",{style:{marginBottom:"8px"}},React.createElement("p",{className:"components-base-control__label",style:{marginBottom:"6px"}},(0,i.__)("Featured Image","markdown-renderer-for-github")),c&&p?React.createElement("img",{src:p,alt:"",style:{display:"block",maxWidth:"100%",height:"auto",marginBottom:"6px"}}):c&&null===f?React.createElement("p",{className:"components-base-control__help",style:{margin:"0 0 6px"}},(0,i.__)("Selected image is no longer available.","markdown-renderer-for-github")):Te?React.createElement(React.Fragment,null,React.createElement("img",{src:Te,alt:"",style:{display:"block",maxWidth:"100%",height:"auto",marginBottom:"6px",opacity:.6}}),React.createElement("p",{className:"components-base-control__help",style:{margin:"0 0 6px"}},(0,i.__)("Inherited from the default language.","markdown-renderer-for-github"))):React.createElement("p",{className:"components-base-control__help",style:{margin:"0 0 6px"}},(0,i.__)("No image selected.","markdown-renderer-for-github")),React.createElement(u.MediaUploadCheck,null,React.createElement(u.MediaUpload,{onSelect:function(t){return at(e,null==t?void 0:t.id)},allowedTypes:["image"],multiple:!1,value:c,render:function(e){var t=e.open;return React.createElement(s.Button,{variant:"secondary",isSmall:!0,onClick:t,disabled:!_e},c?(0,i.__)("Replace image","markdown-renderer-for-github"):(0,i.__)("Select image","markdown-renderer-for-github"))}})),!!c&&React.createElement(s.Button,{variant:"link",isDestructive:!0,isSmall:!0,style:{marginLeft:"8px"},onClick:function(){return at(e,0)}},(0,i.__)("Remove image","markdown-renderer-for-github")))),Se&&ft(e,"8px"))}),C.length<10&&React.createElement(s.Button,{variant:"secondary",isSmall:!0,onClick:function(){return le(!0)},style:{marginTop:"12px"}},(0,i.__)("+ Add Language","markdown-renderer-for-github")))):React.createElement(React.Fragment,null,React.createElement("p",{className:"components-base-control__help",style:{marginBottom:"12px"}},(0,i.__)("Enable multilingual mode to write content in multiple languages.","markdown-renderer-for-github")),React.createElement(s.Button,{variant:"secondary",onClick:function(){Qe(),le(!0)}},(0,i.__)("Enable Multilingual","markdown-renderer-for-github")),Se&&ft(v,"16px"))),React.createElement(s.PanelBody,{title:(0,i.__)("Frontmatter Settings","markdown-renderer-for-github"),initialOpen:!1},React.createElement(s.ToggleControl,{label:(0,i.__)("Show Frontmatter Header","markdown-renderer-for-github"),checked:y,onChange:function(e){return h({showFrontmatter:e})},help:(0,i.__)("Display YAML frontmatter metadata as a formatted header","markdown-renderer-for-github")})),React.createElement(s.PanelBody,{title:(0,i.__)("Mermaid Settings","markdown-renderer-for-github"),initialOpen:!1},React.createElement(s.PanelRow,null,React.createElement("div",{style:{width:"100%"}},React.createElement("label",{htmlFor:"mermaid-bg-color",style:{display:"block",marginBottom:"8px",fontWeight:"500"}},(0,i.__)("Background Color","markdown-renderer-for-github")),React.createElement(s.ColorPicker,{color:(ze=_||"transparent",9===ze.length&&ze.endsWith("00")?ze.slice(0,7)+"FF":ze),onChange:function(e){h({mermaidBgColor:"#00000000"===e?"transparent":e})},enableAlpha:!0})))),React.createElement(s.PanelBody,{title:(0,i.__)("Code Block (Pro)","markdown-renderer-for-github"),initialOpen:!1},null!==(a=window.wpGfmConfig)&&void 0!==a&&null!==(a=a.codeFeatures)&&void 0!==a&&a.lineNumbers?React.createElement(s.SelectControl,{label:(0,i.__)("Line numbers","markdown-renderer-for-github"),value:S,options:[{label:(0,i.__)("Use global setting","markdown-renderer-for-github"),value:"default"},{label:(0,i.__)("On","markdown-renderer-for-github"),value:"on"},{label:(0,i.__)("Off","markdown-renderer-for-github"),value:"off"}],onChange:function(e){return h({codeLineNumbers:e})},help:(0,i.__)("Show line numbers on the code blocks in this Markdown block.","markdown-renderer-for-github")}):React.createElement("div",{className:"gfmr-pro-upsell"},React.createElement("p",null,(0,i.__)("Line numbers, line highlighting, filenames, and collapsible blocks are not available in the Free version.","markdown-renderer-for-github")),!(null===(p=window.wpGfmConfig)||void 0===p||null===(p=p.codeFeatures)||void 0===p||!p.upgradeUrl)&&React.createElement("p",null,React.createElement("a",{href:window.wpGfmConfig.codeFeatures.upgradeUrl,target:"_blank",rel:"noopener noreferrer"},(0,i.__)("See a live example and the Free vs Pro comparison","markdown-renderer-for-github")))))),se&&React.createElement(eu,{onAdd:et,onClose:function(){return le(!1)},existingLanguages:C}),React.createElement("div",pt,React.createElement("div",{className:"gfmr-markdown-header"},React.createElement("span",{className:"gfmr-markdown-label"},(0,i.__)("Markdown","markdown-renderer-for-github")),React.createElement("span",{className:"gfmr-markdown-mode"},T?(0,i.__)("Preview","markdown-renderer-for-github"):(0,i.__)("Edit","markdown-renderer-for-github"))),(ce||Object.keys(k).length>0)&&React.createElement("div",{className:"gfmr-language-tabs"},(C.length>0?C:Object.keys(k)).map(function(e){return React.createElement("button",{key:e,type:"button",className:"gfmr-lang-tab ".concat(ae===e?"active":""),onClick:function(){return nt(e)},disabled:T},e.toUpperCase())}),C.length<10&&React.createElement("button",{type:"button",className:"gfmr-lang-add",onClick:function(){return le(!0)},disabled:T,title:(0,i.__)("Add Language","markdown-renderer-for-github")},"+")),T?React.createElement("div",{className:"gfmr-markdown-preview gfmr-markdown-rendered-preview ".concat(Oe),ref:U},mt?React.createElement(l.RawHTML,null,mt):React.createElement("p",{className:"gfmr-markdown-empty"},(0,i.__)("No Markdown content to preview","markdown-renderer-for-github"))):React.createElement(s.ResizableBox,{size:{height:300},minHeight:"100",enable:{top:!1,right:!1,bottom:!0,left:!1,topRight:!1,bottomRight:!1,bottomLeft:!1,topLeft:!1},className:"gfmr-markdown-editor-wrapper"},React.createElement("textarea",{ref:$,className:"gfmr-markdown-editor",value:fe(),onChange:$e,onPaste:Ke,onDragOver:Ye,onDrop:Je,placeholder:(0,i.__)("Enter Markdown here...\n\n# Heading\n**Bold** *Italic*\n- List item","markdown-renderer-for-github"),spellCheck:"false"}))))},save:function(){return null},deprecated:Du})})()})(); -
markdown-renderer-for-github/trunk/changelog.txt
r3644434 r3657956 7 7 8 8 ## [Unreleased] 9 10 ## [2.11.8] - 2026-08-21 11 ### Added 12 - add WordPress 7.1 beta compatibility tracking 13 - add Open Graph / Twitter card meta tag output 14 - declare WordPress 7.1 compatibility 15 ### Changed 16 - avoid loading Shiki bundle on main thread when Worker can highlight 17 - buffer cache index writes and flush once per request 18 - defer diagram init during prerender instead of excluding pages (#1340) 19 - gate copy-button, math and worker-manager JS on content detection 20 - reserve diagram height while prerendering to avoid activation layout shift 21 ### Fixed 22 - prevent premature image upload completion and verify PlantUML iframe reach 23 - harden WP 7.1 verification findings (auth-state, fresh-env init, ability error status) 24 - sync data-gfmr-language attribute between Worker and main-thread highlight paths 25 - stop chart image baking from disabling the interactive chart toolbar 9 26 10 27 ## [2.11.7] - 2026-08-13 -
markdown-renderer-for-github/trunk/includes/admin/class-gfmr-manual-renderer.php
r3644434 r3657956 915 915 'value' => $this->enabled_disabled_label( ! empty( $masked_settings['meta_description_enabled'] ) ), 916 916 'debug' => ! empty( $masked_settings['meta_description_enabled'] ) ? 'enabled' : 'disabled', 917 ), 918 'social_meta_enabled' => array( 919 'label' => __( 'Open Graph / Twitter cards', 'markdown-renderer-for-github' ), 920 'value' => $this->enabled_disabled_label( ! empty( $masked_settings['social_meta_enabled'] ) ), 921 'debug' => ! empty( $masked_settings['social_meta_enabled'] ) ? 'enabled' : 'disabled', 917 922 ), 918 923 'supported_languages' => array( -
markdown-renderer-for-github/trunk/includes/admin/class-gfmr-settings-registry.php
r3644434 r3657956 461 461 462 462 add_settings_field( 463 'social_meta_enabled', 464 __( 'Open Graph / Twitter Cards', 'markdown-renderer-for-github' ), 465 array( $this->renderer, 'render_social_meta_enabled_field' ), 466 GFMR_Settings::SETTINGS_SLUG, 467 'gfmr_multilingual_section' 468 ); 469 470 add_settings_field( 463 471 'multilingual_switcher_header', 464 472 __( 'Show Switcher in Header', 'markdown-renderer-for-github' ), -
markdown-renderer-for-github/trunk/includes/admin/class-gfmr-settings-renderer.php
r3644434 r3657956 1193 1193 </label> 1194 1194 <p class="description"><?php esc_html_e( 'Lets you set a different search-engine meta description for each language on the post editor sidebar. Output is automatically skipped when a dedicated SEO plugin (Yoast, Rank Math, SEOPress, All in One SEO) is active.', 'markdown-renderer-for-github' ); ?></p> 1195 <?php 1196 } 1197 1198 /** 1199 * Render Open Graph / Twitter card toggle field 1200 */ 1201 public function render_social_meta_enabled_field() { 1202 $options = $this->settings->get_settings(); 1203 $checked = ! empty( $options['social_meta_enabled'] ); 1204 ?> 1205 <label> 1206 <input type="checkbox" 1207 name="<?php echo esc_attr( GFMR_Settings::OPTION_NAME ); ?>[social_meta_enabled]" 1208 value="1" 1209 <?php checked( $checked ); ?> /> 1210 <?php esc_html_e( 'Output Open Graph and Twitter card meta tags', 'markdown-renderer-for-github' ); ?> 1211 </label> 1212 <p class="description"><?php esc_html_e( 'Adds og:title, og:type, og:url, og:site_name, og:locale, og:image and twitter:card to single posts and pages. The URL and image follow the current language. Output is automatically skipped when a dedicated SEO plugin (Yoast, Rank Math, SEOPress, All in One SEO) is active.', 'markdown-renderer-for-github' ); ?></p> 1195 1213 <?php 1196 1214 } -
markdown-renderer-for-github/trunk/includes/admin/class-gfmr-settings-sanitizer.php
r3644434 r3657956 224 224 // Sanitize per-language meta description toggle (Issue #426). 225 225 $sanitized['meta_description_enabled'] = ! empty( $input['meta_description_enabled'] ); 226 227 // Sanitize Open Graph / Twitter card toggle (Issue #1342). 228 $sanitized['social_meta_enabled'] = ! empty( $input['social_meta_enabled'] ); 226 229 227 230 // Sanitize supported languages: input → old settings → WordPress locale. -
markdown-renderer-for-github/trunk/includes/admin/class-gfmr-settings-schema.php
r3644434 r3657956 212 212 ), 213 213 'meta_description_enabled' => self::bool( 'multilingual', 'Per-language meta descriptions', 'Enable the per-language meta description editor panel.' ), 214 'social_meta_enabled' => self::bool( 'multilingual', 'Open Graph / Twitter card tags', 'Output the full og: / twitter: meta tag set for singular views.' ), 214 215 // --- PlantUML --- 215 216 'plantuml_enabled' => self::bool( 'plantuml', 'Enable PlantUML', 'Render PlantUML diagrams (requires an external render server).' ), … … 523 524 'gfmr_invalid_settings', 524 525 implode( ' ', $errors ), 525 array( 'errors' => $errors ) 526 array( 527 'errors' => $errors, 528 'status' => 400, 529 ) 526 530 ); 527 531 } -
markdown-renderer-for-github/trunk/includes/admin/class-gfmr-settings.php
r3644434 r3657956 496 496 // surprising existing sites with a new editor panel on upgrade. 497 497 'meta_description_enabled' => false, 498 // Open Graph / Twitter card output (Issue #1342). 499 // Default: OFF (opt-in), same rationale as meta_description_enabled -- 500 // existing sites may already emit OGP tags from a theme or plugin. 501 'social_meta_enabled' => false, 498 502 // PlantUML settings. 499 503 'plantuml_enabled' => true, … … 913 917 914 918 /** 919 * Whether the Open Graph / Twitter card output is enabled (Issue #1342) 920 * 921 * @return bool 922 */ 923 public function is_social_meta_enabled() { 924 $settings = $this->get_settings(); 925 return ! empty( $settings['social_meta_enabled'] ); 926 } 927 928 /** 915 929 * Check if SSR is enabled 916 930 * … … 938 952 public function is_mermaid_ssr_enabled() { 939 953 return $this->is_ssr_enabled() && ! empty( $this->get_settings()['ssr_mermaid'] ); 954 } 955 956 /** 957 * Check if Chart.js blocks may be baked into cached <img> placeholders. 958 * 959 * Baking (Issue #613) swaps the whole `<pre><code class="language-chart">` 960 * block for a static image, which is a pure win for a chart nobody can 961 * interact with -- and destructive for one they can. The interactive 962 * toolbar (Issue #724) lives on markup the front-end builds from that code 963 * block, so a baked image has no toolbar, no series checkboxes, and no 964 * restored state: the very first visitor warms the cache and every visitor 965 * after them silently loses the feature (Issue #1420). 966 * 967 * The two are therefore mutually exclusive, and the toolbar wins because it 968 * is the behaviour the site owner opted into. Turning the toolbar off brings 969 * baking back; the filter below still overrides either way. 970 * 971 * Deliberately NOT gated on `ssr_enabled`: chart baking has always run 972 * independently of the SSR master switch, and narrowing that here would 973 * silently drop baking on sites that rely on it with SSR off. 974 * 975 * @since 2.12.0 976 * @return bool True when chart image baking should run. 977 */ 978 public function is_chart_image_bake_enabled() { 979 $interactive = (bool) $this->get( 'chart_interactive_enabled', true ); 980 981 /** 982 * Filter whether Chart.js blocks are baked into cached images on the front-end. 983 * 984 * @since 2.7.0 985 * @since 2.12.0 Defaults to false while the interactive chart toolbar is enabled. 986 * 987 * @param bool $enabled Whether baking should run. 988 */ 989 return (bool) apply_filters( 'gfmr_chart_image_ssr_enabled', ! $interactive ); 940 990 } 941 991 -
markdown-renderer-for-github/trunk/includes/asset/class-gfmr-asset-manager.php
r3644434 r3657956 157 157 ); 158 158 159 // Copy button module 160 wp_enqueue_script( 159 // Resolve the unified detection result once (Issue #1338). Every 160 // per-handle JS gate below reads from these locals, mirroring what 161 // enqueue_styles() already does for stylesheets: the detector is the 162 // single source of truth, and the JS handles were the last group still 163 // loading unconditionally. 164 // 165 // These gates are content-based only. `gfmr_force_enqueue_assets` / 166 // GFMR_FORCE_ASSETS decide *whether the page loads plugin assets at 167 // all* (should_enqueue_assets()); which handles that page then needs is 168 // decided here, exactly as it already is for the Mermaid renderer, 169 // PlantUML handler and TOC. 170 // 171 // Every gated handle is REGISTERED unconditionally and only enqueued 172 // behind its gate. Registering emits nothing, but it leaves a one-line 173 // escape hatch — `wp_enqueue_script( 'gfmr-math' )` from a theme or 174 // plugin — for Markdown that reaches the page through a route no 175 // detector can see, such as a template calling `do_shortcode()` after 176 // `wp_enqueue_scripts` has already run (Issue #861). Without it a 177 // detection miss on those pages would render raw `$$…$$` source. 178 $libs = $this->detect_current_post_libraries(); 179 $has_code_blocks = $this->may_have_code_blocks(); 180 $has_mermaid = $this->may_have_mermaid_content(); 181 $needs_plantuml = in_array( 'plantuml', $libs, true ) && $this->is_plantuml_enabled(); 182 183 // Copy button module — gated on the same condition as its own 184 // stylesheet in enqueue_styles(): code blocks, Mermaid and (enabled) 185 // PlantUML diagrams are the three things that get a copy button. 186 // gfmr-main.js delegates through `if ( global.wpGfmCopyButton )` and 187 // falls back silently, so a detection miss costs a copy button, not a 188 // broken page. 189 $needs_copy_button = $has_code_blocks || $has_mermaid || $needs_plantuml; 190 wp_register_script( 161 191 'gfmr-copy-button-js', 162 192 GFMR_Asset_Paths::url( 'assets/js/gfmr-copy-button.js' ), … … 165 195 $defer_in_footer 166 196 ); 167 168 // Math/KaTeX module 169 wp_enqueue_script( 197 if ( $needs_copy_button ) { 198 wp_enqueue_script( 'gfmr-copy-button-js' ); 199 } 200 201 // Math/KaTeX module — the detector has carried a 'katex' pattern set 202 // (```math fences, $$…$$, [latex], \begin{}…) since Issue #642 without 203 // anything consuming it; this is that wiring. gfmr-main.js delegates 204 // every math entry point through `if ( global.wpGfmMath )`. 205 $needs_katex = in_array( 'katex', $libs, true ); 206 wp_register_script( 170 207 'gfmr-math', 171 208 GFMR_Asset_Paths::url( 'assets/js/gfmr-math.js' ), … … 174 211 $defer_in_footer 175 212 ); 176 177 $libs = $this->detect_current_post_libraries(); 213 if ( $needs_katex ) { 214 wp_enqueue_script( 'gfmr-math' ); 215 } 178 216 179 217 // Mermaid renderer module - conditional loading. … … 181 219 // baked into inline SVG (Issue #614): the baked output renders without the 182 220 // library, and the prefetch hint below is suppressed in the same case. 183 $needs_mermaid_renderer = $ this->may_have_mermaid_content()&& ! $this->mermaid_fully_baked();221 $needs_mermaid_renderer = $has_mermaid && ! $this->mermaid_fully_baked(); 184 222 $has_chart = in_array( 'chartjs', $libs, true ); 185 223 $chart_interactive_enabled = (bool) GFMR_Settings::get_instance()->get( … … 200 238 // TOC/Chart/PlantUML content are not charged the extra request. 201 239 // $needs_toc / $needs_plantuml are reused below for their respective 202 // conditional enqueue blocks instead of re-evaluating the checks. 240 // conditional enqueue blocks instead of re-evaluating the checks 241 // ($needs_plantuml is resolved above, with the copy-button gate). 203 242 $needs_toc = $this->should_load_toc(); 204 $needs_plantuml = in_array( 'plantuml', $libs, true ) && $this->is_plantuml_enabled();205 243 $needs_gfmr_utils = $has_chart || $needs_toc || $needs_plantuml; 206 244 if ( $needs_gfmr_utils ) { … … 245 283 true 246 284 ); 247 $needs_mermaid_toolbar = $ this->may_have_mermaid_content()&& $mermaid_interactive_enabled;285 $needs_mermaid_toolbar = $has_mermaid && $mermaid_interactive_enabled; 248 286 $needs_chart_storage = $has_chart && $chart_interactive_enabled && $chart_persist_state; 249 287 if ( $needs_mermaid_toolbar || $needs_chart_storage ) { … … 260 298 // and gfmr-lang-fallbacks must execute first so collectPageLanguages() 261 299 // can resolve aliases and approximate-fallbacks (#33). 262 $main_deps = array( 'gfmr-language-detection', 'gfmr-theme-resolver', 'gfmr-copy-button-js', 'gfmr-math', 'gfmr-lang-aliases', 'gfmr-lang-fallbacks' ); 300 // 301 // The conditional handles MUST be mirrored here (Issue #1338): WordPress 302 // skips a script whose dependency was never registered, so leaving 303 // gfmr-copy-button-js / gfmr-math in the list on a page that no longer 304 // enqueues them would drop gfmr-main.js itself. 305 $main_deps = array( 'gfmr-language-detection', 'gfmr-theme-resolver', 'gfmr-lang-aliases', 'gfmr-lang-fallbacks' ); 306 if ( $needs_copy_button ) { 307 $main_deps[] = 'gfmr-copy-button-js'; 308 } 309 if ( $needs_katex ) { 310 $main_deps[] = 'gfmr-math'; 311 } 263 312 if ( $needs_mermaid_renderer ) { 264 313 $main_deps[] = 'gfmr-mermaid-renderer'; … … 279 328 280 329 // Mermaid Lightbox module - conditional loading 281 if ( $ this->may_have_mermaid_content()) {330 if ( $has_mermaid ) { 282 331 wp_enqueue_script( 283 332 'gfmr-mermaid-lightbox', … … 364 413 } 365 414 366 // Worker Manager for offloading syntax highlighting 367 $this->enqueue_worker_manager( $plugin_url, $cache_buster ); 415 // Worker Manager for offloading syntax highlighting — only useful when 416 // the page has something to highlight (Issue #1338). Skipping it drops 417 // the script request *and* the inline wpGfmWorkerConfig JSON (the 418 // language list and theme payload) from pages with no code blocks. 419 // The handle is still registered, so the escape hatch above applies. 420 // 421 // Fail-safe: gfmr-main.js treats a missing wpGfmWorkerConfig as 422 // "workers unavailable" and resolves whenWorkerManagerAvailable() 423 // immediately (#1336), so a detection miss degrades to main-thread 424 // highlighting instead of stalling the render. 425 $this->enqueue_worker_manager( $plugin_url, $cache_buster, $has_code_blocks ); 368 426 369 427 // Architecture explanation: … … 752 810 'ajaxUrl' => function_exists( 'admin_url' ) ? admin_url( 'admin-ajax.php' ) : '', 753 811 'mermaidSsrNonce' => function_exists( 'wp_create_nonce' ) ? wp_create_nonce( 'gfmr_mermaid_ssr' ) : '', 754 'chartImageNonce' => function_exists( 'wp_create_nonce' ) ? wp_create_nonce( 'gfmr_chart_image' ) : '', 812 // Issue #1420: the nonce is the front-end's only gate on chart image 813 // warm-up, so withholding it is how a site with the interactive 814 // toolbar on stops paying for a cache entry that must never be 815 // served. Baking back on (toolbar off, or the filter) restores it. 816 'chartImageNonce' => ( function_exists( 'wp_create_nonce' ) && GFMR_Settings::get_instance()->is_chart_image_bake_enabled() ) ? wp_create_nonce( 'gfmr_chart_image' ) : '', 755 817 // Supported languages for syntax highlighting 756 818 'supportedLanguages' => $supported_languages, … … 1362 1424 * @since 2.6.0 1363 1425 * 1364 * @param string $plugin_url Plugin URL1426 * @param string $plugin_url Plugin URL 1365 1427 * @param string $cache_buster Cache busting version 1428 * @param bool $enqueue Whether the page needs the manager (Issue #1338). 1429 * False still registers the handle and its config 1430 * so a caller can opt back in with a bare 1431 * wp_enqueue_script( 'gfmr-worker-manager' ); 1432 * an unenqueued handle prints nothing, config 1433 * included. 1366 1434 * @return void 1367 1435 */ 1368 private function enqueue_worker_manager( $plugin_url, $cache_buster ) {1436 private function enqueue_worker_manager( $plugin_url, $cache_buster, $enqueue = true ) { 1369 1437 // Check if Workers should be enabled 1370 1438 $worker_enabled = $this->should_enable_workers(); … … 1374 1442 } 1375 1443 1376 // Enqueue Worker Manager script.1444 // Register the Worker Manager script. 1377 1445 // Shares the unified defer strategy (#641); gfmr-lang-aliases and 1378 1446 // gfmr-lang-fallbacks are explicit dependencies so the manager can read 1379 1447 // window.GFMR_LANG_ALIASES / window.GFMR_LANG_FALLBACKS and inject both 1380 1448 // maps into the Worker init config (#33). 1381 wp_ enqueue_script(1449 wp_register_script( 1382 1450 'gfmr-worker-manager', 1383 1451 GFMR_Asset_Paths::url( 'assets/js/gfmr-worker-manager.js' ), … … 1386 1454 self::DEFER_STRATEGY 1387 1455 ); 1456 1457 if ( $enqueue ) { 1458 wp_enqueue_script( 'gfmr-worker-manager' ); 1459 } 1388 1460 1389 1461 // Get settings for theme -
markdown-renderer-for-github/trunk/includes/asset/class-gfmr-speculation-rules.php
r3557711 r3657956 10 10 * navigation the visitor may never make. 11 11 * 12 * This integration keeps the cheap `prefetch` behaviour untouched but excludes13 * pages that require Mermaid or (privacy-acknowledged) PlantUML from the12 * This integration keeps the cheap `prefetch` behaviour untouched. It *can* 13 * exclude pages that require Mermaid or (privacy-acknowledged) PlantUML from the 14 14 * expensive `prerender` path, via the core `wp_speculation_rules_href_exclude_paths` 15 * filter. The set of "heavy" front-end paths is maintained incrementally on 16 * `save_post` (and pruned on trash/delete) so the front-end filter is a single 17 * option read with no per-request content scanning. 18 * 19 * Scope: Issue #647 (WP 7.0 Sub-G spike — low-risk Speculative Loading adoption). 15 * filter, and while that exclusion is enabled the set of "heavy" front-end paths 16 * is maintained incrementally on `save_post` (pruned on trash/delete) so the 17 * front-end filter is a single option read with no per-request content scanning. 18 * 19 * Since Issue #1340 the exclusion is **off by default**. `assets/js/gfmr-main.js` 20 * now holds diagram initialisation (Mermaid render, PlantUML fetch, charts) until 21 * `document.prerendering` flips via `prerenderingchange`, so a prerendered page 22 * costs no layout engine run and no external round-trip while still gaining 23 * instant navigation. With nothing reading the map, nothing is written to it 24 * either, and a map left over from an earlier version is deleted once by 25 * `maybe_cleanup_excluded_paths()`. 26 * 27 * `gfmr_exclude_heavy_pages_from_prerender` remains as a kill-switch: returning 28 * true re-enables both exclude-path emission and `save_post` map maintenance. If 29 * the one-time cleanup already ran, the map starts empty and refills as posts are 30 * saved. 31 * 32 * Scope: Issue #647 (WP 7.0 Sub-G spike — low-risk Speculative Loading adoption), 33 * Issue #1340 (client-side deferral replaces the blanket exclusion). 20 34 * 21 35 * @package WpGfmRenderer … … 44 58 */ 45 59 const EXCLUDED_PATHS_OPTION = 'gfmr_prerender_excluded_paths'; 60 61 /** 62 * Flag marking the one-time removal of the dormant path map (Issue #1340). 63 * 64 * Autoloaded on purpose: it is read on every admin request, and an 65 * autoloaded boolean costs nothing beyond the alloptions query WordPress 66 * already runs, whereas a non-autoloaded miss costs a query each time. 67 * 68 * @var string 69 */ 70 const CLEANUP_DONE_OPTION = 'gfmr_prerender_map_cleaned'; 46 71 47 72 /** … … 57 82 add_action( 'trashed_post', array( $this, 'remove_post' ) ); 58 83 add_action( 'deleted_post', array( $this, 'remove_post' ) ); 84 // Issue #1340: the map is dormant while the kill-switch is off (the 85 // default), so drop whatever an earlier version left behind. Admin-only 86 // so the front-end request path stays untouched. 87 add_action( 'admin_init', array( $this, 'maybe_cleanup_excluded_paths' ) ); 88 } 89 90 /** 91 * Delete the dormant exclude-path map once, when the exclusion is disabled. 92 * 93 * The map used to be maintained unconditionally, which both grew the option 94 * without bound and left every entry stale after a site-wide permalink 95 * change. With the exclusion off by default the map has no reader, so the 96 * stored value is removed rather than left to rot (Issue #1340). 97 * 98 * Runs at most once: the autoloaded flag below keeps later admin requests 99 * from paying a lookup for a row that no longer exists, and keeps this from 100 * repeatedly wiping a map a site has since opted back into. `admin_init` 101 * also fires for admin-ajax.php / admin-post.php — including `nopriv` 102 * handlers, which set `WP_ADMIN` — so the AJAX and capability checks are what 103 * make this an administrator action rather than one any visitor can reach. 104 * 105 * @return void 106 */ 107 public function maybe_cleanup_excluded_paths() { 108 if ( ! is_admin() || wp_doing_ajax() ) { 109 return; 110 } 111 112 if ( ! current_user_can( 'manage_options' ) ) { 113 return; 114 } 115 116 if ( get_option( self::CLEANUP_DONE_OPTION, false ) ) { 117 return; 118 } 119 120 // A site that opted back in still needs its map; retry on a later request. 121 if ( $this->should_apply( 'prerender' ) ) { 122 return; 123 } 124 125 delete_option( self::EXCLUDED_PATHS_OPTION ); 126 update_option( self::CLEANUP_DONE_OPTION, true, true ); 59 127 } 60 128 … … 62 130 * Decide whether this integration should alter the given speculation mode. 63 131 * 64 * Only `prerender` is restricted; `prefetch` (network-only, cheap) is left65 * intact. Site owners can disable the behaviour entirely via the66 * `gfmr_exclude_heavy_pages_from_prerender` filter.132 * Only `prerender` is ever restricted; `prefetch` (network-only, cheap) is 133 * left intact. Since Issue #1340 the restriction is opt-in: site owners turn 134 * it back on by returning true from `gfmr_exclude_heavy_pages_from_prerender`. 67 135 * 68 136 * @param string $mode Speculation mode ('prefetch' or 'prerender'). … … 77 145 * Filter the master switch for excluding heavy diagram pages from prerender. 78 146 * 147 * Default changed from true to false in Issue #1340: diagram work is now 148 * deferred client-side until prerender activation, so excluding the page 149 * only costs instant navigation. Returning true restores the previous 150 * behaviour (exclude-path emission plus save_post map maintenance). 151 * 79 152 * @since 2.8.0 80 153 * 81 * @param bool $enabled Whether to exclude heavy pages from prerender. Default true.154 * @param bool $enabled Whether to exclude heavy pages from prerender. Default false. 82 155 */ 83 return (bool) apply_filters( 'gfmr_exclude_heavy_pages_from_prerender', true );156 return (bool) apply_filters( 'gfmr_exclude_heavy_pages_from_prerender', false ); 84 157 } 85 158 … … 110 183 */ 111 184 public function sync_post( $post_id ) { 185 // Issue #1340: no reader while the kill-switch is off, so stop growing 186 // the option (and stop recording paths that go stale on permalink changes). 187 if ( ! $this->should_apply( 'prerender' ) ) { 188 return; 189 } 190 112 191 if ( wp_is_post_autosave( $post_id ) || wp_is_post_revision( $post_id ) ) { 113 192 return; … … 145 224 */ 146 225 public function remove_post( $post_id ) { 226 if ( ! $this->should_apply( 'prerender' ) ) { 227 return; 228 } 229 147 230 $post_id = (int) $post_id; 148 231 $map = (array) get_option( self::EXCLUDED_PATHS_OPTION, array() ); -
markdown-renderer-for-github/trunk/includes/cache/class-gfmr-cache-manager.php
r3633809 r3657956 115 115 */ 116 116 private $cache_index_sequence = 0; 117 118 /** 119 * In-memory cache-index buffer for this request (Issue #1337). 120 * 121 * Null until the index is first read or written. Once primed, every 122 * touch/update/remove goes through this buffer instead of wp_options 123 * directly, so N cache hits (or N first-render set_cache calls) within a 124 * request collapse into a single update_option() call instead of N. 125 * Cleared back to null on flush so the next read re-primes from the DB 126 * rather than trusting a possibly-stale in-memory copy. 127 * 128 * @var array|null 129 */ 130 private $cache_index_buffer; 131 132 /** 133 * True once the buffered index has unflushed changes. 134 * 135 * @var bool 136 */ 137 private $cache_index_dirty = false; 138 139 /** 140 * True once this instance has registered its shutdown flush callback. 141 * 142 * @var bool 143 */ 144 private $cache_index_flush_scheduled = false; 117 145 118 146 /** … … 988 1016 989 1017 /** 990 * Read cache index option. 1018 * Read cache index, priming the in-memory buffer from wp_options on first 1019 * access (Issue #1337). 991 1020 * 992 1021 * @return array Cache index. 993 1022 */ 994 1023 private function get_cache_index() { 1024 if ( null !== $this->cache_index_buffer ) { 1025 return $this->cache_index_buffer; 1026 } 1027 995 1028 if ( ! function_exists( 'get_option' ) ) { 996 1029 return array(); 997 1030 } 998 1031 999 $index = get_option( self::CACHE_INDEX_OPTION, array() ); 1000 return is_array( $index ) ? $index : array(); 1001 } 1002 1003 /** 1004 * Persist cache index option. 1032 $index = get_option( self::CACHE_INDEX_OPTION, array() ); 1033 $this->cache_index_buffer = is_array( $index ) ? $index : array(); 1034 1035 return $this->cache_index_buffer; 1036 } 1037 1038 /** 1039 * Buffer the cache index in memory and schedule a single deferred write 1040 * instead of persisting to wp_options on every call (Issue #1337). 1005 1041 * 1006 1042 * @param array $index Cache index. … … 1008 1044 */ 1009 1045 private function save_cache_index( $index ) { 1046 $this->cache_index_buffer = $index; 1047 $this->cache_index_dirty = true; 1048 $this->schedule_cache_index_flush(); 1049 } 1050 1051 /** 1052 * Register a one-time `shutdown` callback to flush this instance's 1053 * buffered index writes, so touches/updates within a request collapse 1054 * into a single update_option() call (Issue #1337). 1055 * 1056 * @return void 1057 */ 1058 private function schedule_cache_index_flush() { 1059 if ( $this->cache_index_flush_scheduled ) { 1060 return; 1061 } 1062 $this->cache_index_flush_scheduled = true; 1063 1064 if ( function_exists( 'add_action' ) ) { 1065 add_action( 'shutdown', array( $this, 'flush_cache_index' ) ); 1066 } 1067 } 1068 1069 /** 1070 * Flush the buffered cache index to wp_options, if dirty (Issue #1337). 1071 * 1072 * Public so it can run from the `shutdown` hook and also be called 1073 * explicitly where shutdown cannot be relied on (e.g. long-running 1074 * WP-CLI commands). A lost buffer on abnormal termination is acceptable: 1075 * LRU bookkeeping is re-touched on the next hit. 1076 * 1077 * @return void 1078 */ 1079 public function flush_cache_index() { 1080 if ( ! $this->cache_index_dirty ) { 1081 return; 1082 } 1083 1010 1084 if ( function_exists( 'update_option' ) ) { 1011 update_option( self::CACHE_INDEX_OPTION, $index, false ); 1012 } 1085 update_option( self::CACHE_INDEX_OPTION, $this->cache_index_buffer, false ); 1086 } 1087 1088 $this->cache_index_dirty = false; 1089 $this->cache_index_buffer = null; 1013 1090 } 1014 1091 -
markdown-renderer-for-github/trunk/includes/diagram/class-gfmr-chart-image-handler.php
r3559415 r3657956 192 192 if ( ! is_user_logged_in() && ! $this->check_ajax_rate_limit() ) { 193 193 wp_send_json_error( array( 'message' => 'Rate limit exceeded' ), 429 ); 194 } 195 196 // Issue #1420: a page cached (or merely left open) from before baking was 197 // switched off still carries a valid nonce, so the nonce alone does not 198 // prove the write is wanted. Refuse it here too -- an entry nothing reads 199 // is pure cache pressure, and it silently resurrects the baked image the 200 // moment someone flips baking back on. 201 if ( class_exists( __NAMESPACE__ . '\\GFMR_Settings' ) 202 && ! GFMR_Settings::get_instance()->is_chart_image_bake_enabled() ) { 203 wp_send_json_error( array( 'message' => 'Chart image baking is disabled' ), 403 ); 194 204 } 195 205 -
markdown-renderer-for-github/trunk/includes/rendering/class-gfmr-renderer.php
r3644434 r3657956 133 133 $this->schema_generator->set_content_analyzer( $this->content_analyzer ); 134 134 135 // WP 6.8+ Speculative Loading : keep heavy diagram pages out of prerender.135 // WP 6.8+ Speculative Loading integration (opt-in exclusion since #1340). 136 136 $this->speculation_rules = new GFMR_Speculation_Rules(); 137 137 … … 197 197 // Unified asset-detection cache invalidation (Issue #642) 198 198 add_action( 'save_post', array( $this, 'invalidate_post_asset_cache' ) ); 199 // WP 6.8+ Speculative Loading: exclude heavy diagram pages from prerender (Issue #647) 199 // WP 6.8+ Speculative Loading: opt-in exclusion of heavy diagram pages 200 // from prerender, plus the one-time cleanup of its path map (#647 / #1340) 200 201 $this->speculation_rules->register(); 201 202 // Site Health: warn when Shiki/Mermaid bundles ship uncompressed (Issue #620) -
markdown-renderer-for-github/trunk/includes/rendering/class-gfmr-ssr-renderer.php
r3635147 r3657956 137 137 * Whether Chart image baking is enabled. 138 138 * 139 * Charts are deterministic and theme-independent, so baking is safe to run 140 * by default. Filterable for opt-out. 139 * Charts are deterministic and theme-independent, so baking is safe -- but 140 * only while nothing needs the live chart. GFMR_Settings owns that decision 141 * (Issue #1420) so this pass, the nonce the front-end warms with, and the 142 * AJAX endpoint that accepts the warm-up cannot drift apart. 141 143 * 142 144 * @return bool True when chart image baking should run. … … 147 149 } 148 150 149 /** 150 * Filter whether Chart.js blocks are baked into cached images on the front-end. 151 * 152 * @since 2.7.0 153 * 154 * @param bool $enabled Default true. 155 */ 156 return (bool) apply_filters( 'gfmr_chart_image_ssr_enabled', true ); 151 return (bool) $this->settings->is_chart_image_bake_enabled(); 157 152 } 158 153 -
markdown-renderer-for-github/trunk/includes/schema/class-gfmr-schema-generator.php
r3595086 r3657956 39 39 * Schema version for cache invalidation 40 40 * 41 * Bumped to 2.0 when language-dependent fields (inLanguage, 42 * mainEntityOfPage, image) were introduced so pre-existing caches are 43 * regenerated instead of emitting stale single-language JSON-LD. 44 * 41 45 * @var string 42 46 */ 43 const SCHEMA_VERSION = ' 1.0';47 const SCHEMA_VERSION = '2.0'; 44 48 45 49 /** … … 121 125 } 122 126 127 // Language-dependent fields (inLanguage, mainEntityOfPage, image) are 128 // resolved per request so a schema cached under another language can 129 // never leak its URL / image / language values into this page's JSON-LD. 130 $schema = $this->apply_language_specific_fields( $schema, $post ); 131 132 /** 133 * Filter the schema before output 134 * 135 * Applied per request after language-dependent fields are resolved, so 136 * integrators can override inLanguage / mainEntityOfPage / image. 137 * 138 * @param array $schema Schema data ready for output. 139 * @param \WP_Post $post Post object. 140 */ 141 $schema = apply_filters( 'gfmr_schema_data', $schema, $post ); 142 123 143 $this->output_json_ld( $schema ); 124 144 … … 184 204 185 205 $schema = array( 186 '@context' => 'https://schema.org', 187 '@type' => $article_type, 206 '@context' => 'https://schema.org', 207 '@type' => $article_type, 208 'inLanguage' => $this->get_in_language(), 188 209 ); 189 210 … … 204 225 $schema['datePublished'] = get_the_date( 'c', $post ); 205 226 $schema['dateModified'] = get_the_modified_date( 'c', $post ); 206 $schema['mainEntityOfPage'] = get_permalink( $post );227 $schema['mainEntityOfPage'] = $this->get_main_entity_url( $post ); 207 228 } 208 229 … … 226 247 } 227 248 249 // The gfmr_schema_data filter is applied at output time (see 250 // maybe_output_schema) so it runs after language-dependent fields are 251 // resolved and can override inLanguage / mainEntityOfPage / image. 252 return $schema; 253 } 254 255 /** 256 * Resolve language-dependent fields (inLanguage, mainEntityOfPage, image) 257 * for output. 258 * 259 * The cached schema may have been generated for a different language; these 260 * fields are re-resolved per request so the page never leaks another 261 * language's canonical URL, featured image or inLanguage value. 262 * 263 * @param mixed $schema Schema data (cached or freshly generated). 264 * @param \WP_Post $post Current post. 265 * @return mixed Resolved schema data (array when the input was an array). 266 */ 267 public function apply_language_specific_fields( $schema, $post ) { 268 if ( ! is_array( $schema ) ) { 269 return $schema; 270 } 271 272 $schema['inLanguage'] = $this->get_in_language(); 273 274 if ( isset( $schema['@type'] ) && 'HowTo' !== $schema['@type'] ) { 275 $schema['mainEntityOfPage'] = $this->get_main_entity_url( $post ); 276 } 277 278 if ( has_post_thumbnail( $post ) ) { 279 $image_url = get_the_post_thumbnail_url( $post, 'full' ); 280 if ( $image_url ) { 281 $schema['image'] = $image_url; 282 } else { 283 unset( $schema['image'] ); 284 } 285 } else { 286 unset( $schema['image'] ); 287 } 288 289 return $schema; 290 } 291 292 /** 293 * Get the URL rewriter instance only when multilingual URLs are active. 294 * 295 * Mirrors GFMR_URL_Rewriter::should_enable(): path mode enabled, no 296 * third-party multilingual plugin, and the feature filter not disabling it. 297 * 298 * @return GFMR_URL_Rewriter|null Rewriter instance, or null when inactive. 299 */ 300 private function get_url_rewriter() { 301 if ( ! class_exists( __NAMESPACE__ . '\\GFMR_URL_Rewriter' ) ) { 302 return null; 303 } 304 305 $rewriter = GFMR_URL_Rewriter::get_instance(); 306 if ( ! $rewriter->is_path_mode_enabled() ) { 307 return null; 308 } 309 if ( GFMR_URL_Rewriter::is_third_party_multilingual_active() ) { 310 return null; 311 } 312 228 313 /** 229 * Filter t he generated schema314 * Filter to enable/disable multilingual URL rewriter 230 315 * 231 * @param array $schema Generated schema. 232 * @param \WP_Post $post Post object. 316 * @since 2.5.0 317 * 318 * @param bool $enabled Whether URL rewriter is enabled. 233 319 */ 234 return apply_filters( 'gfmr_schema_data', $schema, $post ); 320 return apply_filters( 'gfmr_multilingual_url_enabled', true ) ? $rewriter : null; 321 } 322 323 /** 324 * Get the current language code. 325 * 326 * Uses the URL rewriter's active language when multilingual URLs are on, 327 * otherwise falls back to the WordPress site locale. 328 * 329 * @return string Language code. 330 */ 331 private function get_current_language() { 332 $rewriter = $this->get_url_rewriter(); 333 if ( $rewriter ) { 334 return $rewriter->get_current_language(); 335 } 336 return GFMR_Settings::get_locale_lang(); 337 } 338 339 /** 340 * Get the BCP47 language tag for the current language. 341 * 342 * ISO 639-1 two-letter codes map 1:1 onto BCP47 primary subtags; a handful 343 * of legacy locale codes WordPress may still emit are normalized. 344 * 345 * @return string BCP47 language tag. 346 */ 347 private function get_in_language() { 348 $lang = $this->get_current_language(); 349 350 $bcp47 = array( 351 'iw' => 'he', // Hebrew (deprecated). 352 'in' => 'id', // Indonesian (deprecated). 353 'ji' => 'yi', // Yiddish (deprecated). 354 'mo' => 'ro', // Moldavian/Moldovan (deprecated). 355 ); 356 357 return isset( $bcp47[ $lang ] ) ? $bcp47[ $lang ] : $lang; 358 } 359 360 /** 361 * Get the mainEntityOfPage URL for a post. 362 * 363 * When multilingual URLs are active this matches the canonical tag emitted 364 * by GFMR_URL_Rewriter for the current language; otherwise (or on failure) 365 * it falls back to get_permalink(). 366 * 367 * @param \WP_Post $post Post object. 368 * @return string URL for the main entity of the page. 369 */ 370 private function get_main_entity_url( $post ) { 371 $rewriter = $this->get_url_rewriter(); 372 if ( $rewriter ) { 373 $url = $rewriter->get_canonical_url( $post->ID, $rewriter->get_current_language() ); 374 if ( is_string( $url ) && '' !== $url ) { 375 return $url; 376 } 377 } 378 return get_permalink( $post ); 235 379 } 236 380 -
markdown-renderer-for-github/trunk/includes/seo/class-gfmr-meta-description.php
r3568791 r3657956 246 246 } 247 247 248 $this->render_tags( $this->get_resolved_description( $post ) ); 249 } 250 251 /** 252 * Resolve the meta description for a post in the current language. 253 * 254 * Public so GFMR_Social_Meta can reuse the exact same value (and the same 255 * `gfmr_meta_description` filter) for og:description / twitter:description, 256 * keeping the description families in agreement. 257 * 258 * @param \WP_Post $post Post object. 259 * @return string Resolved description (may be empty). 260 */ 261 public function get_resolved_description( \WP_Post $post ): string { 248 262 $descriptions = get_post_meta( $post->ID, self::META_KEY, true ); 249 if ( ! is_array( $descriptions ) || empty( $descriptions )) {250 return;263 if ( ! is_array( $descriptions ) ) { 264 $descriptions = array(); 251 265 } 252 266 253 267 $lang = $this->get_current_language(); 254 $description = $this->resolve_description( $descriptions, $lang );268 $description = empty( $descriptions ) ? '' : $this->resolve_description( $descriptions, $lang ); 255 269 256 270 /** … … 263 277 * @param string $lang Current language code. 264 278 */ 265 $description = (string) apply_filters( 'gfmr_meta_description', $description, $post, $lang ); 266 267 $this->render_tags( $description ); 279 return (string) apply_filters( 'gfmr_meta_description', $description, $post, $lang ); 268 280 } 269 281 … … 315 327 printf( '<meta name="description" content="%s" />' . "\n", esc_attr( $description ) ); 316 328 329 // When the full OGP set is enabled (Issue #1342) GFMR_Social_Meta owns the 330 // og:/twitter: description tags, so they are skipped here to avoid emitting 331 // them twice. The filters below still allow either behavior to be forced. 332 $social_owns_description = self::social_meta_owns_description_tags(); 333 317 334 /** 318 335 * Filter whether to output the Open Graph og:description tag. … … 322 339 * @param bool $output Whether to output og:description. 323 340 */ 324 if ( apply_filters( 'gfmr_meta_description_output_og', true) ) {341 if ( apply_filters( 'gfmr_meta_description_output_og', ! $social_owns_description ) ) { 325 342 printf( '<meta property="og:description" content="%s" />' . "\n", esc_attr( $description ) ); 326 343 } … … 333 350 * @param bool $output Whether to output twitter:description. 334 351 */ 335 if ( apply_filters( 'gfmr_meta_description_output_twitter', true) ) {352 if ( apply_filters( 'gfmr_meta_description_output_twitter', ! $social_owns_description ) ) { 336 353 printf( '<meta name="twitter:description" content="%s" />' . "\n", esc_attr( $description ) ); 337 354 } 355 } 356 357 /** 358 * Whether GFMR_Social_Meta is emitting the og:/twitter: description tags. 359 * 360 * @since 2.12.0 361 * 362 * @return bool 363 */ 364 private static function social_meta_owns_description_tags(): bool { 365 return class_exists( __NAMESPACE__ . '\\GFMR_Social_Meta' ) 366 && GFMR_Social_Meta::owns_description_tags(); 338 367 } 339 368 -
markdown-renderer-for-github/trunk/includes/shared/class-gfmr-core-bootstrap.php
r3644434 r3657956 98 98 ); 99 99 100 // Open Graph / Twitter card output (Issue #1342): shares the meta 101 // description suppression gates and takes ownership of og:description. 102 add_action( 103 'init', 104 function () { 105 if ( class_exists( 'Wakalab\\WpGfmRenderer\\GFMR_Social_Meta' ) ) { 106 GFMR_Social_Meta::get_instance()->init(); 107 } 108 }, 109 5 110 ); 111 100 112 // Per-language featured images (Issue #428): registers post meta on 101 113 // 'init' and, when enabled, the editor panel + post_thumbnail_id -
markdown-renderer-for-github/trunk/includes/shared/class-gfmr-settings-writer.php
r3630969 r3657956 67 67 return new \WP_Error( 68 68 'gfmr_no_changes', 69 'No settings changes provided. Pass {"changes": { "key": value, ... }}.' 69 'No settings changes provided. Pass {"changes": { "key": value, ... }}.', 70 array( 'status' => 400 ) 70 71 ); 71 72 } -
markdown-renderer-for-github/trunk/includes/uninstall/class-gfmr-uninstaller.php
r3644434 r3657956 73 73 'gfmr_ssr_onboarding_dismissed', 74 74 'gfmr_prerender_excluded_paths', 75 'gfmr_prerender_map_cleaned', 75 76 'gfmr_license_data', 76 77 'gfmr_license_last_validated', -
markdown-renderer-for-github/trunk/languages/markdown-renderer-for-github-ja.po
r3644434 r3657956 2125 2125 #: plugins/pro/markdown-renderer-for-github-pro/includes/core/asset/class-gfmr-compression-health.php:88 2126 2126 msgid "Diagram libraries served compressed" 2127 msgstr " "2127 msgstr "図表ライブラリの圧縮配信" 2128 2128 2129 2129 #: includes/asset/class-gfmr-compression-health.php:167 2130 2130 #: plugins/pro/markdown-renderer-for-github-pro/includes/core/asset/class-gfmr-compression-health.php:167 2131 2131 msgid "Performance" 2132 msgstr " "2132 msgstr "パフォーマンス" 2133 2133 2134 2134 #: includes/asset/class-gfmr-compression-health.php:185 2135 2135 #: plugins/pro/markdown-renderer-for-github-pro/includes/core/asset/class-gfmr-compression-health.php:185 2136 2136 msgid "Diagram libraries are served compressed" 2137 msgstr " "2137 msgstr "図表ライブラリは圧縮して配信されています" 2138 2138 2139 2139 #: includes/asset/class-gfmr-compression-health.php:188 … … 2142 2142 "Shiki and Mermaid bundles are delivered with gzip or Brotli compression, so " 2143 2143 "visitors download only a fraction of their raw size." 2144 msgstr " "2144 msgstr "Shiki と Mermaid のバンドルは gzip または Brotli 圧縮で配信されているため、訪問者は元のサイズのごく一部だけをダウンロードします。" 2145 2145 2146 2146 #: includes/asset/class-gfmr-compression-health.php:197 2147 2147 #: plugins/pro/markdown-renderer-for-github-pro/includes/core/asset/class-gfmr-compression-health.php:197 2148 2148 msgid "Compression of diagram libraries could not be verified" 2149 msgstr " "2149 msgstr "図表ライブラリの圧縮を確認できませんでした" 2150 2150 2151 2151 #: includes/asset/class-gfmr-compression-health.php:200 … … 2156 2156 "private network this is expected; otherwise, confirm your web server " 2157 2157 "compresses static JavaScript." 2158 msgstr " "2158 msgstr "プラグインは、サイズの大きい図表ライブラリが gzip または Brotli 圧縮で配信されているかを確認できませんでした。サイトがプライベートネットワーク経由でのみ到達可能な場合はこれが正常です。それ以外の場合は、Web サーバーが静的な JavaScript を圧縮しているか確認してください。" 2159 2159 2160 2160 #. translators: %s: comma-separated library names. … … 2163 2163 #, php-format 2164 2164 msgid "Unverified: %s" 2165 msgstr " "2165 msgstr "未確認: %s" 2166 2166 2167 2167 #. translators: 1: library name, 2: raw size, 3: gzip size. … … 2170 2170 #, php-format 2171 2171 msgid "%1$s — %2$s uncompressed vs ~%3$s gzipped" 2172 msgstr " "2172 msgstr "%1$s — 非圧縮 %2$s に対し gzip 圧縮時は約 %3$s" 2173 2173 2174 2174 #: includes/asset/class-gfmr-compression-health.php:232 2175 2175 #: plugins/pro/markdown-renderer-for-github-pro/includes/core/asset/class-gfmr-compression-health.php:232 2176 2176 msgid "Diagram libraries are served uncompressed" 2177 msgstr " "2177 msgstr "図表ライブラリが非圧縮で配信されています" 2178 2178 2179 2179 #: includes/asset/class-gfmr-compression-health.php:235 … … 2182 2182 "Your web server is sending these large libraries without gzip or Brotli " 2183 2183 "compression, forcing visitors to download the full raw payload:" 2184 msgstr " "2184 msgstr "Web サーバーがこれらの大きなライブラリを gzip や Brotli 圧縮なしで送信しているため、訪問者は非圧縮の全データをダウンロードすることになります。" 2185 2185 2186 2186 #: includes/asset/class-gfmr-compression-health.php:248 … … 2190 2190 "example mod_deflate or mod_brotli on Apache, or the gzip / brotli directives " 2191 2191 "on nginx. Most managed hosts and CDNs enable this by default." 2192 msgstr " "2192 msgstr "Web サーバー側で静的な JavaScript の圧縮を有効にしてください — 例えば Apache の mod_deflate や mod_brotli、nginx の gzip / brotli ディレクティブなどです。多くのマネージドホスティングや CDN ではこれが既定で有効になっています。" 2193 2193 2194 2194 #: includes/diagram/class-gfmr-mermaid-ssr-handler.php:138 … … 2242 2242 #: plugins/pro/markdown-renderer-for-github-pro/includes/core/licensing/class-gfmr-license-manager.php:238 2243 2243 msgid "License removed locally but server deactivation may have failed." 2244 msgstr " "2244 msgstr "ライセンスをローカルから削除しましたが、サーバー側の無効化に失敗した可能性があります。" 2245 2245 2246 2246 #: includes/licensing/class-gfmr-license-manager.php:254 … … 2311 2311 #: plugins/pro/markdown-renderer-for-github-pro/includes/core/shared/trait-gfmr-premium-feature-gate.php:209 2312 2312 msgid "Licensed Pro Version" 2313 msgstr " "2313 msgstr "ライセンス認証済み Pro 版" 2314 2314 2315 2315 #: includes/shared/trait-gfmr-premium-feature-gate.php:210 2316 2316 #: plugins/pro/markdown-renderer-for-github-pro/includes/core/shared/trait-gfmr-premium-feature-gate.php:210 2317 2317 msgid "Pro" 2318 msgstr " "2318 msgstr "Pro" 2319 2319 2320 2320 #. translators: %s: feature name … … 2323 2323 #, php-format 2324 2324 msgid "%s is a Pro feature. Upgrade to unlock." 2325 msgstr " "2325 msgstr "%s は Pro 機能です。アップグレードすると利用できます。" 2326 2326 2327 2327 #: includes/shared/trait-gfmr-premium-feature-gate.php:238 … … 4093 4093 msgid "Choose the Mermaid theme on the Interactive Diagrams settings tab. The default Follow code theme option follows the resolved code theme and the visitor OS color preference. A diagram-level init directive or YAML frontmatter theme takes priority." 4094 4094 msgstr "インタラクティブ図表の設定タブで Mermaid テーマを選択できます。既定の「コードテーマに追従」は、解決済みのコードテーマと閲覧者の OS 配色設定に追従します。図ごとの init ディレクティブまたは YAML frontmatter のテーマが優先されます。" 4095 4096 #: includes/admin/class-gfmr-settings-registry.php 4097 msgid "Open Graph / Twitter Cards" 4098 msgstr "OGP / Twitter カード" 4099 4100 #: includes/admin/class-gfmr-settings-renderer.php 4101 msgid "Output Open Graph and Twitter card meta tags" 4102 msgstr "OGP と Twitter カードの meta タグを出力する" 4103 4104 #: includes/admin/class-gfmr-settings-renderer.php 4105 msgid "Adds og:title, og:type, og:url, og:site_name, og:locale, og:image and twitter:card to single posts and pages. The URL and image follow the current language. Output is automatically skipped when a dedicated SEO plugin (Yoast, Rank Math, SEOPress, All in One SEO) is active." 4106 msgstr "個別の投稿・固定ページに og:title・og:type・og:url・og:site_name・og:locale・og:image・twitter:card を追加します。URL と画像は現在の言語に追従します。専用の SEO プラグイン(Yoast、Rank Math、SEOPress、All in One SEO)が有効な場合は自動的に出力を抑制します。" 4107 4108 #: includes/admin/class-gfmr-manual-renderer.php 4109 msgid "Open Graph / Twitter cards" 4110 msgstr "OGP / Twitter カード" -
markdown-renderer-for-github/trunk/markdown-renderer-for-github.php
r3644434 r3657956 3 3 * Plugin Name: Markdown Renderer for GitHub 4 4 * Description: Renders GFM (GitHub Flavored Markdown) content beautifully on the front end using JavaScript libraries. It supports syntax highlighting for code blocks and diagram rendering with Mermaid.js. 5 * Version: 2.11. 75 * Version: 2.11.8 6 6 * Requires at least: 6.8 7 7 * Requires PHP: 8.2 8 * Tested up to: 7. 08 * Tested up to: 7.1 9 9 * Author: Wakalab 10 10 * Author URI: https://wakalab.dev/ … … 47 47 48 48 // Define new prefixed constants (WordPress.org requirement compliance) 49 define( 'GFMR_VERSION', '2.11. 7' );49 define( 'GFMR_VERSION', '2.11.8' ); 50 50 define( 'GFMR_PLUGIN_FILE', __FILE__ ); 51 51 define( 'GFMR_SLUG', 'markdown-renderer-for-github' ); -
markdown-renderer-for-github/trunk/readme.txt
r3644434 r3657956 3 3 Tags: markdown, github, syntax-highlighting, mermaid, documentation 4 4 Requires at least: 6.8 5 Tested up to: 7. 05 Tested up to: 7.1 6 6 Requires PHP: 8.2 7 Stable tag: 2.11. 77 Stable tag: 2.11.8 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 111 111 112 112 == Changelog == 113 114 = 2.11.8 = 115 * add WordPress 7.1 beta compatibility tracking 116 * add Open Graph / Twitter card meta tag output 117 * declare WordPress 7.1 compatibility 118 * avoid loading Shiki bundle on main thread when Worker can highlight 119 * buffer cache index writes and flush once per request 120 * defer diagram init during prerender instead of excluding pages (#1340) 121 * gate copy-button, math and worker-manager JS on content detection 122 * reserve diagram height while prerendering to avoid activation layout shift 123 * prevent premature image upload completion and verify PlantUML iframe reach 124 * harden WP 7.1 verification findings (auth-state, fresh-env init, ability error status) 125 * sync data-gfmr-language attribute between Worker and main-thread highlight paths 126 * stop chart image baking from disabling the interactive chart toolbar 113 127 114 128 = 2.11.7 = … … 297 311 * clean up release lock via EXIT trap on early abort 298 312 299 = 2.8.1 =300 * improve inline code contrast and stabilize tests301 * align diagram rendering layouts302 * repair mermaid state diagram styles303 * preserve mermaid flowchart polygon transforms304 * preserve mermaid flowchart path transforms305 * keep wide mermaid diagrams readable306 * fit wide mermaid diagrams to container307 * center chart preview images308 * update mermaid server privacy gate live309 310 313 == Upgrade Notice == 311 314 -
markdown-renderer-for-github/trunk/vendor/autoload.php
r3571618 r3657956 20 20 require_once __DIR__ . '/composer/autoload_real.php'; 21 21 22 return ComposerAutoloaderInit d00bbcd83f06b49c37f44e83b08dc608::getLoader();22 return ComposerAutoloaderInit5768a5eddd0dc982c832fec9f3671a54::getLoader(); -
markdown-renderer-for-github/trunk/vendor/composer/autoload_classmap.php
r3644434 r3657956 197 197 'League\\CommonMark\\Extension\\Mention\\MentionExtension' => $vendorDir . '/league/commonmark/src/Extension/Mention/MentionExtension.php', 198 198 'League\\CommonMark\\Extension\\Mention\\MentionParser' => $vendorDir . '/league/commonmark/src/Extension/Mention/MentionParser.php', 199 'League\\CommonMark\\Extension\\NormalizeHeadings\\NormalizeHeadingsExtension' => $vendorDir . '/league/commonmark/src/Extension/NormalizeHeadings/NormalizeHeadingsExtension.php', 200 'League\\CommonMark\\Extension\\NormalizeHeadings\\NormalizeHeadingsProcessor' => $vendorDir . '/league/commonmark/src/Extension/NormalizeHeadings/NormalizeHeadingsProcessor.php', 199 201 'League\\CommonMark\\Extension\\SmartPunct\\DashParser' => $vendorDir . '/league/commonmark/src/Extension/SmartPunct/DashParser.php', 200 202 'League\\CommonMark\\Extension\\SmartPunct\\EllipsesParser' => $vendorDir . '/league/commonmark/src/Extension/SmartPunct/EllipsesParser.php', … … 210 212 'League\\CommonMark\\Extension\\TableOfContents\\Node\\TableOfContents' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/Node/TableOfContents.php', 211 213 'League\\CommonMark\\Extension\\TableOfContents\\Node\\TableOfContentsPlaceholder' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/Node/TableOfContentsPlaceholder.php', 214 'League\\CommonMark\\Extension\\TableOfContents\\Node\\TableOfContentsReference' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/Node/TableOfContentsReference.php', 212 215 'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\AsIsNormalizerStrategy' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/Normalizer/AsIsNormalizerStrategy.php', 213 216 'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\FlatNormalizerStrategy' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/Normalizer/FlatNormalizerStrategy.php', … … 220 223 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsPlaceholderParser' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsPlaceholderParser.php', 221 224 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsPlaceholderRenderer' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsPlaceholderRenderer.php', 225 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsReferenceRenderer' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsReferenceRenderer.php', 226 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsRenderCache' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsRenderCache.php', 222 227 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsRenderer' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsRenderer.php', 223 228 'League\\CommonMark\\Extension\\Table\\Table' => $vendorDir . '/league/commonmark/src/Extension/Table/Table.php', … … 373 378 'Nette\\Utils\\Callback' => $vendorDir . '/nette/utils/src/Utils/Callback.php', 374 379 'Nette\\Utils\\DateTime' => $vendorDir . '/nette/utils/src/Utils/DateTime.php', 380 'Nette\\Utils\\DateTimeImmutable' => $vendorDir . '/nette/utils/src/Utils/DateTimeImmutable.php', 375 381 'Nette\\Utils\\FileInfo' => $vendorDir . '/nette/utils/src/Utils/FileInfo.php', 376 382 'Nette\\Utils\\FileSystem' => $vendorDir . '/nette/utils/src/Utils/FileSystem.php', … … 481 487 'Wakalab\\WpGfmRenderer\\GFMR_Settings_Schema' => $baseDir . '/includes/admin/class-gfmr-settings-schema.php', 482 488 'Wakalab\\WpGfmRenderer\\GFMR_Settings_Writer' => $baseDir . '/includes/shared/class-gfmr-settings-writer.php', 489 'Wakalab\\WpGfmRenderer\\GFMR_Social_Meta' => $baseDir . '/includes/seo/class-gfmr-social-meta.php', 483 490 'Wakalab\\WpGfmRenderer\\GFMR_Speculation_Rules' => $baseDir . '/includes/asset/class-gfmr-speculation-rules.php', 484 491 'Wakalab\\WpGfmRenderer\\GFMR_URL_Rewriter' => $baseDir . '/includes/multilingual/class-gfmr-url-rewriter.php', -
markdown-renderer-for-github/trunk/vendor/composer/autoload_real.php
r3571618 r3657956 3 3 // autoload_real.php @generated by Composer 4 4 5 class ComposerAutoloaderInit d00bbcd83f06b49c37f44e83b08dc6085 class ComposerAutoloaderInit5768a5eddd0dc982c832fec9f3671a54 6 6 { 7 7 private static $loader; … … 25 25 require __DIR__ . '/platform_check.php'; 26 26 27 spl_autoload_register(array('ComposerAutoloaderInit d00bbcd83f06b49c37f44e83b08dc608', 'loadClassLoader'), true, true);27 spl_autoload_register(array('ComposerAutoloaderInit5768a5eddd0dc982c832fec9f3671a54', 'loadClassLoader'), true, true); 28 28 self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); 29 spl_autoload_unregister(array('ComposerAutoloaderInit d00bbcd83f06b49c37f44e83b08dc608', 'loadClassLoader'));29 spl_autoload_unregister(array('ComposerAutoloaderInit5768a5eddd0dc982c832fec9f3671a54', 'loadClassLoader')); 30 30 31 31 require __DIR__ . '/autoload_static.php'; 32 call_user_func(\Composer\Autoload\ComposerStaticInit d00bbcd83f06b49c37f44e83b08dc608::getInitializer($loader));32 call_user_func(\Composer\Autoload\ComposerStaticInit5768a5eddd0dc982c832fec9f3671a54::getInitializer($loader)); 33 33 34 34 $loader->register(true); 35 35 36 $filesToLoad = \Composer\Autoload\ComposerStaticInit d00bbcd83f06b49c37f44e83b08dc608::$files;36 $filesToLoad = \Composer\Autoload\ComposerStaticInit5768a5eddd0dc982c832fec9f3671a54::$files; 37 37 $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { 38 38 if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { -
markdown-renderer-for-github/trunk/vendor/composer/autoload_static.php
r3644434 r3657956 5 5 namespace Composer\Autoload; 6 6 7 class ComposerStaticInit d00bbcd83f06b49c37f44e83b08dc6087 class ComposerStaticInit5768a5eddd0dc982c832fec9f3671a54 8 8 { 9 9 public static $files = array ( … … 270 270 'League\\CommonMark\\Extension\\Mention\\MentionExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Mention/MentionExtension.php', 271 271 'League\\CommonMark\\Extension\\Mention\\MentionParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Mention/MentionParser.php', 272 'League\\CommonMark\\Extension\\NormalizeHeadings\\NormalizeHeadingsExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/NormalizeHeadings/NormalizeHeadingsExtension.php', 273 'League\\CommonMark\\Extension\\NormalizeHeadings\\NormalizeHeadingsProcessor' => __DIR__ . '/..' . '/league/commonmark/src/Extension/NormalizeHeadings/NormalizeHeadingsProcessor.php', 272 274 'League\\CommonMark\\Extension\\SmartPunct\\DashParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/SmartPunct/DashParser.php', 273 275 'League\\CommonMark\\Extension\\SmartPunct\\EllipsesParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/SmartPunct/EllipsesParser.php', … … 283 285 'League\\CommonMark\\Extension\\TableOfContents\\Node\\TableOfContents' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/Node/TableOfContents.php', 284 286 'League\\CommonMark\\Extension\\TableOfContents\\Node\\TableOfContentsPlaceholder' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/Node/TableOfContentsPlaceholder.php', 287 'League\\CommonMark\\Extension\\TableOfContents\\Node\\TableOfContentsReference' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/Node/TableOfContentsReference.php', 285 288 'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\AsIsNormalizerStrategy' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/Normalizer/AsIsNormalizerStrategy.php', 286 289 'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\FlatNormalizerStrategy' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/Normalizer/FlatNormalizerStrategy.php', … … 293 296 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsPlaceholderParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsPlaceholderParser.php', 294 297 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsPlaceholderRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsPlaceholderRenderer.php', 298 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsReferenceRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsReferenceRenderer.php', 299 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsRenderCache' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsRenderCache.php', 295 300 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsRenderer.php', 296 301 'League\\CommonMark\\Extension\\Table\\Table' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Table/Table.php', … … 446 451 'Nette\\Utils\\Callback' => __DIR__ . '/..' . '/nette/utils/src/Utils/Callback.php', 447 452 'Nette\\Utils\\DateTime' => __DIR__ . '/..' . '/nette/utils/src/Utils/DateTime.php', 453 'Nette\\Utils\\DateTimeImmutable' => __DIR__ . '/..' . '/nette/utils/src/Utils/DateTimeImmutable.php', 448 454 'Nette\\Utils\\FileInfo' => __DIR__ . '/..' . '/nette/utils/src/Utils/FileInfo.php', 449 455 'Nette\\Utils\\FileSystem' => __DIR__ . '/..' . '/nette/utils/src/Utils/FileSystem.php', … … 554 560 'Wakalab\\WpGfmRenderer\\GFMR_Settings_Schema' => __DIR__ . '/../..' . '/includes/admin/class-gfmr-settings-schema.php', 555 561 'Wakalab\\WpGfmRenderer\\GFMR_Settings_Writer' => __DIR__ . '/../..' . '/includes/shared/class-gfmr-settings-writer.php', 562 'Wakalab\\WpGfmRenderer\\GFMR_Social_Meta' => __DIR__ . '/../..' . '/includes/seo/class-gfmr-social-meta.php', 556 563 'Wakalab\\WpGfmRenderer\\GFMR_Speculation_Rules' => __DIR__ . '/../..' . '/includes/asset/class-gfmr-speculation-rules.php', 557 564 'Wakalab\\WpGfmRenderer\\GFMR_URL_Rewriter' => __DIR__ . '/../..' . '/includes/multilingual/class-gfmr-url-rewriter.php', … … 563 570 { 564 571 return \Closure::bind(function () use ($loader) { 565 $loader->prefixLengthsPsr4 = ComposerStaticInit d00bbcd83f06b49c37f44e83b08dc608::$prefixLengthsPsr4;566 $loader->prefixDirsPsr4 = ComposerStaticInit d00bbcd83f06b49c37f44e83b08dc608::$prefixDirsPsr4;567 $loader->prefixesPsr0 = ComposerStaticInit d00bbcd83f06b49c37f44e83b08dc608::$prefixesPsr0;568 $loader->classMap = ComposerStaticInit d00bbcd83f06b49c37f44e83b08dc608::$classMap;572 $loader->prefixLengthsPsr4 = ComposerStaticInit5768a5eddd0dc982c832fec9f3671a54::$prefixLengthsPsr4; 573 $loader->prefixDirsPsr4 = ComposerStaticInit5768a5eddd0dc982c832fec9f3671a54::$prefixDirsPsr4; 574 $loader->prefixesPsr0 = ComposerStaticInit5768a5eddd0dc982c832fec9f3671a54::$prefixesPsr0; 575 $loader->classMap = ComposerStaticInit5768a5eddd0dc982c832fec9f3671a54::$classMap; 569 576 570 577 }, null, ClassLoader::class); -
markdown-renderer-for-github/trunk/vendor/composer/installed.json
r3571618 r3657956 81 81 { 82 82 "name": "league/commonmark", 83 "version": "2. 8.2",84 "version_normalized": "2. 8.2.0",83 "version": "2.10.0", 84 "version_normalized": "2.10.0.0", 85 85 "source": { 86 86 "type": "git", 87 87 "url": "https://github.com/thephpleague/commonmark.git", 88 "reference": " 59fb075d2101740c337c7216e3f32b36c204218b"89 }, 90 "dist": { 91 "type": "zip", 92 "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/ 59fb075d2101740c337c7216e3f32b36c204218b",93 "reference": " 59fb075d2101740c337c7216e3f32b36c204218b",88 "reference": "d2d1aa8b35e072966c89bc0c66cf926e56767dc4" 89 }, 90 "dist": { 91 "type": "zip", 92 "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d2d1aa8b35e072966c89bc0c66cf926e56767dc4", 93 "reference": "d2d1aa8b35e072966c89bc0c66cf926e56767dc4", 94 94 "shasum": "" 95 95 }, … … 113 113 "michelf/php-markdown": "^1.4 || ^2.0", 114 114 "nyholm/psr7": "^1.5", 115 "phpstan/phpstan": "^ 1.8.2",116 "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0 ",115 "phpstan/phpstan": "^2.0.0", 116 "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0 || ^12.0.0 || ^13.0.0", 117 117 "scrutinizer/ocular": "^1.8.1", 118 118 "symfony/finder": "^5.3 | ^6.0 | ^7.0 || ^8.0", … … 125 125 "symfony/yaml": "v2.3+ required if using the Front Matter extension" 126 126 }, 127 "time": "2026-0 3-19T13:16:38+00:00",127 "time": "2026-08-11T16:06:25+00:00", 128 128 "type": "library", 129 129 "extra": { 130 130 "branch-alias": { 131 "dev-main": "2. 9-dev"131 "dev-main": "2.11-dev" 132 132 } 133 133 }, … … 346 346 { 347 347 "name": "nette/utils", 348 "version": "v4.1. 4",349 "version_normalized": "4.1. 4.0",348 "version": "v4.1.5", 349 "version_normalized": "4.1.5.0", 350 350 "source": { 351 351 "type": "git", 352 352 "url": "https://github.com/nette/utils.git", 353 "reference": " 7da6c396d7ebe142bc857c20479d5e70a5e1aac7"354 }, 355 "dist": { 356 "type": "zip", 357 "url": "https://api.github.com/repos/nette/utils/zipball/ 7da6c396d7ebe142bc857c20479d5e70a5e1aac7",358 "reference": " 7da6c396d7ebe142bc857c20479d5e70a5e1aac7",353 "reference": "b043439dbdf954e6c28b5ea7e34b0100f83165e0" 354 }, 355 "dist": { 356 "type": "zip", 357 "url": "https://api.github.com/repos/nette/utils/zipball/b043439dbdf954e6c28b5ea7e34b0100f83165e0", 358 "reference": "b043439dbdf954e6c28b5ea7e34b0100f83165e0", 359 359 "shasum": "" 360 360 }, … … 376 376 "suggest": { 377 377 "ext-gd": "to use Image", 378 "ext-iconv": "to use Strings:: webalize(), toAscii(), chr() and reverse()",378 "ext-iconv": "to use Strings::chr(), ord() and reverse()", 379 379 "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", 380 380 "ext-json": "to use Nette\\Utils\\Json", … … 382 382 "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" 383 383 }, 384 "time": "2026-0 5-11T20:49:54+00:00",384 "time": "2026-07-17T23:02:45+00:00", 385 385 "type": "library", 386 386 "extra": { … … 434 434 "support": { 435 435 "issues": "https://github.com/nette/utils/issues", 436 "source": "https://github.com/nette/utils/tree/v4.1. 4"436 "source": "https://github.com/nette/utils/tree/v4.1.5" 437 437 }, 438 438 "install-path": "../nette/utils" … … 574 574 { 575 575 "name": "symfony/deprecation-contracts", 576 "version": "v3.7. 0",577 "version_normalized": "3.7. 0.0",576 "version": "v3.7.1", 577 "version_normalized": "3.7.1.0", 578 578 "source": { 579 579 "type": "git", 580 580 "url": "https://github.com/symfony/deprecation-contracts.git", 581 "reference": " 50f59d1f3ca46d41ac911f97a78626b6756af35b"582 }, 583 "dist": { 584 "type": "zip", 585 "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/ 50f59d1f3ca46d41ac911f97a78626b6756af35b",586 "reference": " 50f59d1f3ca46d41ac911f97a78626b6756af35b",581 "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d" 582 }, 583 "dist": { 584 "type": "zip", 585 "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/f3202fa1b5097b0af062dc978b32ecf63404e31d", 586 "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d", 587 587 "shasum": "" 588 588 }, … … 590 590 "php": ">=8.1" 591 591 }, 592 "time": "2026-0 4-13T15:52:40+00:00",592 "time": "2026-06-05T06:23:12+00:00", 593 593 "type": "library", 594 594 "extra": { … … 624 624 "homepage": "https://symfony.com", 625 625 "support": { 626 "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7. 0"626 "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.1" 627 627 }, 628 628 "funding": [ -
markdown-renderer-for-github/trunk/vendor/composer/installed.php
r3644434 r3657956 2 2 'root' => array( 3 3 'name' => 'my-biz-dev/markdown-renderer-for-github', 4 'pretty_version' => '2.11. 7',5 'version' => '2.11. 7.0',4 'pretty_version' => '2.11.8', 5 'version' => '2.11.8.0', 6 6 'reference' => null, 7 7 'type' => 'library', … … 21 21 ), 22 22 'league/commonmark' => array( 23 'pretty_version' => '2. 8.2',24 'version' => '2. 8.2.0',25 'reference' => ' 59fb075d2101740c337c7216e3f32b36c204218b',23 'pretty_version' => '2.10.0', 24 'version' => '2.10.0.0', 25 'reference' => 'd2d1aa8b35e072966c89bc0c66cf926e56767dc4', 26 26 'type' => 'library', 27 27 'install_path' => __DIR__ . '/../league/commonmark', … … 39 39 ), 40 40 'my-biz-dev/markdown-renderer-for-github' => array( 41 'pretty_version' => '2.11. 7',42 'version' => '2.11. 7.0',41 'pretty_version' => '2.11.8', 42 'version' => '2.11.8.0', 43 43 'reference' => null, 44 44 'type' => 'library', … … 57 57 ), 58 58 'nette/utils' => array( 59 'pretty_version' => 'v4.1. 4',60 'version' => '4.1. 4.0',61 'reference' => ' 7da6c396d7ebe142bc857c20479d5e70a5e1aac7',59 'pretty_version' => 'v4.1.5', 60 'version' => '4.1.5.0', 61 'reference' => 'b043439dbdf954e6c28b5ea7e34b0100f83165e0', 62 62 'type' => 'library', 63 63 'install_path' => __DIR__ . '/../nette/utils', … … 84 84 ), 85 85 'symfony/deprecation-contracts' => array( 86 'pretty_version' => 'v3.7. 0',87 'version' => '3.7. 0.0',88 'reference' => ' 50f59d1f3ca46d41ac911f97a78626b6756af35b',86 'pretty_version' => 'v3.7.1', 87 'version' => '3.7.1.0', 88 'reference' => 'f3202fa1b5097b0af062dc978b32ecf63404e31d', 89 89 'type' => 'library', 90 90 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Delimiter/DelimiterStack.php
r3571618 r3657956 51 51 $this->missingIndexCache = new \WeakMap(); // @phpstan-ignore-line 52 52 } else { 53 $this->missingIndexCache = new \SplObjectStorage(); // @phpstan-ignore-line53 $this->missingIndexCache = new \SplObjectStorage(); 54 54 } 55 55 } -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Environment/Environment.php
r3571618 r3657956 401 401 $this->injectEnvironmentAndConfigurationIfNeeded($normalizer); 402 402 403 if ($this->config->get('slug_normalizer/unique') !== UniqueSlugNormalizerInterface::DISABLED && ! $normalizer instanceof UniqueSlugNormalizer) { 404 $normalizer = new UniqueSlugNormalizer($normalizer); 405 } 406 407 if ($normalizer instanceof UniqueSlugNormalizer) { 403 if ($this->config->get('slug_normalizer/unique') !== UniqueSlugNormalizerInterface::DISABLED && ! $normalizer instanceof UniqueSlugNormalizerInterface) { 404 /** @var string[] $reserved */ 405 $reserved = $this->config->get('slug_normalizer/reserved'); 406 $normalizer = new UniqueSlugNormalizer($normalizer, $reserved); 407 } 408 409 if ($normalizer instanceof UniqueSlugNormalizerInterface) { 408 410 if ($this->config->get('slug_normalizer/unique') === UniqueSlugNormalizerInterface::PER_DOCUMENT) { 409 411 $this->addEventListener(DocumentParsedEvent::class, [$normalizer, 'clearHistory'], -1000); … … 439 441 'soft_break' => Expect::string("\n"), 440 442 ]), 443 'xml' => Expect::structure([ 444 'max_indentation_level' => Expect::int()->min(0)->default(16), 445 ]), 441 446 'slug_normalizer' => Expect::structure([ 442 447 'instance' => Expect::type(TextNormalizerInterface::class)->default(new SlugNormalizer()), 443 448 'max_length' => Expect::int()->min(0)->default(255), 444 449 'unique' => Expect::anyOf(UniqueSlugNormalizerInterface::DISABLED, UniqueSlugNormalizerInterface::PER_ENVIRONMENT, UniqueSlugNormalizerInterface::PER_DOCUMENT)->default(UniqueSlugNormalizerInterface::PER_DOCUMENT), 450 'reserved' => Expect::listOf('string')->default([]), 445 451 ]), 446 452 ]); -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/Attributes/Event/AttributesListener.php
r3571618 r3657956 25 25 use League\CommonMark\Node\Node; 26 26 27 /** 28 * @psalm-type PendingAttributes = array{node: Node, front: array<string, mixed>, back: array<string, mixed>, classFront: list<string>, classBack: list<string>, hasClass: bool, unfiltered: array<string, mixed>} 29 * 30 * @phpstan-type PendingAttributes = array{node: Node, front: array<string, mixed>, back: array<string, mixed>, classFront: list<string>, classBack: list<string>, hasClass: bool, unfiltered: array<string, mixed>} 31 */ 27 32 final class AttributesListener 28 33 { … … 45 50 public function processDocument(DocumentParsedEvent $event): void 46 51 { 52 // Targets already worked out for attribute blocks we walked past; see findTargetAndDirection() 53 /** @var \SplObjectStorage<Attributes|AttributesInline, array<Node|string|null>> $resolved */ 54 $resolved = new \SplObjectStorage(); 55 56 /** 57 * Attributes waiting to be written to their target, keyed by target object ID; see 58 * newPendingEntry() for the shape and contribute() for how each node is folded in. 59 * 60 * @var array<int, PendingAttributes> $pending 61 */ 62 $pending = []; 63 47 64 foreach ($event->getDocument()->iterator() as $node) { 48 65 if (! ($node instanceof Attributes || $node instanceof AttributesInline)) { … … 50 67 } 51 68 52 [$target, $direction] = self::findTargetAndDirection($node );69 [$target, $direction] = self::findTargetAndDirection($node, $resolved); 53 70 54 71 if ($target instanceof Node) { … … 58 75 } 59 76 60 if ($direction === self::DIRECTION_SUFFIX) { 61 $attributes = AttributesHelper::mergeAttributes($target, $node->getAttributes()); 77 $id = \spl_object_id($target); 78 if (! isset($pending[$id])) { 79 $pending[$id] = self::newPendingEntry($target); 80 } 81 82 $this->contribute($pending[$id], $node->getAttributes(), $direction === self::DIRECTION_SUFFIX); 83 } 84 85 $node->detach(); 86 } 87 88 foreach ($pending as $entry) { 89 $entry['node']->data->set('attributes', self::assemble($entry)); 90 } 91 } 92 93 /** 94 * Seed an accumulator from whatever the target already carries 95 * 96 * Anything another extension put there takes part in the merges, so it faces the filter too - 97 * but only once the first node has had its say, since whatever that node overwrites never 98 * reaches the filter at all. 99 * 100 * @return PendingAttributes 101 */ 102 private static function newPendingEntry(Node $target): array 103 { 104 /** @var array<string, mixed> $existing */ 105 $existing = (array) $target->data->get('attributes'); 106 107 $entry = ['node' => $target, 'front' => [], 'back' => [], 'classFront' => [], 'classBack' => [], 'hasClass' => false, 'unfiltered' => $existing]; 108 109 foreach ($existing as $name => $value) { 110 if ($name === 'class') { 111 // mergeAttributes() builds the class list by appending to it, so a value with no 112 // classes in it - an empty string, or an empty array - never creates the key at 113 // all, and leaves the target with no class rather than an empty one 114 $classes = AttributesHelper::classList($value); 115 if ($classes === []) { 116 continue; 117 } 118 119 $entry['classBack'] = $classes; 120 $entry['hasClass'] = true; 121 } 122 123 $entry['back'][$name] = $value; 124 } 125 126 return $entry; 127 } 128 129 /** 130 * Fold one node's attributes into the accumulator in time proportional to that node's own 131 * size, reproducing what mergeAttributes() plus filterAttributes() would have produced had 132 * they been handed the whole accumulated dict. 133 * 134 * Both of those are O(size of the accumulator), so calling them once per node - as this used 135 * to - costs O(n^2) for a document that contributes a new key n times. 136 * 137 * @param PendingAttributes $entry 138 * @param array<string, mixed> $attributes 139 * @param bool $suffix Whether the node's attributes lose conflicts to what is already accumulated 140 */ 141 private function contribute(array &$entry, array $attributes, bool $suffix): void 142 { 143 $class = $attributes['class'] ?? null; 144 unset($attributes['class']); 145 146 // Keys whose value this node decides, and which therefore have yet to face the filter 147 $touched = []; 148 149 if ($suffix) { 150 // mergeAttributes() rebuilds the class list before anything else, so merging over an 151 // accumulator that already has one moves it back to the front 152 if ($entry['hasClass']) { 153 self::moveToFront($entry, 'class'); 154 } elseif ($class !== null) { 155 $entry['back']['class'] = null; 156 } 157 158 if ($class !== null) { 159 foreach (AttributesHelper::classList($class) as $c) { 160 $entry['classBack'][] = $c; 161 } 162 163 $entry['hasClass'] = true; 164 $touched['class'] = $class; 165 } 166 167 foreach ($attributes as $name => $value) { 168 // Overwriting leaves a key where it already sits, in front or behind 169 if (\array_key_exists($name, $entry['front'])) { 170 $entry['front'][$name] = $value; 62 171 } else { 63 $attributes = AttributesHelper::mergeAttributes($node->getAttributes(), $target); 64 } 65 66 $target->data->set('attributes', AttributesHelper::filterAttributes($attributes, $this->allowList, $this->allowUnsafeLinks)); 67 } 68 69 $node->detach(); 70 } 71 } 72 73 /** 74 * @param Attributes|AttributesInline $node 172 $entry['back'][$name] = $value; 173 } 174 175 $touched[$name] = $value; 176 } 177 178 $this->filter($entry, $touched); 179 180 return; 181 } 182 183 // This node goes in front of everything accumulated so far. 'front' is kept in reverse, so 184 // the keys most recently moved there are the ones assemble() emits first. 185 if ($class === null && $entry['hasClass']) { 186 self::moveToFront($entry, 'class'); 187 } 188 189 foreach (\array_reverse(\array_keys($attributes)) as $name) { 190 // A key this node shares with the accumulator takes its position from here, but keeps 191 // the value it already had 192 if (\array_key_exists($name, $entry['front']) || \array_key_exists($name, $entry['back'])) { 193 self::moveToFront($entry, $name); 194 195 continue; 196 } 197 198 $entry['front'][$name] = $attributes[$name]; 199 $touched[$name] = $attributes[$name]; 200 } 201 202 if ($class !== null) { 203 self::moveToFront($entry, 'class'); 204 foreach (\array_reverse(AttributesHelper::classList($class)) as $c) { 205 $entry['classFront'][] = $c; 206 } 207 208 $entry['hasClass'] = true; 209 $touched['class'] = $class; 210 } 211 212 $this->filter($entry, $touched); 213 } 214 215 /** 216 * Give a key the frontmost position, keeping whatever value it already had 217 * 218 * @param PendingAttributes $entry 219 */ 220 private static function moveToFront(array &$entry, string $name): void 221 { 222 $value = $entry['front'][$name] ?? $entry['back'][$name] ?? null; 223 unset($entry['front'][$name], $entry['back'][$name]); 224 225 $entry['front'][$name] = $value; 226 } 227 228 /** 229 * Drop whichever of the just-decided keys the filter rejects 230 * 231 * Everything else in the accumulator survived this same filter when it was decided, and the 232 * filter judges each name and value on its own, so re-examining any of it would be wasted. 233 * 234 * @param PendingAttributes $entry 235 * @param array<string, mixed> $touched 236 */ 237 private function filter(array &$entry, array $touched): void 238 { 239 // Whatever the target arrived with has kept its value through this first merge, so it is 240 // being decided now too 241 foreach ($entry['unfiltered'] as $name => $value) { 242 if (\array_key_exists($name, $touched)) { 243 continue; 244 } 245 246 $touched[$name] = $value; 247 } 248 249 $entry['unfiltered'] = []; 250 251 if ($touched === []) { 252 return; 253 } 254 255 $kept = AttributesHelper::filterAttributes($touched, $this->allowList, $this->allowUnsafeLinks); 256 257 foreach (\array_keys($touched) as $name) { 258 if (\array_key_exists($name, $kept)) { 259 continue; 260 } 261 262 if ($name === 'class') { 263 $entry['classFront'] = $entry['classBack'] = []; 264 $entry['hasClass'] = false; 265 } 266 267 // Forget where it sat as well as what it held, so a later node contributing the same 268 // name starts it over at the back 269 unset($entry['front'][$name], $entry['back'][$name]); 270 } 271 } 272 273 /** 274 * @param PendingAttributes $entry 275 * 276 * @return array<string, mixed> 277 */ 278 private static function assemble(array $entry): array 279 { 280 $attributes = \array_merge(\array_reverse($entry['front'], true), $entry['back']); 281 282 if ($entry['hasClass']) { 283 $attributes['class'] = \implode(' ', \array_merge(\array_reverse($entry['classFront']), $entry['classBack'])); 284 } 285 286 return $attributes; 287 } 288 289 /** 290 * @param Attributes|AttributesInline $node 291 * @param \SplObjectStorage<Attributes|AttributesInline, array<Node|string|null>> $resolved 75 292 * 76 293 * @return array<Node|string|null> 77 294 */ 78 private static function findTargetAndDirection($node): array 79 { 295 private static function findTargetAndDirection($node, \SplObjectStorage $resolved): array 296 { 297 if (isset($resolved[$node])) { 298 $result = $resolved[$node]; 299 // Each node is only ever resolved once, so don't keep it alive any longer 300 unset($resolved[$node]); 301 302 return $result; 303 } 304 80 305 $target = null; 81 306 $direction = null; 82 307 $previous = $next = $node; 308 /** @var list<Attributes> $shared */ 309 $shared = []; 83 310 while (true) { 84 311 $previous = self::getPrevious($previous); … … 95 322 96 323 if ($node instanceof AttributesInline && ($previous === null || ($previous instanceof AbstractInline && $node->isBlock()))) { 97 continue; 324 // Once this condition holds it holds for every remaining iteration, as walking 325 // further to the left can only ever yield another inline sibling or null. No 326 // sibling can therefore be chosen, so the target must be the parent; continuing 327 // to walk would only re-scan the remaining siblings for nothing. 328 if (! $node->parent() instanceof FencedCode) { 329 $target = $node->parent(); 330 $direction = self::DIRECTION_SUFFIX; 331 } 332 333 break; 98 334 } 99 335 … … 111 347 break; 112 348 } 113 } 114 115 return [$target, $direction]; 349 350 // Only a TARGET_NEXT block can have a sibling block to walk past, so if that's what 351 // we're looking at then we are one too, which means getPrevious() already returned 352 // null for us and will keep doing so. Neither of us can therefore pick anything up on 353 // the left, and what is left of this walk is the whole of that block's own walk: it 354 // must end up with the same target we do. Remember that instead of re-scanning the 355 // chain once per block. 356 if (! ($next instanceof Attributes) || $next->getTarget() !== Attributes::TARGET_NEXT) { 357 continue; 358 } 359 360 $shared[] = $next; 361 } 362 363 /** @var array<Node|string|null> $result */ 364 $result = [$target, $direction]; 365 foreach ($shared as $sharedNode) { 366 $resolved[$sharedNode] = $result; 367 } 368 369 return $result; 116 370 } 117 371 -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/Attributes/Parser/AttributesBlockContinueParser.php
r3571618 r3657956 32 32 33 33 /** 34 * Every attribute merged so far except the class list, which is accumulated separately and 35 * only takes the placeholder position recorded here. Re-merging the whole dict on every line 36 * would cost O(size of the dict) per line, so a document adding a key per line would be 37 * quadratic; folding each line in on its own is linear. 38 * 39 * @var array<string, mixed> 40 */ 41 private array $attributes = []; 42 43 /** @var list<string> */ 44 private array $classes = []; 45 46 private bool $hasClass = false; 47 48 /** 49 * mergeAttributes() rebuilds the class list before anything else, so any line merged over an 50 * existing list moves it to the front of the result 51 */ 52 private bool $classFirst = false; 53 54 /** 34 55 * @param array<string, mixed> $attributes The attributes identified by the block start parser 35 56 * @param AbstractBlock $container The node we were in when these attributes were discovered … … 40 61 41 62 $this->container = $container; 63 64 $this->absorb($attributes); 42 65 } 43 66 … … 58 81 if ($cursor->isAtEnd() && $attributes !== []) { 59 82 // It does! Merge them into what we parsed previously 60 $this->block->setAttributes(AttributesHelper::mergeAttributes( 61 $this->block->getAttributes(), 62 $attributes 63 )); 83 $this->classFirst = $this->classFirst || $this->hasClass; 84 85 $this->absorb($attributes); 64 86 65 87 // Tell the core parser we've consumed everything … … 76 98 } 77 99 100 /** 101 * Fold one line's attributes into what we've accumulated, in time proportional to that line 102 * 103 * @param array<string, mixed> $attributes 104 */ 105 private function absorb(array $attributes): void 106 { 107 foreach ($attributes as $name => $value) { 108 if ($name !== 'class') { 109 $this->attributes[$name] = $value; 110 111 continue; 112 } 113 114 foreach (AttributesHelper::classList($value) as $class) { 115 $this->classes[] = $class; 116 } 117 118 if ($this->hasClass) { 119 continue; 120 } 121 122 // Hold the spot the joined list will occupy; closeBlock() writes the value 123 $this->attributes['class'] = null; 124 $this->hasClass = true; 125 } 126 } 127 78 128 public function closeBlock(): void 79 129 { 130 $attributes = $this->attributes; 131 if ($this->hasClass) { 132 $class = \implode(' ', $this->classes); 133 if ($this->classFirst) { 134 unset($attributes['class']); 135 $attributes = \array_merge(['class' => $class], $attributes); 136 } else { 137 $attributes['class'] = $class; 138 } 139 } 140 141 $this->block->setAttributes($attributes); 142 80 143 // Attributes appearing at the very end of the document won't have any last lines to check 81 144 // so we can make that determination here -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/Attributes/Util/AttributesHelper.php
r3571618 r3657956 25 25 { 26 26 private const SINGLE_ATTRIBUTE = '\s*([.]-?[_a-z][^\s.}]*|[#][^\s}]+|' . RegexHelper::PARTIAL_ATTRIBUTENAME . RegexHelper::PARTIAL_ATTRIBUTEVALUESPEC . ')\s*'; 27 private const ATTRIBUTE_LIST = '/^{:?(' . self::SINGLE_ATTRIBUTE . ')+}/i'; 27 private const ATTRIBUTE_LIST = '/\G{:?(' . self::SINGLE_ATTRIBUTE . ')+}/i'; 28 29 /** 30 * PCRE's `\s` matches the form feed that PHP's default trim charlist omits, so the 31 * separators SINGLE_ATTRIBUTE accepts must be trimmed with this list instead - otherwise 32 * that byte survives inside an attribute name, where a browser reads it as a separator. 33 */ 34 private const WHITESPACE = " \t\n\r\0\x0B\x0C"; 28 35 29 36 /** … … 47 54 // while dealing with the fact that attributes can technically contain curly braces. 48 55 // So we'll just match the start and end braces up front. 49 $attributeExpression = $cursor->match (self::ATTRIBUTE_LIST);56 $attributeExpression = $cursor->matchInPlace(self::ATTRIBUTE_LIST); 50 57 if ($attributeExpression === null) { 51 58 $cursor->restoreState($state); … … 60 67 /** @var array<string, mixed> $attributes */ 61 68 $attributes = []; 62 while ($attribute = \trim((string) $attributeCursor->match ('/^' . self::SINGLE_ATTRIBUTE . '/i'))) {69 while ($attribute = \trim((string) $attributeCursor->matchInPlace('/\G' . self::SINGLE_ATTRIBUTE . '/i'), self::WHITESPACE)) { 63 70 if ($attribute[0] === '#') { 64 71 $attributes['id'] = \substr($attribute, 1); … … 87 94 } 88 95 89 if (\strtolower(\trim($name )) === 'class') {90 foreach (\array_filter(\explode(' ', \trim($value ))) as $class) {96 if (\strtolower(\trim($name, self::WHITESPACE)) === 'class') { 97 foreach (\array_filter(\explode(' ', \trim($value, self::WHITESPACE))) as $class) { 91 98 $attributes['class'][] = $class; 92 99 } 93 100 } else { 94 $attributes[\trim($name )] = \trim($value);101 $attributes[\trim($name, self::WHITESPACE)] = \trim($value, self::WHITESPACE); 95 102 } 96 103 } … … 120 127 $arg = (array) $arg; 121 128 if (isset($arg['class'])) { 122 if (\is_string($arg['class'])) { 123 $arg['class'] = \array_filter(\explode(' ', \trim($arg['class']))); 124 } 125 126 foreach ($arg['class'] as $class) { 129 foreach (self::classList($arg['class']) as $class) { 127 130 $attributes['class'][] = $class; 128 131 } … … 142 145 143 146 /** 147 * Split a `class` attribute value into the individual classes it contributes to a merge 148 * 149 * @param mixed $class 150 * 151 * @return list<string> 152 */ 153 public static function classList($class): array 154 { 155 if (\is_string($class)) { 156 return \array_values(\array_filter(\explode(' ', \trim($class)))); 157 } 158 159 return \array_values((array) $class); 160 } 161 162 /** 144 163 * @param array<string, mixed> $attributes 145 164 * @param list<string> $allowList … … 152 171 153 172 foreach ($attributes as $name => $value) { 154 $attrNameLower = \strtolower($name); 173 // The checks below compare against literal names, and the renderer emits names 174 // without escaping them, so anything that isn't a well-formed attribute name 175 // would slip past both 176 if (\preg_match('/^' . RegexHelper::PARTIAL_ATTRIBUTENAME . '$/i', (string) $name) !== 1) { 177 unset($attributes[$name]); 178 continue; 179 } 180 181 $attrNameLower = \strtolower((string) $name); 155 182 156 183 // Remove any unsafe links -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/Autolink/UrlAutolinkParser.php
r3571618 r3657956 24 24 25 25 // RegEx adapted from https://github.com/symfony/symfony/blob/6.3/src/Symfony/Component/Validator/Constraints/UrlValidator.php 26 private const REGEX = '~ ^26 private const REGEX = '~ 27 27 ( 28 28 # Must start with a supported scheme + auth, or "www" … … 50 50 (?:\? (?:[\pL\pN\-._\~!$&\'\[\]()*+,;=:@/?]|%%[0-9A-Fa-f]{2})* )? # a query (optional) 51 51 (?:\# (?:[\pL\pN\-._\~!$&\'()*+,;=:@/?]|%%[0-9A-Fa-f]{2})* )? # a fragment (optional) 52 )~ixu ';52 )~ixuA'; 53 53 54 54 /** … … 100 100 } 101 101 102 // Check if we have a valid URL 103 if (! \preg_match($this->finalRegex, $cursor->getRemainder(), $matches)) { 102 // Check if we have a valid URL. The regex is anchored (the "A" modifier) and matched 103 // against the full line at the current byte offset rather than against a fresh copy of 104 // the remaining text. This avoids re-allocating and re-validating (the "u" modifier) the 105 // entire remainder on every prefix occurrence, which would otherwise be quadratic. 106 if (! \preg_match($this->finalRegex, $cursor->getLine(), $matches, 0, $cursor->getBytePosition())) { 104 107 return false; 105 108 } -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/CommonMark/Delimiter/Processor/EmphasisDelimiterProcessor.php
r3571618 r3657956 114 114 $closer->canOpen() ? 'canOpen' : 'cannotOpen', 115 115 $closer->getOriginalLength() % 3, 116 $closer->getLength(), 116 // getDelimiterUse() only ever asks whether the closer's length is >= 2, so lengths 117 // beyond that are interchangeable. Clamping keeps the key space bounded, which is 118 // what makes the delimiter stack's lower-bound cache amortize. 119 \min($closer->getLength(), 2), 117 120 ); 118 121 } -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/CommonMark/Parser/Block/FencedCodeParser.php
r3571618 r3657956 52 52 } 53 53 54 // Skip optional spaces of fence offset 55 // Optimization: don't attempt to match if we're at a non-space position 56 if ($cursor->getNextNonSpacePosition() > $cursor->getPosition()) { 57 $cursor->match('/^ {0,' . $this->block->getOffset() . '}/'); 54 // Skip optional spaces of fence offset, counting columns instead of characters 55 // so that tabs are only partially consumed when needed 56 $fenceOffset = $this->block->getOffset(); 57 while ($fenceOffset > 0 && $cursor->advanceBySpaceOrTab()) { 58 $fenceOffset--; 58 59 } 59 60 -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/CommonMark/Parser/Block/FencedCodeStartParser.php
r3571618 r3657956 28 28 29 29 $indent = $cursor->getIndent(); 30 $fence = $cursor->match ('/^[ \t]*(?:`{3,}(?!.*`)|~{3,})/');30 $fence = $cursor->matchInPlace('/\G[ \t]*(?:`{3,}+(?!.*`)|~{3,})/'); 31 31 if ($fence === null) { 32 32 return BlockStart::none(); -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/CommonMark/Parser/Inline/BacktickParser.php
r3571618 r3657956 57 57 $code = $cursor->getSubstring($currentPosition, $cursor->getPosition() - $currentPosition - \strlen($ticks)); 58 58 59 $c = \ preg_replace('/\n/m', ' ', $code) ?? '';59 $c = \str_replace("\n", ' ', $code); 60 60 61 61 if ( … … 63 63 $c[0] === ' ' && 64 64 \substr($c, -1, 1) === ' ' && 65 \ preg_match('/[^ ]/',$c)65 \strspn($c, ' ') !== \strlen($c) 66 66 ) { 67 67 $c = \substr($c, 1, -1); … … 111 111 } 112 112 113 while ($ticks = $cursor->match ('/`{1,' . self::MAX_BACKTICKS . '}/m')) {113 while ($ticks = $cursor->matchInPlace('/`{1,' . self::MAX_BACKTICKS . '}/')) { 114 114 $numTicks = \strlen($ticks); 115 115 -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/CommonMark/Parser/Inline/CloseBracketParser.php
r3571618 r3657956 182 182 $start = $opener->getPosition(); 183 183 $length = $startPos - $start; 184 185 // spec: A link label can have at most 999 characters inside the square brackets. 186 // ReferenceParser::parseLabel() enforces that when storing definitions, so a longer 187 // span here cannot possibly match one. Rejecting it up-front - before copying and 188 // normalizing the span - is what keeps deeply-nested brackets from being quadratic. 189 if ($length > 999) { 190 $cursor->restoreState($savePos); 191 192 return null; 193 } 184 194 } else { 185 195 $cursor->restoreState($savePos); -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/DefaultAttributes/ApplyDefaultAttributesProcessor.php
r3571618 r3657956 16 16 use League\CommonMark\Event\DocumentParsedEvent; 17 17 use League\CommonMark\Extension\Attributes\Util\AttributesHelper; 18 use League\CommonMark\Node\Node; 18 19 use League\Config\ConfigurationAwareInterface; 19 20 use League\Config\ConfigurationInterface; 21 use League\Config\Exception\InvalidConfigurationException; 20 22 21 23 final class ApplyDefaultAttributesProcessor implements ConfigurationAwareInterface … … 23 25 private ConfigurationInterface $config; 24 26 27 /** 28 * Configured attributes with every callback already resolved to a `Closure`, keyed by node FQCN. 29 * 30 * @var array<string, array<string, mixed>>|null 31 */ 32 private ?array $resolved = null; 33 25 34 public function onDocumentParsed(DocumentParsedEvent $event): void 26 35 { 27 /** @var array<string, array<string, mixed>> $map */ 28 $map = $this->config->get('default_attributes'); 36 if ($this->resolved === null) { 37 $this->resolved = $this->resolveConfiguredAttributes(); 38 } 39 40 $map = $this->resolved; 29 41 30 42 // Don't bother iterating if no default attributes are configured … … 41 53 $newAttributes = []; 42 54 foreach ($attributesToApply as $name => $value) { 43 if ( \is_callable($value)) {55 if ($value instanceof \Closure) { 44 56 $value = $value($node); 45 57 // Callables are allowed to return `null` indicating that no changes should be made … … 63 75 $this->config = $configuration; 64 76 } 77 78 /** 79 * @return array<string, array<string, mixed>> 80 */ 81 private function resolveConfiguredAttributes(): array 82 { 83 /** @var array<string, array<string, mixed>> $map */ 84 $map = $this->config->get('default_attributes/attributes'); 85 $strict = (bool) $this->config->get('default_attributes/strict_callables'); 86 87 $resolved = []; 88 foreach ($map as $class => $attributes) { 89 foreach ($attributes as $name => $value) { 90 $resolved[$class][$name] = self::resolveValue($class, $name, $value, $strict); 91 } 92 } 93 94 return $resolved; 95 } 96 97 /** 98 * @param mixed $value 99 * 100 * @return mixed A `Closure` if the value is a callback, otherwise the literal attribute value 101 */ 102 private static function resolveValue(string $class, string $name, $value, bool $strict) 103 { 104 if ($value instanceof \Closure) { 105 return $value; 106 } 107 108 if (\is_string($value) || \is_array($value)) { 109 // Strings and arrays are how literal attribute values are written, and plenty of them also 110 // name a real function - PHP has a global `link()`, for example 111 if ($strict) { 112 return $value; 113 } 114 115 if (! \is_callable($value)) { 116 return $value; 117 } 118 119 return self::wrapCallable($class, $name, $value, \Closure::fromCallable($value)); 120 } 121 122 return \is_callable($value) ? \Closure::fromCallable($value) : $value; 123 } 124 125 /** 126 * Invoke the callable, replacing a failure with one which names the configuration responsible. 127 * 128 * A value like `'link'` is otherwise invoked and fails deep inside whichever function it collided 129 * with, reporting an argument count the user never wrote. 130 * 131 * @param string|mixed[] $value The callable as it was written in the configuration 132 */ 133 private static function wrapCallable(string $class, string $name, $value, \Closure $callback): \Closure 134 { 135 return static function (Node $node) use ($callback, $class, $name, $value) { 136 try { 137 return $callback($node); 138 } catch (\TypeError $e) { 139 throw new InvalidConfigurationException(\sprintf( 140 'The "%s" attribute configured for %s is %s, which PHP also treats as a callable, so it was ' 141 . 'called with the node and failed: %s. If it was meant to be a literal attribute value instead, ' 142 . 'set "default_attributes/strict_callables" to true.', 143 $name, 144 $class, 145 \is_string($value) ? \sprintf('the string "%s"', $value) : 'an array', 146 $e->getMessage() 147 ), 0, $e); 148 } 149 }; 150 } 65 151 } -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/DefaultAttributes/DefaultAttributesExtension.php
r3571618 r3657956 22 22 final class DefaultAttributesExtension implements ConfigurableExtensionInterface 23 23 { 24 /** 25 * Keys belonging to this extension's own settings rather than to a node class 26 */ 27 private const RESERVED_KEYS = ['attributes' => 0, 'strict_callables' => 0]; 28 24 29 public function configureSchema(ConfigurationBuilderInterface $builder): void 25 30 { 26 $builder->addSchema('default_attributes', Expect::arrayOf( 27 Expect::arrayOf( 28 Expect::type('string|string[]|bool|callable'), // attribute value(s) 29 'string' // attribute name 30 ), 31 'string' // node FQCN 32 )->default([])); 31 $builder->addSchema('default_attributes', Expect::structure([ 32 'attributes' => Expect::arrayOf( 33 Expect::arrayOf( 34 Expect::type('string|string[]|bool|callable'), // attribute value(s) 35 'string' // attribute name 36 ), 37 'string' // node FQCN 38 )->default([]), 39 // @deprecated This option will be removed in 3.0, when only closures and invokable objects 40 // will ever be treated as callbacks. 41 'strict_callables' => Expect::bool()->default(true), 42 ])->before(static function ($value) { 43 if (! \is_array($value)) { 44 return $value; 45 } 46 47 $canonical = \array_intersect_key($value, self::RESERVED_KEYS); 48 $legacy = \array_diff_key($value, self::RESERVED_KEYS); 49 50 if ($legacy === []) { 51 return $value; 52 } 53 54 // Nothing can be merged into an `attributes` which isn't an array; hand it to the schema 55 // as-is so it reports the same validation error it would without the node classes present 56 if (isset($canonical['attributes']) && ! \is_array($canonical['attributes'])) { 57 return $canonical; 58 } 59 60 $canonical['attributes'] = \array_merge($legacy, $canonical['attributes'] ?? []); 61 62 // The flat shape predates this option, so it stays on the legacy callable handling 63 // unless it opts in explicitly. 64 if (! \array_key_exists('strict_callables', $canonical)) { 65 $canonical['strict_callables'] = false; 66 } 67 68 return $canonical; 69 })); 33 70 } 34 71 -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/DescriptionList/Parser/DescriptionStartParser.php
r3571618 r3657956 30 30 31 31 $cursor->advanceToNextNonSpaceOrTab(); 32 if ($cursor->match ('/^:[ \t]+/') === null) {32 if ($cursor->matchInPlace('/\G:[ \t]+/') === null) { 33 33 return BlockStart::none(); 34 34 } -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/Footnote/Event/GatherFootnotesListener.php
r3571618 r3657956 31 31 public function onDocumentParsed(DocumentParsedEvent $event): void 32 32 { 33 $document = $event->getDocument(); 34 $footnotes = []; 33 $document = $event->getDocument(); 34 $footnotes = []; 35 $definitions = []; 36 $discarded = []; 35 37 38 /** @var array<string, Reference[]> $backrefs */ 39 $backrefs = $document->data->get('footnote/backrefs', []); 40 41 /* 42 * A label may be defined more than once. Only the first definition is used, matching how 43 * duplicate link reference definitions are resolved; the rest are discarded below. 44 * 45 * Keeping just one definition per label is also what bounds the work done here: every 46 * definition sharing a label claims that label's entire backref list, so N duplicate 47 * definitions of a label referenced M times would otherwise produce M * N backrefs - a 48 * denial of service vector, since both are attacker-controlled. 49 * 50 * Nodes are collected rather than detached here because detaching mid-iteration would 51 * truncate the walk. 52 */ 36 53 foreach ($document->iterator(NodeIterator::FLAG_BLOCKS_ONLY) as $node) { 37 54 if (! $node instanceof Footnote) { … … 39 56 } 40 57 58 $label = $node->getReference()->getLabel(); 59 if (isset($definitions[$label])) { 60 $discarded[] = $node; 61 62 continue; 63 } 64 65 $definitions[$label] = $node; 66 } 67 68 foreach ($definitions as $node) { 41 69 // Look for existing reference with footnote label 42 70 $ref = $document->getReferenceMap()->get($node->getReference()->getLabel()); … … 50 78 51 79 $key = '#' . $this->config->get('footnote/footnote_id_prefix') . $node->getReference()->getDestination(); 52 if ( $document->data->has($key)) {53 $this->createBackrefs($node, $ document->data->get($key));80 if (isset($backrefs[$key])) { 81 $this->createBackrefs($node, $backrefs[$key]); 54 82 } 83 } 84 85 foreach ($discarded as $duplicate) { 86 $duplicate->detach(); 55 87 } 56 88 -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/Footnote/Event/NumberFootnotesListener.php
r3571618 r3657956 27 27 $usedLabels = []; 28 28 $usedCounters = []; 29 $backrefs = []; 29 30 30 31 foreach ($document->iterator() as $node) { … … 60 61 61 62 /* 62 * Store created references in document for 63 * creating FootnoteBackrefs 63 * Store created references for creating FootnoteBackrefs. 64 * 65 * These are collected into a plain array keyed by the exact destination rather than 66 * written straight into $document->data: destinations are built from user-supplied 67 * labels, and Data treats both "." and "/" as key path delimiters. Using them as 68 * paths would let distinct labels collapse onto a shared entry, or nest one label's 69 * entry inside another's. 64 70 */ 65 $ document->data->append($existingReference->getDestination(), $newReference);71 $backrefs[$existingReference->getDestination()][] = $newReference; 66 72 67 73 $usedLabels[$label] = 1; … … 72 78 } 73 79 } 80 81 $document->data->set('footnote/backrefs', $backrefs); 74 82 } 75 83 } -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/Footnote/FootnoteExtension.php
r3571618 r3657956 45 45 'container_add_hr' => Expect::bool(true), 46 46 'container_class' => Expect::string('footnotes'), 47 'enable_inline_footnotes' => Expect::bool(true), 47 48 'ref_class' => Expect::string('footnote-ref'), 48 49 'ref_id_prefix' => Expect::string('fnref:'), … … 54 55 public function register(EnvironmentBuilderInterface $environment): void 55 56 { 57 if ($environment->getConfiguration()->get('footnote/enable_inline_footnotes')) { 58 $environment->addInlineParser(new AnonymousFootnoteRefParser(), 35); 59 $environment->addEventListener(DocumentParsedEvent::class, [new AnonymousFootnotesListener(), 'onDocumentParsed'], 40); 60 } 61 56 62 $environment->addBlockStartParser(new FootnoteStartParser(), 51); 57 $environment->addInlineParser(new AnonymousFootnoteRefParser(), 35);58 63 $environment->addInlineParser(new FootnoteRefParser(), 51); 59 64 … … 63 68 $environment->addRenderer(FootnoteBackref::class, new FootnoteBackrefRenderer()); 64 69 65 $environment->addEventListener(DocumentParsedEvent::class, [new AnonymousFootnotesListener(), 'onDocumentParsed'], 40);66 70 $environment->addEventListener(DocumentParsedEvent::class, [new FixOrphanedFootnotesAndRefsListener(), 'onDocumentParsed'], 30); 67 71 $environment->addEventListener(DocumentParsedEvent::class, [new NumberFootnotesListener(), 'onDocumentParsed'], 20); -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/FrontMatter/FrontMatterParser.php
r3571618 r3657956 24 24 private FrontMatterDataParserInterface $frontMatterParser; 25 25 26 private const REGEX_FRONT_MATTER = '/ ^---\\R.*?\\R---\\R/s';26 private const REGEX_FRONT_MATTER = '/\G---\\R.*?\\R---\\R/s'; 27 27 28 28 public function __construct(FrontMatterDataParserInterface $frontMatterParser) … … 39 39 40 40 // Locate the front matter 41 $frontMatter = $cursor->match (self::REGEX_FRONT_MATTER);41 $frontMatter = $cursor->matchInPlace(self::REGEX_FRONT_MATTER); 42 42 if ($frontMatter === null) { 43 43 return new MarkdownInputWithFrontMatter($markdownContent); … … 54 54 55 55 // Advance through any remaining newlines which separated the front matter from the Markdown text 56 $trailingNewlines = $cursor->match ('/^\R+/');56 $trailingNewlines = $cursor->matchInPlace('/\G\R+/'); 57 57 58 58 // Calculate how many lines the Markdown is offset from the front matter by counting the number of newlines -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalinkRenderer.php
r3571618 r3657956 74 74 if ($hidden) { 75 75 $attrs->set('aria-hidden', 'true'); 76 // A focusable element removed from the accessibility tree is a WCAG 4.1.2 failure, 77 // so the link must also be taken out of the tab order 78 $attrs->set('tabindex', '-1'); 76 79 } 77 80 -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/Highlight/MarkDelimiterProcessor.php
r3571618 r3657956 15 15 16 16 use League\CommonMark\Delimiter\DelimiterInterface; 17 use League\CommonMark\Delimiter\Processor\ DelimiterProcessorInterface;17 use League\CommonMark\Delimiter\Processor\CacheableDelimiterProcessorInterface; 18 18 use League\CommonMark\Node\Inline\AbstractStringContainer; 19 19 20 class MarkDelimiterProcessor implements DelimiterProcessorInterface20 class MarkDelimiterProcessor implements CacheableDelimiterProcessorInterface 21 21 { 22 22 public function getOpeningCharacter(): string … … 65 65 public function getCacheKey(DelimiterInterface $closer): string 66 66 { 67 return '=' . $closer->getLength(); 67 // getDelimiterUse() returns 0 for every possible opener once the closer exceeds 2 68 // characters, so all longer closers behave identically and can share a bucket. 69 // Clamping keeps the key space bounded, which is what makes the delimiter stack's 70 // lower-bound cache amortize. 71 return '=' . \min($closer->getLength(), 3); 68 72 } 69 73 } -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/Mention/Generator/CallbackGenerator.php
r3571618 r3657956 42 42 } 43 43 44 if ($result instanceof AbstractInline && ! ($result instanceof Mention)) { 44 if ($result instanceof Mention) { 45 if ($result->hasUrl()) { 46 return $mention; 47 } 48 } elseif ($result instanceof AbstractInline) { 45 49 return $result; 46 }47 48 if ($result instanceof Mention && $result->hasUrl()) {49 return $mention;50 50 } 51 51 -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/Strikethrough/StrikethroughDelimiterProcessor.php
r3571618 r3657956 65 65 public function getCacheKey(DelimiterInterface $closer): string 66 66 { 67 return '~' . $closer->getLength(); 67 // getDelimiterUse() returns 0 for every possible opener once the closer exceeds 2 68 // characters, so all longer closers behave identically and can share a bucket. 69 // Clamping keeps the key space bounded, which is what makes the delimiter stack's 70 // lower-bound cache amortize. 71 return '~' . \min($closer->getLength(), 3); 68 72 } 69 73 } -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/Table/TableStartParser.php
r3571618 r3657956 108 108 } 109 109 110 if ($cursor->match ('/^-+/') === null) {110 if ($cursor->matchInPlace('/\G-+/') === null) { 111 111 // Need at least one dash 112 112 return []; -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/TableOfContents/TableOfContentsBuilder.php
r3571618 r3657956 15 15 16 16 use League\CommonMark\Event\DocumentParsedEvent; 17 use League\CommonMark\Event\DocumentPreRenderEvent; 17 18 use League\CommonMark\Extension\CommonMark\Node\Block\Heading; 19 use League\CommonMark\Extension\CommonMark\Node\Block\ListItem; 18 20 use League\CommonMark\Extension\HeadingPermalink\HeadingPermalink; 19 21 use League\CommonMark\Extension\TableOfContents\Node\TableOfContents; 20 22 use League\CommonMark\Extension\TableOfContents\Node\TableOfContentsPlaceholder; 23 use League\CommonMark\Extension\TableOfContents\Node\TableOfContentsReference; 21 24 use League\CommonMark\Node\Block\Document; 22 25 use League\CommonMark\Node\NodeIterator; … … 90 93 private function replacePlaceholders(Document $document, TableOfContents $toc): void 91 94 { 95 $maxEntries = $this->config->get('table_of_contents/max_placeholder_entries'); 96 \assert(\is_int($maxEntries) || $maxEntries === null); 97 $perCopy = $maxEntries === null ? 0 : self::countEntries($toc); 98 $cache = new TableOfContentsRenderCache(); 99 $entries = 0; 100 $anchored = false; 101 92 102 foreach ($document->iterator(NodeIterator::FLAG_BLOCKS_ONLY) as $node) { 93 103 // Add the block once we find a placeholder … … 96 106 } 97 107 98 $node->replaceWith(clone $toc); 108 // Leave any remaining placeholders as-is once the entry budget is spent 109 if ($maxEntries !== null && $entries + $perCopy > $maxEntries) { 110 continue; 111 } 112 113 // The first placeholder receives the table of contents itself, so that it remains 114 // part of the document; the rest share the single result of rendering it 115 if ($anchored) { 116 $node->replaceWith(new TableOfContentsReference($toc, $cache)); 117 } else { 118 $node->replaceWith($toc); 119 $anchored = true; 120 } 121 122 $entries += $perCopy; 99 123 } 124 } 125 126 public function onDocumentPreRender(DocumentPreRenderEvent $event): void 127 { 128 // The shared references are an HTML rendering optimization; other formats 129 // (like XML) walk the node tree directly and expect complete copies 130 if ($event->getFormat() === 'html') { 131 return; 132 } 133 134 foreach ($event->getDocument()->iterator(NodeIterator::FLAG_BLOCKS_ONLY) as $node) { 135 if (! $node instanceof TableOfContentsReference) { 136 continue; 137 } 138 139 $node->replaceWith(clone $node->getTableOfContents()); 140 } 141 } 142 143 private static function countEntries(TableOfContents $toc): int 144 { 145 $count = 0; 146 foreach ($toc->iterator(NodeIterator::FLAG_BLOCKS_ONLY) as $node) { 147 if ($node instanceof ListItem) { 148 $count++; 149 } 150 } 151 152 return $count; 100 153 } 101 154 -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/TableOfContents/TableOfContentsExtension.php
r3571618 r3657956 16 16 use League\CommonMark\Environment\EnvironmentBuilderInterface; 17 17 use League\CommonMark\Event\DocumentParsedEvent; 18 use League\CommonMark\Event\DocumentPreRenderEvent; 18 19 use League\CommonMark\Extension\CommonMark\Node\Block\ListBlock; 19 20 use League\CommonMark\Extension\CommonMark\Renderer\Block\ListBlockRenderer; … … 21 22 use League\CommonMark\Extension\TableOfContents\Node\TableOfContents; 22 23 use League\CommonMark\Extension\TableOfContents\Node\TableOfContentsPlaceholder; 24 use League\CommonMark\Extension\TableOfContents\Node\TableOfContentsReference; 23 25 use League\Config\ConfigurationBuilderInterface; 24 26 use Nette\Schema\Expect; … … 36 38 'html_class' => Expect::string()->default('table-of-contents'), 37 39 'placeholder' => Expect::anyOf(Expect::string(), Expect::null())->default(null), 40 'max_placeholder_entries' => Expect::anyOf(Expect::int()->min(0), Expect::null())->default(null), 38 41 ])); 39 42 } … … 41 44 public function register(EnvironmentBuilderInterface $environment): void 42 45 { 46 $builder = new TableOfContentsBuilder(); 47 43 48 $environment->addRenderer(TableOfContents::class, new TableOfContentsRenderer(new ListBlockRenderer())); 44 $environment->addEventListener(DocumentParsedEvent::class, [ new TableOfContentsBuilder(), 'onDocumentParsed'], -150);49 $environment->addEventListener(DocumentParsedEvent::class, [$builder, 'onDocumentParsed'], -150); 45 50 46 51 // phpcs:ignore SlevomatCodingStandard.ControlStructures.EarlyExit.EarlyExitNotUsed … … 49 54 // If a placeholder cannot be replaced with a TOC element this renderer will ensure the parser won't error out 50 55 $environment->addRenderer(TableOfContentsPlaceholder::class, new TableOfContentsPlaceholderRenderer()); 56 // Placeholders become lightweight references to a single shared TOC which is only rendered once 57 $environment->addRenderer(TableOfContentsReference::class, new TableOfContentsReferenceRenderer()); 58 // Non-HTML formats walk the node tree directly, so expand the references back into complete copies there 59 $environment->addEventListener(DocumentPreRenderEvent::class, [$builder, 'onDocumentPreRender']); 51 60 } 52 61 } -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/TableOfContents/TableOfContentsGenerator.php
r3571618 r3657956 61 61 $this->minHeadingLevel = $minHeadingLevel; 62 62 $this->maxHeadingLevel = $maxHeadingLevel; 63 $this->fragmentPrefix = $fragmentPrefix; 64 65 if ($fragmentPrefix !== '') { 66 $this->fragmentPrefix .= '-'; 67 } 63 $this->fragmentPrefix = $fragmentPrefix === '' ? '' : $fragmentPrefix . '-'; 68 64 } 69 65 -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/TableOfContents/TableOfContentsPlaceholderParser.php
r3571618 r3657956 59 59 60 60 // The placeholder must be the only thing on the line 61 if ($cursor->match ('/^' . \preg_quote($placeholder, '/') . '$/') === null) {61 if ($cursor->matchInPlace('/\G' . \preg_quote($placeholder, '/') . '$/') === null) { 62 62 return BlockStart::none(); 63 63 } -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Node/Inline/AdjacentTextMerger.php
r3571618 r3657956 90 90 } 91 91 92 $s = $first->getLiteral();93 94 92 $node = $first->next(); 95 93 $stop = $last->next(); 96 94 while ($node !== $stop && $node instanceof Text) { 97 $ s .= $node->getLiteral();95 $first->append($node->getLiteral()); 98 96 $unlink = $node; 99 97 $node = $node->next(); 100 98 $unlink->detach(); 101 99 } 102 103 $first->setLiteral($s);104 100 } 105 101 } -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Node/Node.php
r3571618 r3657956 22 22 abstract class Node 23 23 { 24 /** @psalm-readonly */24 /** @psalm-readonly-allow-private-mutation */ 25 25 public Data $data; 26 26 … … 244 244 $this->previous = null; 245 245 $this->next = null; 246 // But save a copy of the children since we'll need that in a moment 247 $children = $this->children(); 248 $this->detachChildren(); 246 // But save a copy of the children since we'll need that in a moment. 247 // Those children still belong to the node being cloned, so only this copy's own links may be dropped. 248 $children = $this->children(); 249 $this->firstChild = $this->lastChild = null; 249 250 250 251 // The original children get cloned and re-added … … 252 253 $this->appendChild(clone $child); 253 254 } 255 256 // The data belongs to a single node, so the two nodes each need their own copy 257 $this->data = clone $this->data; 254 258 } 255 259 -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Normalizer/UniqueSlugNormalizer.php
r3571618 r3657956 18 18 { 19 19 private TextNormalizerInterface $innerNormalizer; 20 /** @var array<string, bool> */21 private array $alreadyUsed = [];22 20 23 public function __construct(TextNormalizerInterface $innerNormalizer) 21 /** 22 * Slugs claimed by the surrounding page (in final, normalized form), seeded as if they'd 23 * already been handed out once, so the first colliding slug gets a "-1" suffix. 24 * Unlike regular history, these survive clearHistory(). 25 * 26 * @var array<string, int> 27 */ 28 private array $reserved = []; 29 30 /** 31 * Every slug we've handed out, mapped to the next numeric suffix to try for it 32 * 33 * @var array<string, int> 34 */ 35 private array $alreadyUsed; 36 37 /** 38 * @param iterable<string> $reservedSlugs 39 */ 40 public function __construct(TextNormalizerInterface $innerNormalizer, iterable $reservedSlugs = []) 24 41 { 25 42 $this->innerNormalizer = $innerNormalizer; 43 44 foreach ($reservedSlugs as $slug) { 45 $this->reserved[$slug] = 1; 46 } 47 48 $this->alreadyUsed = $this->reserved; 26 49 } 27 50 28 51 public function clearHistory(): void 29 52 { 30 $this->alreadyUsed = [];53 $this->alreadyUsed = $this->reserved; 31 54 } 32 55 … … 40 63 $normalized = $this->innerNormalizer->normalize($text, $context); 41 64 42 // If it's not unique, add an incremental number to the end until we get a unique version 43 if (\array_key_exists($normalized, $this->alreadyUsed)) { 44 $suffix = 0; 45 do { 65 // If it's not unique, add an incremental number to the end until we get a unique version. 66 // Suffixes are handed out in ascending order and are never given back, so we can pick up 67 // where the previous collision left off instead of re-checking suffixes we know are taken. 68 if (isset($this->alreadyUsed[$normalized])) { 69 $suffix = $this->alreadyUsed[$normalized]; 70 while (isset($this->alreadyUsed["$normalized-$suffix"])) { 46 71 ++$suffix; 47 } while (\array_key_exists("$normalized-$suffix", $this->alreadyUsed)); 72 } 73 74 $this->alreadyUsed[$normalized] = $suffix + 1; 48 75 49 76 $normalized = "$normalized-$suffix"; 50 77 } 51 78 52 $this->alreadyUsed[$normalized] = true;79 $this->alreadyUsed[$normalized] = 1; 53 80 54 81 return $normalized; -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Parser/Cursor.php
r3571618 r3657956 20 20 public const INDENT_LEVEL = 4; 21 21 22 /** 23 * Interval (in characters) between recorded byte-offset checkpoints on multibyte lines. 24 * A larger interval uses less memory but makes random lookups walk further; a smaller one 25 * costs more memory but speeds random lookups. Sequential access is O(1) regardless, via the 26 * last-resolved-position cache, so this only trades memory against the cost of random jumps 27 * (backwards peeks, saveState/restoreState). 28 */ 29 private const BYTE_OFFSET_CHECKPOINT_INTERVAL = 16; 30 22 31 /** @psalm-readonly */ 23 32 private string $line; … … 54 63 private bool $isMultibyte; 55 64 56 /** @var array<int, string> */ 65 /** 66 * Sparse lookup table mapping a checkpoint index (character index divided by 67 * BYTE_OFFSET_CHECKPOINT_INTERVAL) to the byte offset at which that character begins within 68 * $line. Only populated for multibyte lines, and only ever extended forwards. Recording one 69 * offset per interval - rather than one per character - bounds this map to O(n / interval) 70 * memory, so it can never become the dominant allocation on a long line. A lookup walks at most 71 * `interval` bytes from the nearest checkpoint (or O(1) from the last-resolved position for the 72 * sequential access that dominates parsing); this is what keeps character<->byte translation - 73 * and therefore every substring accessor - linear rather than O(n^2) on multibyte lines. 74 * 75 * @var array<int, int> 76 */ 77 private array $byteOffsetCheckpoints = []; 78 79 /** Character index of the most recently resolved byte offset (paired with $lastByteOffset). */ 80 private int $lastByteOffsetPosition = 0; 81 82 /** Byte offset of the most recently resolved character index (paired with $lastByteOffsetPosition). */ 83 private int $lastByteOffset = 0; 84 85 /** 86 * Small cache of individually-read single characters on multibyte lines, keyed by 87 * character index. Only populated for characters actually read one-at-a-time (e.g. 88 * repeated peek() during delimiter scanning), so it stays tiny; substring accessors 89 * bypass it entirely. Avoids re-slicing the same character on every lookup. 90 * 91 * @var array<int, string> 92 */ 57 93 private array $charCache = []; 58 94 … … 70 106 $this->isMultibyte = $this->length !== \strlen($line); 71 107 $this->lastTabPosition = $this->isMultibyte ? \mb_strrpos($line, "\t", 0, 'UTF-8') : \strrpos($line, "\t"); 108 109 if (! $this->isMultibyte) { 110 return; 111 } 112 113 // Seed the checkpoint map with the start of the line; it is extended on demand (see byteOffset()). 114 $this->byteOffsetCheckpoints = [0]; 115 } 116 117 /** 118 * Translate a character index into its byte offset within $line. 119 * 120 * The scan starts from the closest known reference point - the last-resolved position when it 121 * sits between the target and the nearest earlier checkpoint (the common sequential case, O(1)), 122 * otherwise that checkpoint (at most `interval` characters away). It then walks forwards one 123 * character at a time, skipping UTF-8 continuation bytes (0b10xxxxxx) and recording a checkpoint 124 * every `interval` characters. Sequential access is therefore amortized O(1) and any random 125 * lookup is bounded by O(interval), all while the map itself stays O(n / interval) in memory. 126 */ 127 private function byteOffset(int $index): int 128 { 129 if ($index === $this->lastByteOffsetPosition) { 130 return $this->lastByteOffset; 131 } 132 133 // Start from the checkpoint at or before $index, or - if we've not scanned that far yet - 134 // from the furthest checkpoint recorded so far. 135 $checkpoint = \intdiv($index, self::BYTE_OFFSET_CHECKPOINT_INTERVAL); 136 if (! isset($this->byteOffsetCheckpoints[$checkpoint])) { 137 $checkpoint = \count($this->byteOffsetCheckpoints) - 1; 138 } 139 140 $position = $checkpoint * self::BYTE_OFFSET_CHECKPOINT_INTERVAL; 141 $byte = $this->byteOffsetCheckpoints[$checkpoint]; 142 143 // Prefer the last-resolved position when it is a closer starting point (ahead of the chosen 144 // checkpoint but not past the target). This makes sequential forward access O(1). 145 if ($this->lastByteOffsetPosition > $position && $this->lastByteOffsetPosition <= $index) { 146 $position = $this->lastByteOffsetPosition; 147 $byte = $this->lastByteOffset; 148 } 149 150 $lineBytes = \strlen($this->line); 151 while ($position < $index) { 152 $byte++; 153 while ($byte < $lineBytes && (\ord($this->line[$byte]) & 0xC0) === 0x80) { 154 $byte++; 155 } 156 157 $position++; 158 if ($position % self::BYTE_OFFSET_CHECKPOINT_INTERVAL === 0) { 159 $this->byteOffsetCheckpoints[\intdiv($position, self::BYTE_OFFSET_CHECKPOINT_INTERVAL)] = $byte; 160 } 161 } 162 163 $this->lastByteOffsetPosition = $index; 164 $this->lastByteOffset = $byte; 165 166 return $byte; 167 } 168 169 /** 170 * Return the single multibyte character at $index, caching the sliced string so 171 * repeated reads of the same position (common during delimiter scanning) don't 172 * re-slice. Callers must ensure 0 <= $index < $length. 173 * 174 * Only call this when $isMultibyte is true. On a single-byte line the character is 175 * already reachable as $this->line[$index], which costs less than the byte-offset 176 * translation below; every caller guards on that flag for exactly that reason. 177 */ 178 private function charAt(int $index): string 179 { 180 if (isset($this->charCache[$index])) { 181 return $this->charCache[$index]; 182 } 183 184 $startByte = $this->byteOffset($index); 185 186 // The line is known to be valid UTF-8 (the constructor rejects anything else), so the 187 // lead byte alone gives the character's width. Deriving it here avoids a second 188 // byteOffset() walk just to locate where the next character begins. 189 $lead = \ord($this->line[$startByte]); 190 $width = $lead < 0x80 ? 1 : ($lead < 0xE0 ? 2 : ($lead < 0xF0 ? 3 : 4)); 191 192 return $this->charCache[$index] = \substr($this->line, $startByte, $width); 72 193 } 73 194 … … 87 208 $cols = $this->column; 88 209 89 for ($i = $this->currentPosition; $i < $this->length; $i++) { 90 // This if-else was copied out of getCharacter() for performance reasons 91 if ($this->isMultibyte) { 92 $c = $this->charCache[$i] ??= \mb_substr($this->line, $i, 1, 'UTF-8'); 93 } else { 94 $c = $this->line[$i]; 95 } 210 // Spaces (0x20) and tabs (0x09) are single-byte ASCII characters which can 211 // never appear inside a multibyte UTF-8 sequence, so the leading run of 212 // spaces/tabs is always scanned at the byte level. For multibyte lines this 213 // avoids calling mb_substr() once per character - each such call decodes from 214 // the start of the string (O(i)), making the scan O(n^2) over a long run of 215 // leading whitespace. Because every character in the run occupies exactly one 216 // byte, the character index and byte offset advance together. 217 $byteOffset = $this->isMultibyte ? $this->byteOffset($this->currentPosition) : $this->currentPosition; 218 219 // Past the last tab (or on a line with none) every whitespace character is a space worth 220 // exactly one column, so the run length is both the character count and the indent, and 221 // strspn() can measure it in one call instead of a per-character loop. 222 if ($this->lastTabPosition === false || $this->currentPosition > $this->lastTabPosition) { 223 $this->indent = \strspn($this->line, ' ', $byteOffset); 224 225 return $this->nextNonSpaceCache = $this->currentPosition + $this->indent; 226 } 227 228 for ($i = $this->currentPosition; $i < $this->length; $i++, $byteOffset++) { 229 $c = $this->line[$byteOffset]; 96 230 97 231 if ($c === ' ') { … … 120 254 121 255 if ($this->isMultibyte) { 122 return $this->char Cache[$index] ??= \mb_substr($this->line, $index, 1, 'UTF-8');256 return $this->charAt($index); 123 257 } 124 258 … … 162 296 163 297 if ($this->isMultibyte) { 164 return $this->char Cache[$index] ??= \mb_substr($this->line, $index, 1, 'UTF-8');298 return $this->charAt($index); 165 299 } 166 300 … … 178 312 179 313 if ($this->isMultibyte) { 180 return $this->char Cache[$this->currentPosition] ??= \mb_substr($this->line, $this->currentPosition, 1, 'UTF-8');314 return $this->charAt($this->currentPosition); 181 315 } 182 316 … … 233 367 } 234 368 235 $nextFewChars = $this->isMultibyte ? 236 \mb_substr($this->line, $this->currentPosition, $characters, 'UTF-8') : 237 \substr($this->line, $this->currentPosition, $characters); 369 if ($this->isMultibyte) { 370 $startByte = $this->byteOffset($this->currentPosition); 371 $endByte = $this->byteOffset(\min($this->currentPosition + $characters, $this->length)); 372 $nextFewChars = \substr($this->line, $startByte, $endByte - $startByte); 373 } else { 374 $nextFewChars = \substr($this->line, $this->currentPosition, $characters); 375 } 238 376 239 377 if ($characters === 1) { 240 378 $asArray = [$nextFewChars]; 241 379 } elseif ($this->isMultibyte) { 242 /** @var string[]$asArray */380 /** @var list<string> $asArray */ 243 381 $asArray = \mb_str_split($nextFewChars, 1, 'UTF-8'); 244 382 } else { … … 332 470 } 333 471 334 $matches = []; 335 \preg_match('/^ *(?:\n *)?/', $this->getRemainder(), $matches, \PREG_OFFSET_CAPTURE); 336 337 // [0][0] contains the matched text 338 // [0][1] contains the index of that match 339 \assert(isset($matches[0])); 340 $increment = $matches[0][1] + \strlen($matches[0][0]); 472 // A partially-consumed tab leaves the cursor sitting on the tab itself, which the check 473 // above has already returned on, so only real spaces and newlines reach this point and no 474 // tab expansion is needed. 475 // 476 // Spaces and newlines are single-byte ASCII characters which can never appear inside a 477 // multibyte UTF-8 sequence, so the run is measured at the byte level and each byte 478 // consumed is exactly one character. Scanning the line in place keeps the cost of each 479 // call proportional to the run it consumes, rather than to the length of everything left 480 // in the block, which is what building the remainder first charged for. 481 $byteOffset = $this->isMultibyte ? $this->byteOffset($this->currentPosition) : $this->currentPosition; 482 483 $increment = \strspn($this->line, ' ', $byteOffset); 484 if (($this->line[$byteOffset + $increment] ?? '') === "\n") { 485 $increment++; 486 $increment += \strspn($this->line, ' ', $byteOffset + $increment); 487 } 341 488 342 489 $this->advanceBy($increment); … … 375 522 376 523 $subString = $this->isMultibyte ? 377 \ mb_substr($this->line, $position, null, 'UTF-8') :524 \substr($this->line, $this->byteOffset($position)) : 378 525 \substr($this->line, $position); 379 526 … … 392 539 393 540 /** 394 * Try to match a regular expression 541 * Try to match a regular expression against the remainder of the line 542 * 543 * The subject begins at the cursor: text before the cursor is invisible to the pattern, 544 * so "^" and "\A" anchor at the cursor, and constructs which examine what precedes the 545 * match position (lookbehinds, "\b", "\B") see the start of a subject there rather than 546 * the characters actually preceding the cursor. 395 547 * 396 548 * Returns the matching text and advances to the end of that match … … 406 558 } 407 559 408 // $matches[0][0] contains the matched text 409 // $matches[0][1] contains the index of that match 410 560 // $matches[0][0] contains the matched text; $matches[0][1] is its byte offset in the subject. 411 561 if ($this->isMultibyte) { 412 // PREG_OFFSET_CAPTURE always returns the byte offset, not the char offset, which is annoying413 562 $offset = \mb_strlen(\substr($subject, 0, $matches[0][1]), 'UTF-8'); 414 563 $matchLength = \mb_strlen($matches[0][0], 'UTF-8'); … … 418 567 } 419 568 420 // [0][0] contains the matched text 421 // [0][1] contains the index of that match 569 $advance = $offset + $matchLength; 570 571 // The remainder we matched against had any partially-consumed tab expanded into spaces, 572 // so those columns must be advanced by column instead of by character. 573 if ($this->partiallyConsumedTab) { 574 $charsToTab = 4 - ($this->column % 4); 575 if ($advance < $charsToTab) { 576 $this->advanceBy($advance, true); 577 578 return $matches[0][0]; 579 } 580 581 $this->advanceBy($charsToTab, true); 582 $advance -= $charsToTab; 583 } 584 585 $this->advanceBy($advance); 586 587 return $matches[0][0]; 588 } 589 590 /** 591 * Try to match a regular expression at the cursor's position within the line, without 592 * copying the remainder 593 * 594 * Matches with PCRE's native offset semantics: the whole line is the subject, and matching 595 * starts at the cursor. "\G" anchors at the cursor; "^" anchors at the true start of the 596 * line (or after newlines under the "m" modifier); lookbehinds, "\b", and "\B" see the 597 * characters actually preceding the cursor. This differs from match(), whose subject begins 598 * at the cursor - a pattern written for match() migrates by replacing its leading "^" (or 599 * "\A") with "\G". 600 * 601 * Because no copy of the remainder is made, repeated calls stay linear: match() copies 602 * everything left in the line on every call, so scanning loops (such as the backtick closer 603 * search) would otherwise cost O(n^2). 604 * 605 * When a tab has been partially consumed, no position within the line can represent the 606 * cursor, so this falls back to matching the remainder with the leftover tab expanded into 607 * spaces; "\G" still anchors at the cursor there, but the line content before it is not 608 * visible in that case. 609 * 610 * @psalm-param non-empty-string $regex 611 */ 612 public function matchInPlace(string $regex): ?string 613 { 614 // A partially-consumed tab means the remainder differs from the underlying line (the 615 // leftover tab expands into spaces), so no byte offset can represent the cursor. 616 if ($this->partiallyConsumedTab) { 617 return $this->match($regex); 618 } 619 620 $bytePosition = $this->isMultibyte ? $this->byteOffset($this->currentPosition) : $this->currentPosition; 621 622 if (! \preg_match($regex, $this->line, $matches, \PREG_OFFSET_CAPTURE, $bytePosition)) { 623 return null; 624 } 625 626 // $matches[0][0] contains the matched text; $matches[0][1] is its absolute byte offset in the line. 627 if ($this->isMultibyte) { 628 // Convert the byte offset to a character advance relative to the cursor. The scanned gap 629 // is only the distance from the cursor to the match (zero for anchored patterns), never 630 // the whole line, so this stays linear across repeated calls. 631 $offset = \mb_strlen(\substr($this->line, $bytePosition, $matches[0][1] - $bytePosition), 'UTF-8'); 632 $matchLength = \mb_strlen($matches[0][0], 'UTF-8'); 633 } else { 634 $offset = $matches[0][1] - $this->currentPosition; 635 $matchLength = \strlen($matches[0][0]); 636 } 637 422 638 $this->advanceBy($offset + $matchLength); 423 639 … … 466 682 } 467 683 684 /** 685 * Returns the byte offset of the current position within the line. 686 * 687 * For single-byte lines this is identical to getPosition(). For multibyte 688 * lines the offset comes from the lazily-built character->byte map, which 689 * makes this an amortized-O(1) lookup rather than O(position) per call. 690 */ 691 public function getBytePosition(): int 692 { 693 if (! $this->isMultibyte) { 694 return $this->currentPosition; 695 } 696 697 return $this->byteOffset($this->currentPosition); 698 } 699 468 700 public function getPreviousText(): string 469 701 { 470 702 if ($this->isMultibyte) { 471 return \mb_substr($this->line, $this->previousPosition, $this->currentPosition - $this->previousPosition, 'UTF-8'); 703 $startByte = $this->byteOffset($this->previousPosition); 704 705 return \substr($this->line, $startByte, $this->byteOffset($this->currentPosition) - $startByte); 472 706 } 473 707 … … 478 712 { 479 713 if ($this->isMultibyte) { 480 return \mb_substr($this->line, $start, $length, 'UTF-8'); 714 // Negative offsets/lengths are rare (and never used internally); defer to mb_substr 715 // so its exact semantics are preserved. 716 if ($start < 0 || ($length !== null && $length < 0)) { 717 return \mb_substr($this->line, $start, $length, 'UTF-8'); 718 } 719 720 if ($start >= $this->length) { 721 return ''; 722 } 723 724 $startByte = $this->byteOffset($start); 725 726 if ($length === null) { 727 return \substr($this->line, $startByte); 728 } 729 730 return \substr($this->line, $startByte, $this->byteOffset($start + \min($length, $this->length - $start)) - $startByte); 481 731 } 482 732 -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Parser/InlineParserEngine.php
r3571618 r3657956 79 79 $parsed = false; 80 80 foreach ($parsers as [$parser, $matches]) { 81 \assert($parser instanceof InlineParserInterface);82 81 if ($parser->parse($inlineParserContext->withMatches($matches))) { 83 82 // A parser has successfully handled the text at the given position; don't consider any others at this position … … 150 149 151 150 // For each part that matched... 151 $lastByteOffset = 0; 152 $lastCharOffset = 0; 152 153 foreach ($matches as $match) { 153 154 if ($isMultibyte) { 154 // PREG_OFFSET_CAPTURE always returns the byte offset, not the char offset, which is annoying 155 $offset = \mb_strlen(\substr($contents, 0, $match[0][1]), 'UTF-8'); 155 // PREG_OFFSET_CAPTURE always returns the byte offset, not the char offset, which is annoying. 156 // Matches are returned in ascending order, so convert incrementally from the previous position 157 // instead of re-scanning from the start of the line for every match (which would be quadratic). 158 $lastCharOffset += \mb_strlen(\substr($contents, $lastByteOffset, $match[0][1] - $lastByteOffset), 'UTF-8'); 159 $lastByteOffset = $match[0][1]; 160 $offset = $lastCharOffset; 156 161 } else { 157 162 $offset = \intval($match[0][1]); -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Util/HtmlElement.php
r3571618 r3657956 112 112 public function setContents($contents): self 113 113 { 114 $this->contents = $contents ?? ''; // @phpstan-ignore-line114 $this->contents = $contents ?? ''; 115 115 116 116 return $this; -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Util/LinkParserHelper.php
r3571618 r3657956 47 47 public static function parseLinkLabel(Cursor $cursor): int 48 48 { 49 $match = $cursor->match ('/^\[(?:[^\\\\\[\]]|\\\\.){0,1000}\]/');49 $match = $cursor->matchInPlace('/\G\[(?:[^\\\\\[\]]|\\\\.){0,1000}\]/'); 50 50 if ($match === null) { 51 51 return 0; … … 63 63 public static function parsePartialLinkLabel(Cursor $cursor): ?string 64 64 { 65 return $cursor->match ('/^(?:[^\\\\\[\]]++|\\\\.?)*+/');65 return $cursor->matchInPlace('/\G(?:[^\\\\\[\]]++|\\\\.?)*+/'); 66 66 } 67 67 … … 73 73 public static function parseLinkTitle(Cursor $cursor): ?string 74 74 { 75 if ($title = $cursor->match ('/' . RegexHelper::PARTIAL_LINK_TITLE. '/')) {75 if ($title = $cursor->matchInPlace('/\G' . RegexHelper::PARTIAL_LINK_TITLE_UNANCHORED . '/')) { 76 76 // Chop off quotes from title and unescape 77 77 return RegexHelper::unescape(\substr($title, 1, -1)); … … 85 85 $endDelimiter = \preg_quote($endDelimiter, '/'); 86 86 $regex = \sprintf('/(%s|[^%s\x00])*(?:%s)?/', RegexHelper::PARTIAL_ESCAPED_CHAR, $endDelimiter, $endDelimiter); 87 if (($partialTitle = $cursor->match ($regex)) === null) {87 if (($partialTitle = $cursor->matchInPlace($regex)) === null) { 88 88 return null; 89 89 } … … 94 94 private static function manuallyParseLinkDestination(Cursor $cursor): ?string 95 95 { 96 $remainder = $cursor->getRemainder(); 96 // The destination always ends at the first whitespace or unbalanced ")", so scan the line 97 // in place from the cursor rather than materializing the remainder: the cost of finding it 98 // should follow the length of the destination, not the length of everything left in the 99 // block. A partially-consumed tab needs no special handling - getRemainder() would expand 100 // it into leading spaces and the scan would stop on the first one, exactly as it stops on 101 // the tab itself here. 102 $line = $cursor->getLine(); 103 $start = $cursor->getBytePosition(); 97 104 $openParens = 0; 98 $len = \strlen($ remainder);105 $len = \strlen($line) - $start; 99 106 for ($i = 0; $i < $len; $i++) { 100 $c = $ remainder[$i];101 if ($c === '\\' && $i + 1 < $len && RegexHelper::isEscapable($ remainder[$i + 1])) {107 $c = $line[$start + $i]; 108 if ($c === '\\' && $i + 1 < $len && RegexHelper::isEscapable($line[$start + $i + 1])) { 102 109 $i++; 103 110 } elseif ($c === '(') { … … 126 133 } 127 134 128 $destination = \substr($ remainder, 0, $i);135 $destination = \substr($line, $start, $i); 129 136 $cursor->advanceBy(\mb_strlen($destination, 'UTF-8')); 130 137 … … 150 157 } 151 158 152 if ($res = $cursor->match (RegexHelper::REGEX_LINK_DESTINATION_BRACES)) {159 if ($res = $cursor->matchInPlace('/\G' . RegexHelper::PARTIAL_LINK_DESTINATION_BRACES . '/')) { 153 160 self::$lastCursorLacksClosingBrace = false; 154 161 -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Util/RegexHelper.php
r3571618 r3657956 62 62 public const PARTIAL_HTMLBLOCKOPEN = '<(?:' . self::PARTIAL_BLOCKTAGNAME . '(?:[\s\/>]|$)' . '|' . 63 63 '\/' . self::PARTIAL_BLOCKTAGNAME . '(?:[\s>]|$)' . '|' . '[?!])'; 64 public const PARTIAL_LINK_TITLE = '^(?:"(' . self::PARTIAL_ESCAPED_CHAR . '|[^"\x00])*+"' . 64 /** 65 * Unanchored so each call site can supply its own anchor: "^" against a detached string, 66 * or "\G" at a cursor position (see Cursor::matchInPlace()). 67 */ 68 public const PARTIAL_LINK_TITLE_UNANCHORED = '(?:"(' . self::PARTIAL_ESCAPED_CHAR . '|[^"\x00])*+"' . 65 69 '|' . '\'(' . self::PARTIAL_ESCAPED_CHAR . '|[^\'\x00])*+\'' . 66 70 '|' . '\((' . self::PARTIAL_ESCAPED_CHAR . '|[^()\x00])*+\))'; 71 /** @deprecated since 2.10; use {@link RegexHelper::PARTIAL_LINK_TITLE_UNANCHORED} with an explicit anchor instead */ 72 public const PARTIAL_LINK_TITLE = '^' . self::PARTIAL_LINK_TITLE_UNANCHORED; 67 73 68 74 public const REGEX_PUNCTUATION = '/^[\p{P}\p{S}]/u'; 69 public const REGEX_UNSAFE_PROTOCOL = '/^ javascript:|vbscript:|file:|data:/i';75 public const REGEX_UNSAFE_PROTOCOL = '/^(?:javascript|vbscript|file|data):/i'; 70 76 public const REGEX_SAFE_DATA_PROTOCOL = '/^data:image\/(?:png|gif|jpeg|webp)/i'; 71 77 public const REGEX_NON_SPACE = '/[^ \t\f\v\r\n]/'; … … 74 80 public const REGEX_UNICODE_WHITESPACE_CHAR = '/^\pZ|\s/u'; 75 81 public const REGEX_THEMATIC_BREAK = '/^(?:(?:\*[ \t]*){3,}|(?:_[ \t]*){3,}|(?:-[ \t]*){3,})$/'; 76 public const REGEX_LINK_DESTINATION_BRACES = '/^(?:<(?:[^<>\\n\\\\\\x00]|\\\\.)*>)/'; 82 /** 83 * Unanchored so each call site can supply its own anchor: "^" against a detached string, 84 * or "\G" at a cursor position (see Cursor::matchInPlace()). 85 */ 86 public const PARTIAL_LINK_DESTINATION_BRACES = '(?:<(?:[^<>\\n\\\\\\x00]|\\\\.)*>)'; 87 /** @deprecated since 2.10; use {@link RegexHelper::PARTIAL_LINK_DESTINATION_BRACES} with an explicit anchor instead */ 88 public const REGEX_LINK_DESTINATION_BRACES = '/^' . self::PARTIAL_LINK_DESTINATION_BRACES . '/'; 77 89 78 90 /** … … 239 251 public static function isLinkPotentiallyUnsafe(string $url): bool 240 252 { 253 // Browsers discard these bytes before resolving the scheme (see the WHATWG URL Standard's 254 // "basic URL parser", steps 1 and 3), so `java<TAB>script:` and `<0x01>javascript:` reach 255 // the user as `javascript:` and must be treated as such here too 256 $url = \ltrim(\str_replace(["\t", "\n", "\r"], '', $url), "\x00..\x20"); 257 241 258 return \preg_match(self::REGEX_UNSAFE_PROTOCOL, $url) !== 0 && \preg_match(self::REGEX_SAFE_DATA_PROTOCOL, $url) === 0; 242 259 } -
markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Xml/XmlRenderer.php
r3571618 r3657956 37 37 $this->environment->dispatch(new DocumentPreRenderEvent($document, 'xml')); 38 38 39 // Indentation is purely cosmetic, so it's capped to keep the output size linear 40 // (rather than quadratic) with respect to the depth of the document. 41 $maxIndent = $this->getMaxIndentationLevel(); 42 39 43 $xml = '<?xml version="1.0" encoding="UTF-8"?>'; 40 44 … … 53 57 $attrs = $renderer->getXmlAttributes($node); 54 58 55 $xml .= "\n" . \str_repeat(self::INDENTATION, $indent);59 $xml .= "\n" . \str_repeat(self::INDENTATION, \min($indent, $maxIndent)); 56 60 $xml .= self::tag($tagName, $attrs, $selfClosing); 57 61 … … 69 73 } elseif (! $closeImmediately) { 70 74 $indent--; 71 $xml .= "\n" . \str_repeat(self::INDENTATION, $indent);75 $xml .= "\n" . \str_repeat(self::INDENTATION, \min($indent, $maxIndent)); 72 76 $xml .= self::tag('/' . $tagName); 73 77 } … … 77 81 } 78 82 83 private function getMaxIndentationLevel(): int 84 { 85 return $this->environment->getConfiguration()->get('xml/max_indentation_level'); 86 } 87 79 88 /** 80 89 * @param array<string, string|int|float|bool> $attrs 81 90 */ 82 private static function tag(string $name, array $attrs = [], bool $selfClosing = \false): string91 private static function tag(string $name, array $attrs = [], bool $selfClosing = false): string 83 92 { 84 93 $result = '<' . $name; … … 113 122 } 114 123 115 // @phpstan-ignore-next-line116 124 throw new InvalidArgumentException('$value must be a string, int, float, or bool'); 117 125 } -
markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/ArrayList.php
r3571618 r3657956 9 9 10 10 use Nette; 11 use function array_s lice, array_splice, count, is_int;11 use function array_splice, array_unshift, count, is_int; 12 12 13 13 … … 124 124 public function prepend(mixed $value): void 125 125 { 126 $first = array_slice($this->list, 0, 1);127 $this->offsetSet( 0, $value);128 array_ splice($this->list, 1, 0, $first);126 // route the value through offsetSet() first so a validation added in a subclass isn't bypassed 127 $this->offsetSet(null, $value); 128 array_unshift($this->list, ...array_splice($this->list, -1)); 129 129 } 130 130 } -
markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/Arrays.php
r3571618 r3657956 305 305 $parts = is_array($path) 306 306 ? $path 307 : preg_split('#(\[ \]|->|=|\|)#', $path, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);307 : preg_split('#(\[]|->|=|\|)#', $path, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); 308 308 309 309 if (!$parts || $parts === ['->'] || $parts[0] === '=' || $parts[0] === '|') { -
markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/FileSystem.php
r3571618 r3657956 9 9 10 10 use Nette; 11 use function array_pop, chmod, decoct, dirname, end, fclose, file_exists, file_get_contents, file_put_contents, fopen, implode, is_dir, is_file, is_link, mkdir, preg_match, preg_split, realpath, rename, rmdir, rtrim, sprintf, str_replace, stream_copy_to_stream, stream_is_local, strtr ;11 use function array_pop, chmod, decoct, dirname, end, fclose, file_exists, file_get_contents, file_put_contents, fopen, implode, is_dir, is_file, is_link, mkdir, preg_match, preg_split, realpath, rename, rmdir, rtrim, sprintf, str_replace, stream_copy_to_stream, stream_is_local, strtr, uniqid, unlink, usleep; 12 12 use const DIRECTORY_SEPARATOR; 13 13 … … 235 235 236 236 /** 237 * Writes the string to a file atomically: the content is written to a temporary file, which then replaces 238 * the target, so a concurrent reader never sees the file partially written or truncated. 239 * Creates the parent directory if it does not exist. Pass null as $mode to skip chmod. 240 * @throws Nette\IOException on error occurred 241 */ 242 public static function writeAtomic(string $file, string $content, ?int $mode = 0o666): void 243 { 244 $file = realpath($file) ?: $file; // writes through a symlink to its target, as write() does 245 $tmp = $file . '.' . uniqid('', more_entropy: true) . '.tmp'; 246 try { 247 static::write($tmp, $content, $mode); 248 // plain rename() is atomic; static::rename() must not be used here, it deletes the target first 249 for ($i = 0; !@rename($tmp, $file); $i++) { // @ is escalated to exception 250 if (!Helpers::IsWindows || $i >= 20) { 251 throw new Nette\IOException(sprintf( 252 "Unable to write file '%s'. %s", 253 self::normalizePath($file), 254 Helpers::getLastError(), 255 )); 256 } 257 usleep(5_000); // on Windows, rename fails while the target is open in another process 258 } 259 } catch (\Throwable $e) { 260 @unlink($tmp); 261 throw $e; 262 } 263 } 264 265 266 /** 237 267 * Sets file permissions to `$fileMode` or directory permissions to `$dirMode`. 238 268 * Recursively traverses and sets permissions on the entire contents of the directory as well. -
markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/Finder.php
r3571618 r3657956 9 9 10 10 use Nette; 11 use function array_ merge, count, func_get_args, func_num_args, glob, implode, is_array, is_dir, iterator_to_array, preg_match, preg_quote, preg_replace, preg_split, rtrim, spl_object_id, sprintf, str_ends_with, str_starts_with, strnatcmp, strpbrk, strrpos, strtolower, strtr, substr, usort;12 use const GLOB_NOESCAPE, GLOB_NOSORT, GLOB_ONLYDIR;11 use function array_filter, array_merge, array_values, count, func_get_args, func_num_args, glob, implode, is_array, is_dir, iterator_to_array, preg_match, preg_quote, preg_replace, preg_split, rtrim, spl_object_id, sprintf, str_starts_with, strnatcmp, strpbrk, strrpos, strtolower, strtr, substr, trigger_error, usort; 12 use const DIRECTORY_SEPARATOR, E_USER_DEPRECATED, GLOB_NOESCAPE, GLOB_NOSORT, GLOB_ONLYDIR; 13 13 14 14 … … 48 48 49 49 /** 50 * Begins search for files and directories matching mask. 50 * Begins search for files and directories matching mask. The ** wildcard searches recursively; a trailing slash limits the mask to directories. 51 51 * @param string|list<string> $masks 52 52 */ … … 54 54 { 55 55 $masks = is_array($masks) ? $masks : func_get_args(); // compatibility with variadic 56 return (new static)->addMask($masks, 'dir')->addMask($masks, 'file'); 57 } 58 59 60 /** 61 * Begins search for files matching mask. 56 $files = array_filter($masks, fn(string $mask): bool => !self::hasTrailingSeparator($mask)); // trailing slash means directories only 57 return (new static)->addMask($masks, 'dir')->addMask(array_values($files), 'file'); 58 } 59 60 61 /** 62 * Begins search for files matching mask. The ** wildcard searches recursively. 62 63 * @param string|list<string> $masks 63 64 */ … … 70 71 71 72 /** 72 * Begins search for directories matching mask. 73 * Begins search for directories matching mask. The ** wildcard searches recursively. 73 74 * @param string|list<string> $masks 74 75 */ … … 104 105 { 105 106 foreach ($masks as $mask) { 106 $ mask = FileSystem::unixSlashes($mask);107 $orig = $mask; 107 108 if ($mode === 'dir') { 108 $mask = rtrim($mask, '/'); 109 } 110 if ($mask === '' || ($mode === 'file' && str_ends_with($mask, '/'))) { 111 throw new Nette\InvalidArgumentException("Invalid mask '$mask'"); 112 } 113 if (str_starts_with($mask, '**/')) { 114 $mask = substr($mask, 3); 115 } 116 $this->find[] = [$mask, $mode]; 117 } 118 return $this; 119 } 120 121 122 /** 123 * Searches in the given directories. Wildcards are allowed. 109 $mask = rtrim($mask, '/\\'); 110 } 111 if ($mask === '' || ($mode === 'file' && self::hasTrailingSeparator($mask))) { 112 throw new Nette\InvalidArgumentException("Invalid mask '$orig'"); 113 } 114 $this->find[] = [self::expandGlobStar($mask), $mode]; 115 } 116 return $this; 117 } 118 119 120 private static function hasTrailingSeparator(string $mask): bool 121 { 122 return ($last = substr($mask, -1)) === '/' || $last === '\\'; 123 } 124 125 126 // Expands a ** that is not followed by a slash into **/*, so that e.g. "test/**" and "**.c" search recursively. 127 private static function expandGlobStar(string $mask): string 128 { 129 return preg_replace('~(?<=^|[/\\\])\*\*(?![/\\\])~', '**/*', $mask); 130 } 131 132 133 /** 134 * Searches in the given directories. Wildcards * and ? are allowed; unlike in masks, [ and ] are taken literally. 124 135 * @param string|list<string> $paths 125 136 */ … … 133 144 134 145 /** 135 * Searches recursively from the given directories. Wildcards are allowed.146 * Searches recursively from the given directories. Wildcards * and ? are allowed; unlike in masks, [ and ] are taken literally. 136 147 * @param string|list<string> $paths 137 148 */ … … 139 150 { 140 151 $paths = is_array($paths) ? $paths : func_get_args(); // compatibility with variadic 141 $this->addLocation($paths, '/**');152 $this->addLocation($paths, DIRECTORY_SEPARATOR . '**'); 142 153 return $this; 143 154 } … … 151 162 throw new Nette\InvalidArgumentException("Invalid directory '$path'"); 152 163 } 153 $path = rtrim( FileSystem::unixSlashes($path), '/');164 $path = rtrim($path, '/\\'); 154 165 $this->in[] = $path . $ext; 155 166 } … … 217 228 218 229 /** 219 * Skips entries that matches the given masks relative to the ones defined with the in() or from() methods. 230 * Skips entries that match the given masks, using the same grammar as find() masks, relative to the directories from in() or from(). 231 * A trailing slash excludes directories only; a trailing /* or /** excludes the contents while keeping the directory itself. 220 232 * @param string|list<string> $masks 221 233 */ … … 224 236 $masks = is_array($masks) ? $masks : func_get_args(); // compatibility with variadic 225 237 foreach ($masks as $mask) { 238 $orig = $mask; 226 239 $mask = FileSystem::unixSlashes($mask); 227 if (!preg_match('~^/?(\*\*/)?(.+)(/\*\*|/\*|/|)$~D', $mask, $m)) { 228 throw new Nette\InvalidArgumentException("Invalid mask '$mask'"); 240 if (FileSystem::isAbsolute($mask) || $mask === '..' || str_starts_with($mask, '../')) { 241 trigger_error("Absolute or ../ mask '$orig' in exclude() is deprecated and will change meaning, use a mask relative to the searched directory.", E_USER_DEPRECATED); 242 } 243 if (!preg_match('~^/?(\*\*/)?(.+?)(/\*\*|/\*|/|)$~D', $mask, $m)) { 244 throw new Nette\InvalidArgumentException("Invalid mask '$orig'"); 229 245 } 230 246 $end = $m[3]; 231 $re = $this->buildPattern( $m[2]);247 $re = $this->buildPattern(self::expandGlobStar($m[2])); 232 248 $filter = fn(FileInfo $file): bool => ($end && !$file->isDir()) 233 249 || !preg_match($re, FileSystem::unixSlashes($file->getRelativePathname())); 234 250 235 251 $this->descentFilter($filter); 236 if ($end !== '/*') {252 if ($end === '' || $end === '/') { 237 253 $this->filter($filter); 238 254 } … … 341 357 yield from $item->getIterator(); 342 358 } else { 343 $item = FileSystem::platformSlashes($item);344 359 yield $item => new FileInfo($item); 345 360 } … … 362 377 363 378 try { 364 $pathNames = new \FilesystemIterator($dir, \FilesystemIterator::FOLLOW_SYMLINKS | \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::CURRENT_AS_PATHNAME | \FilesystemIterator::UNIX_PATHS);379 $pathNames = new \FilesystemIterator($dir, \FilesystemIterator::FOLLOW_SYMLINKS | \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::CURRENT_AS_PATHNAME); 365 380 } catch (\UnexpectedValueException $e) { 366 381 if ($this->ignoreUnreadableDirs) { … … 371 386 } 372 387 373 $files = $this->convertToFiles($pathNames, implode( '/', $subdirs), FileSystem::isAbsolute($dir));388 $files = $this->convertToFiles($pathNames, implode(DIRECTORY_SEPARATOR, $subdirs), FileSystem::isAbsolute($dir)); 374 389 375 390 if ($this->sort) { … … 418 433 foreach ($pathNames as $pathName) { 419 434 if (!$absolute) { 420 $pathName = preg_replace('~\.?/~A', '', $pathName); 421 } 422 $pathName = FileSystem::platformSlashes($pathName); 435 $pathName = preg_replace('~\.?[\\\/]~A', '', $pathName); 436 } 423 437 yield new FileInfo($pathName, $relativePath); 424 438 } … … 458 472 foreach ($this->in ?: ['.'] as $in) { 459 473 $in = strtr($in, ['[' => '[[]', ']' => '[]]']); // in path, do not treat [ and ] as a pattern by glob() 460 $splits[] = self::splitRecursivePart($in . '/'. $mask);474 $splits[] = self::splitRecursivePart($in . DIRECTORY_SEPARATOR . $mask); 461 475 } 462 476 } … … 489 503 private static function splitRecursivePart(string $path): array 490 504 { 491 $a = strrpos($path, '/'); 492 $parts = preg_split('~(?<=^|/)\*\*($|/)~', substr($path, 0, $a + 1), 2); 505 $pos = strrpos(strtr($path, '\\', '/'), '/'); 506 $dir = $pos === false ? '' : substr($path, 0, $pos + 1); 507 $file = $pos === false ? $path : substr($path, $pos + 1); 508 $parts = preg_split('~(?<=^|[\\\/])\*\*($|[\\\/])~', $dir, 2); 493 509 return isset($parts[1]) 494 ? [$parts[0], $parts[1] . substr($path, $a + 1), true]495 : [$parts[0], substr($path, $a + 1), false];510 ? [$parts[0], $parts[1] . $file, true] 511 : [$parts[0], $file, false]; 496 512 } 497 513 … … 502 518 private function buildPattern(string $mask): string 503 519 { 520 $mask = FileSystem::unixSlashes($mask); 504 521 if ($mask === '*') { 505 522 return '##'; -
markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/Html.php
r3571618 r3657956 9 9 10 10 use Nette\HtmlStringable; 11 use function array_merge, array_splice, count, explode, func_num_args, html_entity_decode, htmlspecialchars, http_build_query, implode, is_array, is_bool, is_float, is_object, is_string, json_encode, max, number_format, rtrim, str_contains, str_repeat, str_replace, strip_tags, strncmp, strpbrk, substr ;12 use const E NT_HTML5, ENT_NOQUOTES, ENT_QUOTES;11 use function array_merge, array_splice, count, explode, func_num_args, html_entity_decode, htmlspecialchars, http_build_query, implode, is_array, is_bool, is_float, is_object, is_string, json_encode, max, number_format, rtrim, str_contains, str_repeat, str_replace, strip_tags, strncmp, strpbrk, substr, trigger_error, ucfirst; 12 use const E_USER_DEPRECATED, ENT_HTML5, ENT_NOQUOTES, ENT_QUOTES; 13 13 14 14 … … 230 230 * @method self wrap(?string $val) 231 231 * 232 * @method static static text(mixed $text) 233 * @method static static html(mixed $html) 234 * 232 235 * @implements \IteratorAggregate<int, self|string> 233 236 * @implements \ArrayAccess<int, self|string> … … 282 285 283 286 /** 287 * Creates a nameless element (fragment) containing the given children. 288 * Everything except HtmlStringable is escaped; use Html::html() for raw HTML. Nulls are skipped. 289 */ 290 public static function fragment(HtmlStringable|\Stringable|string|int|null ...$children): static 291 { 292 return (new static)->add(...$children); 293 } 294 295 296 /** 284 297 * Returns an object representing HTML text. 298 * @deprecated use Html::html() 285 299 */ 286 300 public static function fromHtml(string $html): static … … 292 306 /** 293 307 * Returns an object representing plain text. 308 * @deprecated use Html::text() 294 309 */ 295 310 public static function fromText(string $text): static … … 474 489 final public function __call(string $m, array $args): mixed 475 490 { 491 if ($m === 'text' || $m === 'html') { 492 trigger_error("Method \$el->$m() is deprecated, use set" . ucfirst($m) . "() for content or setAttribute() for the '$m' attribute; Html::$m() is a static factory.", E_USER_DEPRECATED); 493 } 494 476 495 $p = substr($m, 0, 3); 477 496 if ($p === 'get' || $p === 'set' || $p === 'add') { … … 500 519 501 520 /** 521 * Creates element with escaped text (Html::text()) or raw HTML (Html::html()) content. 522 * @param mixed[] $args 523 */ 524 final public static function __callStatic(string $name, array $args): static 525 { 526 return match ($name) { 527 'text' => (new static)->setText(...$args), 528 'html' => (new static)->setHtml(...$args), 529 default => ObjectHelpers::strictStaticCall(static::class, $name), 530 }; 531 } 532 533 534 /** 502 535 * Special setter for element's attribute. 503 536 * @param array<string, mixed> $query … … 573 606 { 574 607 return self::htmlToText($this->getHtml()); 608 } 609 610 611 /** 612 * Appends the given children. Everything except HtmlStringable is escaped; use Html::html() for raw HTML. Nulls are skipped. 613 */ 614 public function add(HtmlStringable|\Stringable|string|int|null ...$children): static 615 { 616 foreach ($children as $child) { 617 if ($child !== null) { 618 $this->addText($child); 619 } 620 } 621 622 return $this; 575 623 } 576 624 … … 814 862 $s .= ' ' . $key . '=' . $q 815 863 . str_replace( 816 ['&', $q , '<'],817 ['&', $q === '"' ? '"' : ''' , '<'],864 ['&', $q], 865 ['&', $q === '"' ? '"' : '''], 818 866 $value, 819 867 ) -
markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/Image.php
r3571618 r3657956 328 328 ImageType::GIF => IMG_GIF, 329 329 ImageType::WEBP => IMG_WEBP, 330 ImageType::AVIF => 256, //IMG_AVIF,330 ImageType::AVIF => IMG_AVIF, 331 331 ImageType::BMP => IMG_BMP, 332 332 default => 0, … … 348 348 $flag & IMG_PNG ? ImageType::PNG : null, 349 349 $flag & IMG_WEBP ? ImageType::WEBP : null, 350 $flag & 256 ? ImageType::AVIF : null, // IMG_AVIF350 $flag & IMG_AVIF ? ImageType::AVIF : null, 351 351 $flag & IMG_BMP ? ImageType::BMP : null, 352 352 ]); -
markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/Iterables.php
r3571618 r3657956 196 196 public function __construct( 197 197 /** @var \Closure(): iterable<mixed, mixed> */ 198 private \Closure $factory,198 private readonly \Closure $factory, 199 199 ) { 200 200 } -
markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/Json.php
r3571618 r3657956 9 9 10 10 use Nette; 11 use function defined,is_int, json_decode, json_encode, json_last_error, json_last_error_msg;11 use function is_int, json_decode, json_encode, json_last_error, json_last_error_msg; 12 12 use const JSON_BIGINT_AS_STRING, JSON_FORCE_OBJECT, JSON_HEX_AMP, JSON_HEX_APOS, JSON_HEX_QUOT, JSON_HEX_TAG, JSON_OBJECT_AS_ARRAY, JSON_PRESERVE_ZERO_FRACTION, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_UNESCAPED_UNICODE; 13 13 … … 52 52 } 53 53 54 $flags |= JSON_UNESCAPED_SLASHES 55 | (defined('JSON_PRESERVE_ZERO_FRACTION') ? JSON_PRESERVE_ZERO_FRACTION : 0); // since PHP 5.6.6 & PECL JSON-C 1.3.7 54 $flags |= JSON_UNESCAPED_SLASHES | JSON_PRESERVE_ZERO_FRACTION; 56 55 57 56 $json = json_encode($value, $flags); -
markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/ObjectHelpers.php
r3571618 r3657956 221 221 $prop = $name >= 'onA' && $name < 'on_' ? 'event' : true; 222 222 } 223 } catch (\ReflectionException $e) {223 } catch (\ReflectionException) { 224 224 } 225 225 } -
markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/Process.php
r3571618 r3657956 9 9 10 10 use Nette; 11 use function is_resource, is_string, strlen; 12 use const PHP_VERSION_ID; 11 13 12 14 … … 42 44 /** @var array<int, true> Output IDs whose target resource was supplied by the caller and must not be closed here. */ 43 45 private array $callerOutputs = []; 46 47 /** @var array<int, true> Output IDs whose pipe is backed by a temporary file (Windows < 8.5 workaround). */ 48 private array $fileBackedOutputs = []; 44 49 private float $startTime; 50 private bool $detached = false; 45 51 46 52 … … 114 120 mixed $stdout, 115 121 mixed $stderr, 116 private ?float $timeout,122 private readonly ?float $timeout, 117 123 ) { 118 124 $descriptors = [ … … 146 152 public function __destruct() 147 153 { 154 if ($this->detached) { 155 return; 156 } 148 157 $this->outputBuffers = []; 149 158 $this->terminate(); 159 } 160 161 162 /** 163 * Detaches the process: it keeps running in the background and is not terminated when the object 164 * is destroyed. STDIN and output pipes are closed, so the output must not be captured in memory 165 * (pass a file name, a resource or false as $stdout/$stderr). Only the destructor behavior changes: 166 * wait() and getExitCode() still block ($timeout still applies) and terminate() still kills it. 167 * On POSIX, a detached child that exits early stays a zombie until the script ends. 168 */ 169 public function detach(): void 170 { 171 if ($this->outputBuffers !== []) { 172 throw new Nette\InvalidStateException('Cannot detach process: its output is captured in memory, pass a file name, a resource or false as $stdout/$stderr.'); 173 } 174 $this->detached = true; 175 $this->closeStdInput(); 176 $this->closeOutputPipes(); 150 177 } 151 178 … … 190 217 /** 191 218 * Reads any new data from the captured pipes into the buffers, so a process producing more output 192 * than the OS pipe buffer holds does not block. (On Windows the captured output is a file and never blocks.)193 */ 194 private function drainPipes( ): void219 * than the OS pipe buffer holds does not block. With $final (process already finished) reads to EOF. 220 */ 221 private function drainPipes(bool $final = false): void 195 222 { 196 223 foreach ([self::StdOut, self::StdErr] as $id) { 197 $this->readFromPipe($id );224 $this->readFromPipe($id, $final); 198 225 } 199 226 } … … 398 425 * is not captured or the pipe is already closed (or handed over to another process). 399 426 */ 400 private function readFromPipe(int $id): void 401 { 402 if (!isset($this->outputBuffers[$id]) || !is_resource($this->outputPipes[$id] ?? null)) { 427 private function readFromPipe(int $id, bool $final = false): void 428 { 429 $pipe = $this->outputPipes[$id] ?? null; 430 if (!isset($this->outputBuffers[$id]) || !is_resource($pipe)) { 403 431 return; 404 } elseif (Helpers::IsWindows) { 405 fseek($this->outputPipes[$id], strlen($this->outputBuffers[$id])); 432 433 } elseif (isset($this->fileBackedOutputs[$id])) { 434 // Windows < 8.5: captured output is a temporary file; read whatever was appended since last time 435 fseek($pipe, strlen($this->outputBuffers[$id])); 436 $this->outputBuffers[$id] .= stream_get_contents($pipe); 437 438 } elseif ($final) { 439 // the process has finished, everything is buffered in the pipe; non-blocking read on POSIX 440 // (cannot hang on a leaked descendant still holding the write end), blocking read to EOF on 441 // Windows, where non-blocking mode does not work and stream_select() may miss buffered data 442 stream_set_blocking($pipe, Helpers::IsWindows); 443 $this->outputBuffers[$id] .= stream_get_contents($pipe); 444 406 445 } else { 407 stream_set_blocking($this->outputPipes[$id], false); 408 } 409 $this->outputBuffers[$id] .= stream_get_contents($this->outputPipes[$id]); 446 // non-blocking drain: stream_set_blocking(false) works on POSIX only, so reads are also 447 // guarded by stream_select(), which works on Windows pipes since PHP 8.5 (PeekNamedPipe fix) 448 stream_set_blocking($pipe, false); 449 $read = [$pipe]; 450 $write = $except = []; 451 while (@stream_select($read, $write, $except, 0, 0) > 0) { 452 $chunk = fread($pipe, 8192); 453 if ($chunk === false || $chunk === '') { 454 break; 455 } 456 $this->outputBuffers[$id] .= $chunk; 457 $read = [$pipe]; 458 } 459 } 410 460 } 411 461 … … 471 521 $this->outputBuffers[$id] = ''; 472 522 $this->outputBufferOffsets[$id] = 0; 473 // On Windows anonymous pipes are blocking and cannot be polled without freezing the process, 474 // so captured output is backed by a temporary file that can be read non-blockingly (needed for timeouts). 475 return Helpers::IsWindows ? tmpfile() : ['pipe', 'w']; 523 if (Helpers::IsWindows && PHP_VERSION_ID < 80500) { 524 // Windows < 8.5: stream_select() doesn't work on pipes, capture into a temp file that reads non-blockingly 525 $this->fileBackedOutputs[$id] = true; 526 return tmpfile(); 527 } 528 return ['pipe', 'w']; 476 529 477 530 } else { … … 486 539 private function close(): void 487 540 { 488 $this->drainPipes( );541 $this->drainPipes(final: true); 489 542 $this->closeStdInput(); 490 543 $this->closeOutputPipes(); … … 495 548 /** 496 549 * Closes the output pipes that this class opened; resources supplied by the caller are left untouched. 497 * (The temporary file backing captured output on Windows is removed by fclose() itself.)550 * (The temporary file backing captured output on Windows < 8.5 is removed by fclose() itself.) 498 551 */ 499 552 private function closeOutputPipes(): void -
markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/Reflection.php
r3571618 r3657956 231 231 $tokens = \PhpToken::tokenize($code, TOKEN_PARSE); 232 232 } catch (\ParseError $e) { 233 trigger_error($e->getMessage() , E_USER_NOTICE);233 trigger_error($e->getMessage()); 234 234 $tokens = []; 235 235 } -
markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/Strings.php
r3571618 r3657956 10 10 use JetBrains\PhpStorm\Language; 11 11 use Nette; 12 use function array_keys, array_map, array_shift, array_values, bin2hex, class_exists, defined, extension_loaded, function_exists, htmlspecialchars, htmlspecialchars_decode, iconv, iconv_strlen, iconv_substr, implode, in_array, is_array, is_callable, is_int, is_object, is_string, key, max, mb_convert_case, mb_strlen, mb_strtolower, mb_strtoupper, mb_substr, pack, preg_last_error, preg_last_error_msg, preg_quote, preg_replace, str_contains, str_ends_with, str_repeat, str_replace, str_starts_with, strlen, strpos, strrev, strrpos, strtolower, strtoupper, strtr, substr, trim, unpack , utf8_decode;12 use function array_keys, array_map, array_shift, array_values, bin2hex, class_exists, defined, extension_loaded, function_exists, htmlspecialchars, htmlspecialchars_decode, iconv, iconv_strlen, iconv_substr, implode, in_array, is_array, is_callable, is_int, is_object, is_string, key, max, mb_convert_case, mb_strlen, mb_strtolower, mb_strtoupper, mb_substr, pack, preg_last_error, preg_last_error_msg, preg_quote, preg_replace, str_contains, str_ends_with, str_repeat, str_replace, str_starts_with, strlen, strpos, strrev, strrpos, strtolower, strtoupper, strtr, substr, trim, unpack; 13 13 use const ENT_IGNORE, ENT_NOQUOTES, ICONV_IMPL, MB_CASE_TITLE, PHP_EOL, PREG_OFFSET_CAPTURE, PREG_PATTERN_ORDER, PREG_SET_ORDER, PREG_SPLIT_DELIM_CAPTURE, PREG_SPLIT_NO_EMPTY, PREG_SPLIT_OFFSET_CAPTURE, PREG_UNMATCHED_AS_NULL; 14 14 … … 334 334 { 335 335 if (class_exists('Normalizer', autoload: false)) { 336 $left = \Normalizer::normalize($left, \Normalizer::FORM_D) ; // form NFD is faster337 $right = \Normalizer::normalize($right, \Normalizer::FORM_D) ; // form NFD is faster336 $left = \Normalizer::normalize($left, \Normalizer::FORM_D) ?: $left; // form NFD is faster, false on invalid UTF-8 337 $right = \Normalizer::normalize($right, \Normalizer::FORM_D) ?: $right; // form NFD is faster, false on invalid UTF-8 338 338 } 339 339 … … 386 386 extension_loaded('mbstring') => (int) mb_strlen($s, 'UTF-8'), 387 387 extension_loaded('iconv') => (int) iconv_strlen($s, 'UTF-8'), 388 default => strlen( @utf8_decode($s)), // deprecated388 default => strlen((string) preg_replace('#[\x80-\xBF]#', '', $s)), // strips UTF-8 continuation bytes 389 389 }; 390 390 } … … 397 397 { 398 398 $charlist = preg_quote($charlist, '#'); 399 return self::replace($s, '#^[' . $charlist . ']+|[' . $charlist . ']+$#Du' , '');399 return self::replace($s, '#^[' . $charlist . ']+|[' . $charlist . ']+$#Du'); 400 400 } 401 401 -
markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/Validators.php
r3571618 r3657956 338 338 { 339 339 $alpha = "a-z\x80-\xFF"; 340 $octet = '(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])'; // 0..255 340 341 return (bool) preg_match(<<<XX 341 342 (^(?n) … … 344 345 [0-9$alpha]([-0-9$alpha]{0,61}[0-9$alpha])?\\.)? # domain 345 346 [$alpha]([-0-9$alpha]{0,17}[$alpha])? # top domain 346 | \\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}# IPv4347 |\\[[0-9a-f:]{3,39} \\]# IPv6347 |$octet(\\.$octet){3} # IPv4 348 |\\[[0-9a-f:]{3,39}] # IPv6 348 349 )(:\\d{1,5})? # port 349 350 (/\\S*)? # path … … 360 361 public static function isUri(string $value): bool 361 362 { 362 return (bool) preg_match('#^[a-z\d+ \.-]+:\S+$#Di', $value);363 return (bool) preg_match('#^[a-z\d+.-]+:\S+$#Di', $value); 363 364 } 364 365
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)