Plugin Directory

Changeset 3657956


Ignore:
Timestamp:
08/21/2026 12:22:03 AM (2 months ago)
Author:
noricku
Message:

Deploy version 2.11.8

  • Updated to version 2.11.8
  • Package created via automated build process
  • Validated package contents and size

🤖 Automated deployment via wporg-deploy.sh

Location:
markdown-renderer-for-github/trunk
Files:
8 added
86 edited

Legend:

Unmodified
Added
Removed
  • markdown-renderer-for-github/trunk/assets/js/gfmr-main.js

    r3644434 r3657956  
    330330                        );
    331331                },
     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,
    332466
    333467                // Lazy loading threshold: blocks beyond this count use IntersectionObserver
    … …  
    515649
    516650                /**
     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                /**
    517805                 * Scan the page for the languages used by visible code blocks (#621).
    518806                 *
    … …  
    8661154                                }
    8671155
    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 };
    8741176                                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;
    8941189
    8951190                                // Get saved theme from parent container's data attribute
    … …  
    9971292                                                );
    9981293
    999                                         if ( global.wpGfmShikiHighlighter && plainText.trim() ) {
     1294                                        if ( canHighlight() && plainText.trim() ) {
    10001295                                                try {
    10011296                                                        if ( global.wpGfmConfig?.debug ) {
    … …  
    10051300                                                                );
    10061301                                                        }
    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                                                                );
    10121309                                                        if ( ! highlighted ) {
    10131310                                                                throw new Error(
    … …  
    10661363                                                                        );
    10671364
    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' ) {
    10701371                                                                                this.applyDiffHighlighting( container );
    10711372                                                                        }
    … …  
    12591560                                }
    12601561
    1261                                 if ( global.wpGfmShikiHighlighter ) {
     1562                                if ( canHighlight() ) {
    12621563                                        // Shiki highlighting with language support check
    12631564                                        try {
    1264                                                 const highlighted = await this.highlightCodeToHtml(
     1565                                                const highlighted = await this.renderHighlightedHtml(
    12651566                                                        code,
    1266                                                         language,
    1267                                                         currentTheme
     1567                                                        renderLanguage,
     1568                                                        currentTheme,
     1569                                                        workerPlan
    12681570                                                );
    12691571                                                if ( ! highlighted ) {
    … …  
    13751677
    13761678                                                                // 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' ) {
    13781682                                                                        this.applyDiffHighlighting( newPre );
    13791683                                                                }
    … …  
    14731777                 * (#616)
    14741778                 *
    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.
    14781785                 * @return {Promise<string|null>} Highlighted `<pre>` HTML, or null when
    14791786                 *                                no highlighter is available.
    14801787                 */
    1481                 async highlightCodeToHtml( code, language, theme ) {
     1788                async highlightCodeToHtml( code, language, theme, options = {} ) {
    14821789                        // Worker-first: keep Shiki parsing off the main thread to improve
    14831790                        // TBT/INP. getGFMRWorkerManager() resolves to a shared manager (or
    … …  
    14901797                                                        code,
    14911798                                                        language,
    1492                                                         theme
     1799                                                        theme,
     1800                                                        { forceWorker: !! options.forceWorker }
    14931801                                                );
    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                                                        }
    14961819                                                }
    14971820                                        }
    … …  
    15051828
    15061829                        // 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).
    15071833                        if ( global.wpGfmShikiHighlighter ) {
    15081834                                return global.wpGfmShikiHighlighter.codeToHtml( code, {
    15091835                                        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,
    15101878                                        theme,
    15111879                                } );
    … …  
    17202088
    17212089                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
    17222115                        if ( global.wpGfmMermaidRenderer ) {
    17232116                                const result =
    … …  
    26593052                                        await this.processAllCodeBlocks();
    26603053                                }
    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                                );
    26623059
    26633060                                // 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                                );
    26653064
    26663065                                // Process math formulas in new content
    … …  
    26793078                                // Process chart content in new content
    26803079                                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                                                        }
    26853094                                                }
    2686                                         } catch ( error ) {
    2687                                                 console.error(
    2688                                                         '[WP GFM v2 Hotfix] Chart processing in new content failed:',
    2689                                                         error
    2690                                                 );
    2691                                         }
     3095                                        );
    26923096                                }
    26933097                        } finally {
    … …  
    28033207                                }
    28043208
    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.
    28063212                                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                                                        );
    28113224                                                }
    2812                                         } catch ( error ) {
    2813                                                 console.error(
    2814                                                         '[WP GFM v2 Hotfix] Chart initialization failed:',
    2815                                                         error
    2816                                                 );
    2817                                         }
     3225                                        } );
    28183226                                }
    28193227
    … …  
    28213229                                // before this main script ran (handler-first load order).
    28223230                                // 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                                );
    28243236
    28253237                                // 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  
    13901390                // Fixes race condition: gfmr-main.js runs processPlantUMLDiagrams()
    13911391                // 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                }
    13951416
    13961417                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=`
    33                <div class="gfmr-plantuml-error-header">
    44                    <strong>${this.escapeHtml(a)}</strong>
    … …  
    77                ${s?`
    88                    <details class="gfmr-plantuml-error-details">
    9                         <summary>${this.escapeHtml(l)}</summary>
     9                        <summary>${this.escapeHtml(c)}</summary>
    1010                        <pre><code>${this.escapeHtml(s)}</code></pre>
    1111                    </details>
    1212                `:""}
    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  
    544544                /**
    545545                 * 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.
    549555                 * @return {Promise<Object>}
    550556                 */
    551                 async highlightCode( code, language, theme ) {
     557                async highlightCode( code, language, theme, options = {} ) {
    552558                        // Worker init permanently failed (e.g. an unbundled language or a
    553559                        // worker load error). Bypass the worker so this request resolves to
    … …  
    559565
    560566                        // Check if should use fallback based on threshold
    561                         if ( this.config.threshold > 0 ) {
     567                        if ( this.config.threshold > 0 && ! options.forceWorker ) {
    562568                                const lineCount = ( code.match( /\n/g ) || [] ).length + 1;
    563569                                if ( lineCount < this.config.threshold ) {
    … …  
    752758        // Create singleton instance when config is available
    753759        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;
    754767
    755768        /**
    … …  
    757770         * @return {Promise<GFMRWorkerManager|null>}
    758771         */
    759         async function getWorkerManager() {
     772        function getWorkerManager() {
    760773                if ( workerManagerInstance ) {
    761                         return workerManagerInstance;
     774                        return Promise.resolve( workerManagerInstance );
    762775                }
    763776
    764777                // Wait for config if not available yet
    765778                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;
    784816        }
    785817
  • 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  
    22 * Constants and utility functions for the Markdown block editor
    33 *
    4  * @package WpGfmRenderer
     4 * @package
    55 */
    66
    … …  
    3030 * Validate language code format
    3131 * @param {string} code - Language code to validate
    32  * @returns {boolean}
     32 * @return {boolean}
    3333 */
    3434export const isValidLanguageCode = ( code ) => {
    35         if ( ! code || typeof code !== 'string' ) return false;
     35        if ( ! code || typeof code !== 'string' ) {
     36                return false;
     37        }
    3638        // Normalize to lowercase for validation
    3739        const normalized = code.toLowerCase().trim();
    … …  
    4244 * Sanitize language code
    4345 * @param {string} code - Language code to sanitize
    44  * @returns {string|null}
     46 * @return {string|null}
    4547 */
    4648export const sanitizeLangCode = ( code ) => {
    47         if ( ! code ) return null;
     49        if ( ! code ) {
     50                return null;
     51        }
    4852        const sanitized = code.toLowerCase().trim().slice( 0, 5 );
    4953        return isValidLanguageCode( sanitized ) ? sanitized : null;
    … …  
    5660// Mermaid diagram type patterns (content must start with one of these)
    5761export 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',
    6173];
    6274
    … …  
    6577
    6678// Patterns that indicate already-rendered SVG (not Mermaid source)
    67 export const SVG_EXCLUSION_PATTERNS = [ '#gfmr-mermaid-', 'font-family:', '<svg', '</svg>' ];
     79export const SVG_EXCLUSION_PATTERNS = [
     80        '#gfmr-mermaid-',
     81        'font-family:',
     82        '<svg',
     83        '</svg>',
     84];
    6885
    6986// Class-based Mermaid selectors (Phase 1 detection)
    … …  
    7491        '.shiki .language-mermaid',
    7592        '[data-language="mermaid"]',
    76         'pre[class*="language-mermaid"]'
     93        'pre[class*="language-mermaid"]',
    7794];
    7895
    … …  
    85102        'pre code',
    86103        '.gfmr-markdown-rendered-preview pre code',
    87         '.gfmr-markdown-rendered-preview code'
     104        '.gfmr-markdown-rendered-preview code',
    88105];
    89106
    … …  
    94111// PlantUML @start* patterns
    95112export 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',
    98122];
    99123
    … …  
    102126// before paying for an AJAX round-trip (Issue #628 / catalog C5).
    103127export 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',
    106137];
    107138
    … …  
    139170// language class is the only signal. Reuses PlantUML's processed-marker so the
    140171// 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( ', ' );
     172export const C4_BLOCK_SELECTOR = C4_FENCE_LANGUAGES.map(
     173        ( lang ) => `code.language-${ lang }:not([data-gfmr-plantuml-processed])`
     174).join( ', ' );
    144175
    145176// Resolve a C4 fence token from an element's class list, or null when absent.
    … …  
    158189
    159190// 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';
     191export const HAS_ABORT_SIGNAL_ANY =
     192        typeof AbortSignal !== 'undefined' && typeof AbortSignal.any === 'function';
    161193
    162194// ============================================
    … …  
    166198/**
    167199 * Check if debug mode is enabled via config or URL parameter
    168  * @returns {boolean} True if debug mode is enabled
     200 * @return {boolean} True if debug mode is enabled
    169201 */
    170202export const isDebugEnabled = () => {
    171         return window.wpGfmConfig?.debug ||
     203        return (
     204                window.wpGfmConfig?.debug ||
    172205                window.location.search.includes( 'debug=true' ) ||
    173206                window.location.search.includes( 'gfmr-debug=1' ) ||
    174207                window.location.search.includes( 'debug=1' ) ||
    175                 false;
     208                false
     209        );
    176210};
    177211
    … …  
    204238 *
    205239 * @param {string} text - Text to escape
    206  * @returns {string} Escaped text
     240 * @return {string} Escaped text
    207241 */
    208242export const escapeMarkdownAlt = ( text ) => {
    … …  
    218252 *
    219253 * @param {string} url - URL to encode
    220  * @returns {string} Encoded URL wrapped in angle brackets if needed
     254 * @return {string} Encoded URL wrapped in angle brackets if needed
    221255 */
    222256export const encodeMarkdownUrl = ( url ) => {
    … …  
    234268 * Validate image URL format
    235269 * @param {string} url - URL to validate
    236  * @returns {boolean} - True if valid image URL
     270 * @return {boolean} - True if valid image URL
    237271 */
    238272export const isValidImageUrl = ( url ) => {
    … …  
    256290 * Check if content is Mermaid diagram source (not rendered SVG)
    257291 * @param {string} content - Content to check
    258  * @returns {boolean} True if content is Mermaid source
     292 * @return {boolean} True if content is Mermaid source
    259293 */
    260294export 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        );
    265304        return hasPattern && ! isRenderedSvg;
    266305};
    … …  
    284323 *
    285324 * @param {string} bgColor - Background color (used as the CSS variable fallback)
    286  * @returns {string} CSS style string
     325 * @return {string} CSS style string
    287326 */
    288327export 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;`;
    290329
    291330/**
    292331 * Build Mermaid error HTML template
    293332 * @param {string} errorMessage - Error message
    294  * @param {string} code - Original Mermaid code
    295  * @returns {string} Error HTML
     333 * @param {string} code         - Original Mermaid code
     334 * @return {string} Error HTML
    296335 */
    297336export const buildMermaidErrorHTML = ( errorMessage, code ) => `
    298337        <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;">
    299338                <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>
    301342                <details style="margin-top: 10px;">
    302343                        <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>
    304345                </details>
    305346        </div>
    … …  
    309350 * Check if text content looks like PlantUML source
    310351 * @param {string} text - Text to check
    311  * @returns {boolean}
     352 * @return {boolean}
    312353 */
    313354export const isPlantUMLContent = ( text ) => {
    314355        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        );
    316359};
    317360
    … …  
    327370 *
    328371 * @param {string} text - Text to check
    329  * @returns {boolean} True when the diagram has both opener and matching closer
     372 * @return {boolean} True when the diagram has both opener and matching closer
    330373 */
    331374export const isPlantUMLComplete = ( text ) => {
    332375        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        );
    334379        if ( ! start ) {
    335380                return false;
    … …  
    337382        // Pair @startX with @endX (e.g. @startmindmap -> @endmindmap).
    338383        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        );
    341388};
    342389
    … …  
    364411 *
    365412 * @param {DataTransfer} dataTransfer - event.dataTransfer or event.clipboardData
    366  * @returns {File[]} Image files in clipboard order (possibly empty)
     413 * @return {File[]} Image files in clipboard order (possibly empty)
    367414 */
    368415export const extractImageFilesFromDataTransfer = ( dataTransfer ) => {
    369416        const droppedFiles = dataTransfer?.files;
    370417        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/' )
    373420                );
    374421        }
    … …  
    399446 *
    400447 * @param {DataTransfer} clipboardData - event.clipboardData
    401  * @returns {File[]} Image files in clipboard order (possibly empty)
     448 * @return {File[]} Image files in clipboard order (possibly empty)
    402449 */
    403450export const extractImageFilesFromClipboard = ( clipboardData ) =>
    … …  
    413460 * @param {string} token - Unique token, e.g. 'gfmr-upload-1'
    414461 * @param {string} label - Localised "uploading" label
    415  * @returns {string} Placeholder Markdown, e.g. '![Uploading image… (gfmr-upload-1)]()'
     462 * @return {string} Placeholder Markdown, e.g. '![Uploading image… (gfmr-upload-1)]()'
    416463 */
    417464export const buildUploadPlaceholder = ( token, label ) =>
    … …  
    431478 * @param {string} token       - Token to locate
    432479 * @param {string} replacement - Markdown to insert, or '' to remove
    433  * @returns {string|null} Updated content, or null if token not found
     480 * @return {string|null} Updated content, or null if token not found
    434481 */
    435482export const replaceUploadPlaceholder = ( content, token, replacement ) => {
    … …  
    458505 * saved attachment once the server responds.
    459506 *
     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 *
    460518 * @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 */
     521export 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};
    465528
    466529/**
    … …  
    471534 *
    472535 * @param {Object} media - WordPress media object ({ id, url|source_url, alt, title })
    473  * @returns {string|null} '![alt](url)' or null when the URL is missing/invalid
     536 * @return {string|null} '![alt](url)' or null when the URL is missing/invalid
    474537 */
    475538export const buildImageMarkdownFromMedia = ( media ) => {
    … …  
    486549                altText = media.title;
    487550        }
    488         return `![${ escapeMarkdownAlt( altText ) }](${ encodeMarkdownUrl( imageUrl ) })`;
    489 };
     551        return `![${ escapeMarkdownAlt( altText ) }](${ encodeMarkdownUrl(
     552                imageUrl
     553        ) })`;
     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  
    11(()=>{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,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}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,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")},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୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢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;怳Ādp໩໮uct;戏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ǣጓ\0጖y;䐎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Ā;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀ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Ā;e᜚᜜lƀ;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\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩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ↄⅪ←ٖ↛ǰ↉\0↎proø₞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;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\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\0⹻m;櫳;櫽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,"&Tab;"],[0,"&NewLine;"],[22,"&excl;"],[0,"&quot;"],[0,"&num;"],[0,"&dollar;"],[0,"&percnt;"],[0,"&amp;"],[0,"&apos;"],[0,"&lpar;"],[0,"&rpar;"],[0,"&ast;"],[0,"&plus;"],[0,"&comma;"],[1,"&period;"],[0,"&sol;"],[10,"&colon;"],[0,"&semi;"],[0,{v:"&lt;",n:8402,o:"&nvlt;"}],[0,{v:"&equals;",n:8421,o:"&bne;"}],[0,{v:"&gt;",n:8402,o:"&nvgt;"}],[0,"&quest;"],[0,"&commat;"],[26,"&lbrack;"],[0,"&bsol;"],[0,"&rbrack;"],[0,"&Hat;"],[0,"&lowbar;"],[0,"&DiacriticalGrave;"],[5,{n:106,o:"&fjlig;"}],[20,"&lbrace;"],[0,"&verbar;"],[0,"&rbrace;"],[34,"&nbsp;"],[0,"&iexcl;"],[0,"&cent;"],[0,"&pound;"],[0,"&curren;"],[0,"&yen;"],[0,"&brvbar;"],[0,"&sect;"],[0,"&die;"],[0,"&copy;"],[0,"&ordf;"],[0,"&laquo;"],[0,"&not;"],[0,"&shy;"],[0,"&circledR;"],[0,"&macr;"],[0,"&deg;"],[0,"&PlusMinus;"],[0,"&sup2;"],[0,"&sup3;"],[0,"&acute;"],[0,"&micro;"],[0,"&para;"],[0,"&centerdot;"],[0,"&cedil;"],[0,"&sup1;"],[0,"&ordm;"],[0,"&raquo;"],[0,"&frac14;"],[0,"&frac12;"],[0,"&frac34;"],[0,"&iquest;"],[0,"&Agrave;"],[0,"&Aacute;"],[0,"&Acirc;"],[0,"&Atilde;"],[0,"&Auml;"],[0,"&angst;"],[0,"&AElig;"],[0,"&Ccedil;"],[0,"&Egrave;"],[0,"&Eacute;"],[0,"&Ecirc;"],[0,"&Euml;"],[0,"&Igrave;"],[0,"&Iacute;"],[0,"&Icirc;"],[0,"&Iuml;"],[0,"&ETH;"],[0,"&Ntilde;"],[0,"&Ograve;"],[0,"&Oacute;"],[0,"&Ocirc;"],[0,"&Otilde;"],[0,"&Ouml;"],[0,"&times;"],[0,"&Oslash;"],[0,"&Ugrave;"],[0,"&Uacute;"],[0,"&Ucirc;"],[0,"&Uuml;"],[0,"&Yacute;"],[0,"&THORN;"],[0,"&szlig;"],[0,"&agrave;"],[0,"&aacute;"],[0,"&acirc;"],[0,"&atilde;"],[0,"&auml;"],[0,"&aring;"],[0,"&aelig;"],[0,"&ccedil;"],[0,"&egrave;"],[0,"&eacute;"],[0,"&ecirc;"],[0,"&euml;"],[0,"&igrave;"],[0,"&iacute;"],[0,"&icirc;"],[0,"&iuml;"],[0,"&eth;"],[0,"&ntilde;"],[0,"&ograve;"],[0,"&oacute;"],[0,"&ocirc;"],[0,"&otilde;"],[0,"&ouml;"],[0,"&div;"],[0,"&oslash;"],[0,"&ugrave;"],[0,"&uacute;"],[0,"&ucirc;"],[0,"&uuml;"],[0,"&yacute;"],[0,"&thorn;"],[0,"&yuml;"],[0,"&Amacr;"],[0,"&amacr;"],[0,"&Abreve;"],[0,"&abreve;"],[0,"&Aogon;"],[0,"&aogon;"],[0,"&Cacute;"],[0,"&cacute;"],[0,"&Ccirc;"],[0,"&ccirc;"],[0,"&Cdot;"],[0,"&cdot;"],[0,"&Ccaron;"],[0,"&ccaron;"],[0,"&Dcaron;"],[0,"&dcaron;"],[0,"&Dstrok;"],[0,"&dstrok;"],[0,"&Emacr;"],[0,"&emacr;"],[2,"&Edot;"],[0,"&edot;"],[0,"&Eogon;"],[0,"&eogon;"],[0,"&Ecaron;"],[0,"&ecaron;"],[0,"&Gcirc;"],[0,"&gcirc;"],[0,"&Gbreve;"],[0,"&gbreve;"],[0,"&Gdot;"],[0,"&gdot;"],[0,"&Gcedil;"],[1,"&Hcirc;"],[0,"&hcirc;"],[0,"&Hstrok;"],[0,"&hstrok;"],[0,"&Itilde;"],[0,"&itilde;"],[0,"&Imacr;"],[0,"&imacr;"],[2,"&Iogon;"],[0,"&iogon;"],[0,"&Idot;"],[0,"&imath;"],[0,"&IJlig;"],[0,"&ijlig;"],[0,"&Jcirc;"],[0,"&jcirc;"],[0,"&Kcedil;"],[0,"&kcedil;"],[0,"&kgreen;"],[0,"&Lacute;"],[0,"&lacute;"],[0,"&Lcedil;"],[0,"&lcedil;"],[0,"&Lcaron;"],[0,"&lcaron;"],[0,"&Lmidot;"],[0,"&lmidot;"],[0,"&Lstrok;"],[0,"&lstrok;"],[0,"&Nacute;"],[0,"&nacute;"],[0,"&Ncedil;"],[0,"&ncedil;"],[0,"&Ncaron;"],[0,"&ncaron;"],[0,"&napos;"],[0,"&ENG;"],[0,"&eng;"],[0,"&Omacr;"],[0,"&omacr;"],[2,"&Odblac;"],[0,"&odblac;"],[0,"&OElig;"],[0,"&oelig;"],[0,"&Racute;"],[0,"&racute;"],[0,"&Rcedil;"],[0,"&rcedil;"],[0,"&Rcaron;"],[0,"&rcaron;"],[0,"&Sacute;"],[0,"&sacute;"],[0,"&Scirc;"],[0,"&scirc;"],[0,"&Scedil;"],[0,"&scedil;"],[0,"&Scaron;"],[0,"&scaron;"],[0,"&Tcedil;"],[0,"&tcedil;"],[0,"&Tcaron;"],[0,"&tcaron;"],[0,"&Tstrok;"],[0,"&tstrok;"],[0,"&Utilde;"],[0,"&utilde;"],[0,"&Umacr;"],[0,"&umacr;"],[0,"&Ubreve;"],[0,"&ubreve;"],[0,"&Uring;"],[0,"&uring;"],[0,"&Udblac;"],[0,"&udblac;"],[0,"&Uogon;"],[0,"&uogon;"],[0,"&Wcirc;"],[0,"&wcirc;"],[0,"&Ycirc;"],[0,"&ycirc;"],[0,"&Yuml;"],[0,"&Zacute;"],[0,"&zacute;"],[0,"&Zdot;"],[0,"&zdot;"],[0,"&Zcaron;"],[0,"&zcaron;"],[19,"&fnof;"],[34,"&imped;"],[63,"&gacute;"],[65,"&jmath;"],[142,"&circ;"],[0,"&caron;"],[16,"&breve;"],[0,"&DiacriticalDot;"],[0,"&ring;"],[0,"&ogon;"],[0,"&DiacriticalTilde;"],[0,"&dblac;"],[51,"&DownBreve;"],[127,"&Alpha;"],[0,"&Beta;"],[0,"&Gamma;"],[0,"&Delta;"],[0,"&Epsilon;"],[0,"&Zeta;"],[0,"&Eta;"],[0,"&Theta;"],[0,"&Iota;"],[0,"&Kappa;"],[0,"&Lambda;"],[0,"&Mu;"],[0,"&Nu;"],[0,"&Xi;"],[0,"&Omicron;"],[0,"&Pi;"],[0,"&Rho;"],[1,"&Sigma;"],[0,"&Tau;"],[0,"&Upsilon;"],[0,"&Phi;"],[0,"&Chi;"],[0,"&Psi;"],[0,"&ohm;"],[7,"&alpha;"],[0,"&beta;"],[0,"&gamma;"],[0,"&delta;"],[0,"&epsi;"],[0,"&zeta;"],[0,"&eta;"],[0,"&theta;"],[0,"&iota;"],[0,"&kappa;"],[0,"&lambda;"],[0,"&mu;"],[0,"&nu;"],[0,"&xi;"],[0,"&omicron;"],[0,"&pi;"],[0,"&rho;"],[0,"&sigmaf;"],[0,"&sigma;"],[0,"&tau;"],[0,"&upsi;"],[0,"&phi;"],[0,"&chi;"],[0,"&psi;"],[0,"&omega;"],[7,"&thetasym;"],[0,"&Upsi;"],[2,"&phiv;"],[0,"&piv;"],[5,"&Gammad;"],[0,"&digamma;"],[18,"&kappav;"],[0,"&rhov;"],[3,"&epsiv;"],[0,"&backepsilon;"],[10,"&IOcy;"],[0,"&DJcy;"],[0,"&GJcy;"],[0,"&Jukcy;"],[0,"&DScy;"],[0,"&Iukcy;"],[0,"&YIcy;"],[0,"&Jsercy;"],[0,"&LJcy;"],[0,"&NJcy;"],[0,"&TSHcy;"],[0,"&KJcy;"],[1,"&Ubrcy;"],[0,"&DZcy;"],[0,"&Acy;"],[0,"&Bcy;"],[0,"&Vcy;"],[0,"&Gcy;"],[0,"&Dcy;"],[0,"&IEcy;"],[0,"&ZHcy;"],[0,"&Zcy;"],[0,"&Icy;"],[0,"&Jcy;"],[0,"&Kcy;"],[0,"&Lcy;"],[0,"&Mcy;"],[0,"&Ncy;"],[0,"&Ocy;"],[0,"&Pcy;"],[0,"&Rcy;"],[0,"&Scy;"],[0,"&Tcy;"],[0,"&Ucy;"],[0,"&Fcy;"],[0,"&KHcy;"],[0,"&TScy;"],[0,"&CHcy;"],[0,"&SHcy;"],[0,"&SHCHcy;"],[0,"&HARDcy;"],[0,"&Ycy;"],[0,"&SOFTcy;"],[0,"&Ecy;"],[0,"&YUcy;"],[0,"&YAcy;"],[0,"&acy;"],[0,"&bcy;"],[0,"&vcy;"],[0,"&gcy;"],[0,"&dcy;"],[0,"&iecy;"],[0,"&zhcy;"],[0,"&zcy;"],[0,"&icy;"],[0,"&jcy;"],[0,"&kcy;"],[0,"&lcy;"],[0,"&mcy;"],[0,"&ncy;"],[0,"&ocy;"],[0,"&pcy;"],[0,"&rcy;"],[0,"&scy;"],[0,"&tcy;"],[0,"&ucy;"],[0,"&fcy;"],[0,"&khcy;"],[0,"&tscy;"],[0,"&chcy;"],[0,"&shcy;"],[0,"&shchcy;"],[0,"&hardcy;"],[0,"&ycy;"],[0,"&softcy;"],[0,"&ecy;"],[0,"&yucy;"],[0,"&yacy;"],[1,"&iocy;"],[0,"&djcy;"],[0,"&gjcy;"],[0,"&jukcy;"],[0,"&dscy;"],[0,"&iukcy;"],[0,"&yicy;"],[0,"&jsercy;"],[0,"&ljcy;"],[0,"&njcy;"],[0,"&tshcy;"],[0,"&kjcy;"],[1,"&ubrcy;"],[0,"&dzcy;"],[7074,"&ensp;"],[0,"&emsp;"],[0,"&emsp13;"],[0,"&emsp14;"],[1,"&numsp;"],[0,"&puncsp;"],[0,"&ThinSpace;"],[0,"&hairsp;"],[0,"&NegativeMediumSpace;"],[0,"&zwnj;"],[0,"&zwj;"],[0,"&lrm;"],[0,"&rlm;"],[0,"&dash;"],[2,"&ndash;"],[0,"&mdash;"],[0,"&horbar;"],[0,"&Verbar;"],[1,"&lsquo;"],[0,"&CloseCurlyQuote;"],[0,"&lsquor;"],[1,"&ldquo;"],[0,"&CloseCurlyDoubleQuote;"],[0,"&bdquo;"],[1,"&dagger;"],[0,"&Dagger;"],[0,"&bull;"],[2,"&nldr;"],[0,"&hellip;"],[9,"&permil;"],[0,"&pertenk;"],[0,"&prime;"],[0,"&Prime;"],[0,"&tprime;"],[0,"&backprime;"],[3,"&lsaquo;"],[0,"&rsaquo;"],[3,"&oline;"],[2,"&caret;"],[1,"&hybull;"],[0,"&frasl;"],[10,"&bsemi;"],[7,"&qprime;"],[7,{v:"&MediumSpace;",n:8202,o:"&ThickSpace;"}],[0,"&NoBreak;"],[0,"&af;"],[0,"&InvisibleTimes;"],[0,"&ic;"],[72,"&euro;"],[46,"&tdot;"],[0,"&DotDot;"],[37,"&complexes;"],[2,"&incare;"],[4,"&gscr;"],[0,"&hamilt;"],[0,"&Hfr;"],[0,"&Hopf;"],[0,"&planckh;"],[0,"&hbar;"],[0,"&imagline;"],[0,"&Ifr;"],[0,"&lagran;"],[0,"&ell;"],[1,"&naturals;"],[0,"&numero;"],[0,"&copysr;"],[0,"&weierp;"],[0,"&Popf;"],[0,"&Qopf;"],[0,"&realine;"],[0,"&real;"],[0,"&reals;"],[0,"&rx;"],[3,"&trade;"],[1,"&integers;"],[2,"&mho;"],[0,"&zeetrf;"],[0,"&iiota;"],[2,"&bernou;"],[0,"&Cayleys;"],[1,"&escr;"],[0,"&Escr;"],[0,"&Fouriertrf;"],[1,"&Mellintrf;"],[0,"&order;"],[0,"&alefsym;"],[0,"&beth;"],[0,"&gimel;"],[0,"&daleth;"],[12,"&CapitalDifferentialD;"],[0,"&dd;"],[0,"&ee;"],[0,"&ii;"],[10,"&frac13;"],[0,"&frac23;"],[0,"&frac15;"],[0,"&frac25;"],[0,"&frac35;"],[0,"&frac45;"],[0,"&frac16;"],[0,"&frac56;"],[0,"&frac18;"],[0,"&frac38;"],[0,"&frac58;"],[0,"&frac78;"],[49,"&larr;"],[0,"&ShortUpArrow;"],[0,"&rarr;"],[0,"&darr;"],[0,"&harr;"],[0,"&updownarrow;"],[0,"&nwarr;"],[0,"&nearr;"],[0,"&LowerRightArrow;"],[0,"&LowerLeftArrow;"],[0,"&nlarr;"],[0,"&nrarr;"],[1,{v:"&rarrw;",n:824,o:"&nrarrw;"}],[0,"&Larr;"],[0,"&Uarr;"],[0,"&Rarr;"],[0,"&Darr;"],[0,"&larrtl;"],[0,"&rarrtl;"],[0,"&LeftTeeArrow;"],[0,"&mapstoup;"],[0,"&map;"],[0,"&DownTeeArrow;"],[1,"&hookleftarrow;"],[0,"&hookrightarrow;"],[0,"&larrlp;"],[0,"&looparrowright;"],[0,"&harrw;"],[0,"&nharr;"],[1,"&lsh;"],[0,"&rsh;"],[0,"&ldsh;"],[0,"&rdsh;"],[1,"&crarr;"],[0,"&cularr;"],[0,"&curarr;"],[2,"&circlearrowleft;"],[0,"&circlearrowright;"],[0,"&leftharpoonup;"],[0,"&DownLeftVector;"],[0,"&RightUpVector;"],[0,"&LeftUpVector;"],[0,"&rharu;"],[0,"&DownRightVector;"],[0,"&dharr;"],[0,"&dharl;"],[0,"&RightArrowLeftArrow;"],[0,"&udarr;"],[0,"&LeftArrowRightArrow;"],[0,"&leftleftarrows;"],[0,"&upuparrows;"],[0,"&rightrightarrows;"],[0,"&ddarr;"],[0,"&leftrightharpoons;"],[0,"&Equilibrium;"],[0,"&nlArr;"],[0,"&nhArr;"],[0,"&nrArr;"],[0,"&DoubleLeftArrow;"],[0,"&DoubleUpArrow;"],[0,"&DoubleRightArrow;"],[0,"&dArr;"],[0,"&DoubleLeftRightArrow;"],[0,"&DoubleUpDownArrow;"],[0,"&nwArr;"],[0,"&neArr;"],[0,"&seArr;"],[0,"&swArr;"],[0,"&lAarr;"],[0,"&rAarr;"],[1,"&zigrarr;"],[6,"&larrb;"],[0,"&rarrb;"],[15,"&DownArrowUpArrow;"],[7,"&loarr;"],[0,"&roarr;"],[0,"&hoarr;"],[0,"&forall;"],[0,"&comp;"],[0,{v:"&part;",n:824,o:"&npart;"}],[0,"&exist;"],[0,"&nexist;"],[0,"&empty;"],[1,"&Del;"],[0,"&Element;"],[0,"&NotElement;"],[1,"&ni;"],[0,"&notni;"],[2,"&prod;"],[0,"&coprod;"],[0,"&sum;"],[0,"&minus;"],[0,"&MinusPlus;"],[0,"&dotplus;"],[1,"&Backslash;"],[0,"&lowast;"],[0,"&compfn;"],[1,"&radic;"],[2,"&prop;"],[0,"&infin;"],[0,"&angrt;"],[0,{v:"&ang;",n:8402,o:"&nang;"}],[0,"&angmsd;"],[0,"&angsph;"],[0,"&mid;"],[0,"&nmid;"],[0,"&DoubleVerticalBar;"],[0,"&NotDoubleVerticalBar;"],[0,"&and;"],[0,"&or;"],[0,{v:"&cap;",n:65024,o:"&caps;"}],[0,{v:"&cup;",n:65024,o:"&cups;"}],[0,"&int;"],[0,"&Int;"],[0,"&iiint;"],[0,"&conint;"],[0,"&Conint;"],[0,"&Cconint;"],[0,"&cwint;"],[0,"&ClockwiseContourIntegral;"],[0,"&awconint;"],[0,"&there4;"],[0,"&becaus;"],[0,"&ratio;"],[0,"&Colon;"],[0,"&dotminus;"],[1,"&mDDot;"],[0,"&homtht;"],[0,{v:"&sim;",n:8402,o:"&nvsim;"}],[0,{v:"&backsim;",n:817,o:"&race;"}],[0,{v:"&ac;",n:819,o:"&acE;"}],[0,"&acd;"],[0,"&VerticalTilde;"],[0,"&NotTilde;"],[0,{v:"&eqsim;",n:824,o:"&nesim;"}],[0,"&sime;"],[0,"&NotTildeEqual;"],[0,"&cong;"],[0,"&simne;"],[0,"&ncong;"],[0,"&ap;"],[0,"&nap;"],[0,"&ape;"],[0,{v:"&apid;",n:824,o:"&napid;"}],[0,"&backcong;"],[0,{v:"&asympeq;",n:8402,o:"&nvap;"}],[0,{v:"&bump;",n:824,o:"&nbump;"}],[0,{v:"&bumpe;",n:824,o:"&nbumpe;"}],[0,{v:"&doteq;",n:824,o:"&nedot;"}],[0,"&doteqdot;"],[0,"&efDot;"],[0,"&erDot;"],[0,"&Assign;"],[0,"&ecolon;"],[0,"&ecir;"],[0,"&circeq;"],[1,"&wedgeq;"],[0,"&veeeq;"],[1,"&triangleq;"],[2,"&equest;"],[0,"&ne;"],[0,{v:"&Congruent;",n:8421,o:"&bnequiv;"}],[0,"&nequiv;"],[1,{v:"&le;",n:8402,o:"&nvle;"}],[0,{v:"&ge;",n:8402,o:"&nvge;"}],[0,{v:"&lE;",n:824,o:"&nlE;"}],[0,{v:"&gE;",n:824,o:"&ngE;"}],[0,{v:"&lnE;",n:65024,o:"&lvertneqq;"}],[0,{v:"&gnE;",n:65024,o:"&gvertneqq;"}],[0,{v:"&ll;",n:new Map(ln([[824,"&nLtv;"],[7577,"&nLt;"]]))}],[0,{v:"&gg;",n:new Map(ln([[824,"&nGtv;"],[7577,"&nGt;"]]))}],[0,"&between;"],[0,"&NotCupCap;"],[0,"&nless;"],[0,"&ngt;"],[0,"&nle;"],[0,"&nge;"],[0,"&lesssim;"],[0,"&GreaterTilde;"],[0,"&nlsim;"],[0,"&ngsim;"],[0,"&LessGreater;"],[0,"&gl;"],[0,"&NotLessGreater;"],[0,"&NotGreaterLess;"],[0,"&pr;"],[0,"&sc;"],[0,"&prcue;"],[0,"&sccue;"],[0,"&PrecedesTilde;"],[0,{v:"&scsim;",n:824,o:"&NotSucceedsTilde;"}],[0,"&NotPrecedes;"],[0,"&NotSucceeds;"],[0,{v:"&sub;",n:8402,o:"&NotSubset;"}],[0,{v:"&sup;",n:8402,o:"&NotSuperset;"}],[0,"&nsub;"],[0,"&nsup;"],[0,"&sube;"],[0,"&supe;"],[0,"&NotSubsetEqual;"],[0,"&NotSupersetEqual;"],[0,{v:"&subne;",n:65024,o:"&varsubsetneq;"}],[0,{v:"&supne;",n:65024,o:"&varsupsetneq;"}],[1,"&cupdot;"],[0,"&UnionPlus;"],[0,{v:"&sqsub;",n:824,o:"&NotSquareSubset;"}],[0,{v:"&sqsup;",n:824,o:"&NotSquareSuperset;"}],[0,"&sqsube;"],[0,"&sqsupe;"],[0,{v:"&sqcap;",n:65024,o:"&sqcaps;"}],[0,{v:"&sqcup;",n:65024,o:"&sqcups;"}],[0,"&CirclePlus;"],[0,"&CircleMinus;"],[0,"&CircleTimes;"],[0,"&osol;"],[0,"&CircleDot;"],[0,"&circledcirc;"],[0,"&circledast;"],[1,"&circleddash;"],[0,"&boxplus;"],[0,"&boxminus;"],[0,"&boxtimes;"],[0,"&dotsquare;"],[0,"&RightTee;"],[0,"&dashv;"],[0,"&DownTee;"],[0,"&bot;"],[1,"&models;"],[0,"&DoubleRightTee;"],[0,"&Vdash;"],[0,"&Vvdash;"],[0,"&VDash;"],[0,"&nvdash;"],[0,"&nvDash;"],[0,"&nVdash;"],[0,"&nVDash;"],[0,"&prurel;"],[1,"&LeftTriangle;"],[0,"&RightTriangle;"],[0,{v:"&LeftTriangleEqual;",n:8402,o:"&nvltrie;"}],[0,{v:"&RightTriangleEqual;",n:8402,o:"&nvrtrie;"}],[0,"&origof;"],[0,"&imof;"],[0,"&multimap;"],[0,"&hercon;"],[0,"&intcal;"],[0,"&veebar;"],[1,"&barvee;"],[0,"&angrtvb;"],[0,"&lrtri;"],[0,"&bigwedge;"],[0,"&bigvee;"],[0,"&bigcap;"],[0,"&bigcup;"],[0,"&diam;"],[0,"&sdot;"],[0,"&sstarf;"],[0,"&divideontimes;"],[0,"&bowtie;"],[0,"&ltimes;"],[0,"&rtimes;"],[0,"&leftthreetimes;"],[0,"&rightthreetimes;"],[0,"&backsimeq;"],[0,"&curlyvee;"],[0,"&curlywedge;"],[0,"&Sub;"],[0,"&Sup;"],[0,"&Cap;"],[0,"&Cup;"],[0,"&fork;"],[0,"&epar;"],[0,"&lessdot;"],[0,"&gtdot;"],[0,{v:"&Ll;",n:824,o:"&nLl;"}],[0,{v:"&Gg;",n:824,o:"&nGg;"}],[0,{v:"&leg;",n:65024,o:"&lesg;"}],[0,{v:"&gel;",n:65024,o:"&gesl;"}],[2,"&cuepr;"],[0,"&cuesc;"],[0,"&NotPrecedesSlantEqual;"],[0,"&NotSucceedsSlantEqual;"],[0,"&NotSquareSubsetEqual;"],[0,"&NotSquareSupersetEqual;"],[2,"&lnsim;"],[0,"&gnsim;"],[0,"&precnsim;"],[0,"&scnsim;"],[0,"&nltri;"],[0,"&NotRightTriangle;"],[0,"&nltrie;"],[0,"&NotRightTriangleEqual;"],[0,"&vellip;"],[0,"&ctdot;"],[0,"&utdot;"],[0,"&dtdot;"],[0,"&disin;"],[0,"&isinsv;"],[0,"&isins;"],[0,{v:"&isindot;",n:824,o:"&notindot;"}],[0,"&notinvc;"],[0,"&notinvb;"],[1,{v:"&isinE;",n:824,o:"&notinE;"}],[0,"&nisd;"],[0,"&xnis;"],[0,"&nis;"],[0,"&notnivc;"],[0,"&notnivb;"],[6,"&barwed;"],[0,"&Barwed;"],[1,"&lceil;"],[0,"&rceil;"],[0,"&LeftFloor;"],[0,"&rfloor;"],[0,"&drcrop;"],[0,"&dlcrop;"],[0,"&urcrop;"],[0,"&ulcrop;"],[0,"&bnot;"],[1,"&profline;"],[0,"&profsurf;"],[1,"&telrec;"],[0,"&target;"],[5,"&ulcorn;"],[0,"&urcorn;"],[0,"&dlcorn;"],[0,"&drcorn;"],[2,"&frown;"],[0,"&smile;"],[9,"&cylcty;"],[0,"&profalar;"],[7,"&topbot;"],[6,"&ovbar;"],[1,"&solbar;"],[60,"&angzarr;"],[51,"&lmoustache;"],[0,"&rmoustache;"],[2,"&OverBracket;"],[0,"&bbrk;"],[0,"&bbrktbrk;"],[37,"&OverParenthesis;"],[0,"&UnderParenthesis;"],[0,"&OverBrace;"],[0,"&UnderBrace;"],[2,"&trpezium;"],[4,"&elinters;"],[59,"&blank;"],[164,"&circledS;"],[55,"&boxh;"],[1,"&boxv;"],[9,"&boxdr;"],[3,"&boxdl;"],[3,"&boxur;"],[3,"&boxul;"],[3,"&boxvr;"],[7,"&boxvl;"],[7,"&boxhd;"],[7,"&boxhu;"],[7,"&boxvh;"],[19,"&boxH;"],[0,"&boxV;"],[0,"&boxdR;"],[0,"&boxDr;"],[0,"&boxDR;"],[0,"&boxdL;"],[0,"&boxDl;"],[0,"&boxDL;"],[0,"&boxuR;"],[0,"&boxUr;"],[0,"&boxUR;"],[0,"&boxuL;"],[0,"&boxUl;"],[0,"&boxUL;"],[0,"&boxvR;"],[0,"&boxVr;"],[0,"&boxVR;"],[0,"&boxvL;"],[0,"&boxVl;"],[0,"&boxVL;"],[0,"&boxHd;"],[0,"&boxhD;"],[0,"&boxHD;"],[0,"&boxHu;"],[0,"&boxhU;"],[0,"&boxHU;"],[0,"&boxvH;"],[0,"&boxVh;"],[0,"&boxVH;"],[19,"&uhblk;"],[3,"&lhblk;"],[3,"&block;"],[8,"&blk14;"],[0,"&blk12;"],[0,"&blk34;"],[13,"&square;"],[8,"&blacksquare;"],[0,"&EmptyVerySmallSquare;"],[1,"&rect;"],[0,"&marker;"],[2,"&fltns;"],[1,"&bigtriangleup;"],[0,"&blacktriangle;"],[0,"&triangle;"],[2,"&blacktriangleright;"],[0,"&rtri;"],[3,"&bigtriangledown;"],[0,"&blacktriangledown;"],[0,"&dtri;"],[2,"&blacktriangleleft;"],[0,"&ltri;"],[6,"&loz;"],[0,"&cir;"],[32,"&tridot;"],[2,"&bigcirc;"],[8,"&ultri;"],[0,"&urtri;"],[0,"&lltri;"],[0,"&EmptySmallSquare;"],[0,"&FilledSmallSquare;"],[8,"&bigstar;"],[0,"&star;"],[7,"&phone;"],[49,"&female;"],[1,"&male;"],[29,"&spades;"],[2,"&clubs;"],[1,"&hearts;"],[0,"&diamondsuit;"],[3,"&sung;"],[2,"&flat;"],[0,"&natural;"],[0,"&sharp;"],[163,"&check;"],[3,"&cross;"],[8,"&malt;"],[21,"&sext;"],[33,"&VerticalSeparator;"],[25,"&lbbrk;"],[0,"&rbbrk;"],[84,"&bsolhsub;"],[0,"&suphsol;"],[28,"&LeftDoubleBracket;"],[0,"&RightDoubleBracket;"],[0,"&lang;"],[0,"&rang;"],[0,"&Lang;"],[0,"&Rang;"],[0,"&loang;"],[0,"&roang;"],[7,"&longleftarrow;"],[0,"&longrightarrow;"],[0,"&longleftrightarrow;"],[0,"&DoubleLongLeftArrow;"],[0,"&DoubleLongRightArrow;"],[0,"&DoubleLongLeftRightArrow;"],[1,"&longmapsto;"],[2,"&dzigrarr;"],[258,"&nvlArr;"],[0,"&nvrArr;"],[0,"&nvHarr;"],[0,"&Map;"],[6,"&lbarr;"],[0,"&bkarow;"],[0,"&lBarr;"],[0,"&dbkarow;"],[0,"&drbkarow;"],[0,"&DDotrahd;"],[0,"&UpArrowBar;"],[0,"&DownArrowBar;"],[2,"&Rarrtl;"],[2,"&latail;"],[0,"&ratail;"],[0,"&lAtail;"],[0,"&rAtail;"],[0,"&larrfs;"],[0,"&rarrfs;"],[0,"&larrbfs;"],[0,"&rarrbfs;"],[2,"&nwarhk;"],[0,"&nearhk;"],[0,"&hksearow;"],[0,"&hkswarow;"],[0,"&nwnear;"],[0,"&nesear;"],[0,"&seswar;"],[0,"&swnwar;"],[8,{v:"&rarrc;",n:824,o:"&nrarrc;"}],[1,"&cudarrr;"],[0,"&ldca;"],[0,"&rdca;"],[0,"&cudarrl;"],[0,"&larrpl;"],[2,"&curarrm;"],[0,"&cularrp;"],[7,"&rarrpl;"],[2,"&harrcir;"],[0,"&Uarrocir;"],[0,"&lurdshar;"],[0,"&ldrushar;"],[2,"&LeftRightVector;"],[0,"&RightUpDownVector;"],[0,"&DownLeftRightVector;"],[0,"&LeftUpDownVector;"],[0,"&LeftVectorBar;"],[0,"&RightVectorBar;"],[0,"&RightUpVectorBar;"],[0,"&RightDownVectorBar;"],[0,"&DownLeftVectorBar;"],[0,"&DownRightVectorBar;"],[0,"&LeftUpVectorBar;"],[0,"&LeftDownVectorBar;"],[0,"&LeftTeeVector;"],[0,"&RightTeeVector;"],[0,"&RightUpTeeVector;"],[0,"&RightDownTeeVector;"],[0,"&DownLeftTeeVector;"],[0,"&DownRightTeeVector;"],[0,"&LeftUpTeeVector;"],[0,"&LeftDownTeeVector;"],[0,"&lHar;"],[0,"&uHar;"],[0,"&rHar;"],[0,"&dHar;"],[0,"&luruhar;"],[0,"&ldrdhar;"],[0,"&ruluhar;"],[0,"&rdldhar;"],[0,"&lharul;"],[0,"&llhard;"],[0,"&rharul;"],[0,"&lrhard;"],[0,"&udhar;"],[0,"&duhar;"],[0,"&RoundImplies;"],[0,"&erarr;"],[0,"&simrarr;"],[0,"&larrsim;"],[0,"&rarrsim;"],[0,"&rarrap;"],[0,"&ltlarr;"],[1,"&gtrarr;"],[0,"&subrarr;"],[1,"&suplarr;"],[0,"&lfisht;"],[0,"&rfisht;"],[0,"&ufisht;"],[0,"&dfisht;"],[5,"&lopar;"],[0,"&ropar;"],[4,"&lbrke;"],[0,"&rbrke;"],[0,"&lbrkslu;"],[0,"&rbrksld;"],[0,"&lbrksld;"],[0,"&rbrkslu;"],[0,"&langd;"],[0,"&rangd;"],[0,"&lparlt;"],[0,"&rpargt;"],[0,"&gtlPar;"],[0,"&ltrPar;"],[3,"&vzigzag;"],[1,"&vangrt;"],[0,"&angrtvbd;"],[6,"&ange;"],[0,"&range;"],[0,"&dwangle;"],[0,"&uwangle;"],[0,"&angmsdaa;"],[0,"&angmsdab;"],[0,"&angmsdac;"],[0,"&angmsdad;"],[0,"&angmsdae;"],[0,"&angmsdaf;"],[0,"&angmsdag;"],[0,"&angmsdah;"],[0,"&bemptyv;"],[0,"&demptyv;"],[0,"&cemptyv;"],[0,"&raemptyv;"],[0,"&laemptyv;"],[0,"&ohbar;"],[0,"&omid;"],[0,"&opar;"],[1,"&operp;"],[1,"&olcross;"],[0,"&odsold;"],[1,"&olcir;"],[0,"&ofcir;"],[0,"&olt;"],[0,"&ogt;"],[0,"&cirscir;"],[0,"&cirE;"],[0,"&solb;"],[0,"&bsolb;"],[3,"&boxbox;"],[3,"&trisb;"],[0,"&rtriltri;"],[0,{v:"&LeftTriangleBar;",n:824,o:"&NotLeftTriangleBar;"}],[0,{v:"&RightTriangleBar;",n:824,o:"&NotRightTriangleBar;"}],[11,"&iinfin;"],[0,"&infintie;"],[0,"&nvinfin;"],[4,"&eparsl;"],[0,"&smeparsl;"],[0,"&eqvparsl;"],[5,"&blacklozenge;"],[8,"&RuleDelayed;"],[1,"&dsol;"],[9,"&bigodot;"],[0,"&bigoplus;"],[0,"&bigotimes;"],[1,"&biguplus;"],[1,"&bigsqcup;"],[5,"&iiiint;"],[0,"&fpartint;"],[2,"&cirfnint;"],[0,"&awint;"],[0,"&rppolint;"],[0,"&scpolint;"],[0,"&npolint;"],[0,"&pointint;"],[0,"&quatint;"],[0,"&intlarhk;"],[10,"&pluscir;"],[0,"&plusacir;"],[0,"&simplus;"],[0,"&plusdu;"],[0,"&plussim;"],[0,"&plustwo;"],[1,"&mcomma;"],[0,"&minusdu;"],[2,"&loplus;"],[0,"&roplus;"],[0,"&Cross;"],[0,"&timesd;"],[0,"&timesbar;"],[1,"&smashp;"],[0,"&lotimes;"],[0,"&rotimes;"],[0,"&otimesas;"],[0,"&Otimes;"],[0,"&odiv;"],[0,"&triplus;"],[0,"&triminus;"],[0,"&tritime;"],[0,"&intprod;"],[2,"&amalg;"],[0,"&capdot;"],[1,"&ncup;"],[0,"&ncap;"],[0,"&capand;"],[0,"&cupor;"],[0,"&cupcap;"],[0,"&capcup;"],[0,"&cupbrcap;"],[0,"&capbrcup;"],[0,"&cupcup;"],[0,"&capcap;"],[0,"&ccups;"],[0,"&ccaps;"],[2,"&ccupssm;"],[2,"&And;"],[0,"&Or;"],[0,"&andand;"],[0,"&oror;"],[0,"&orslope;"],[0,"&andslope;"],[1,"&andv;"],[0,"&orv;"],[0,"&andd;"],[0,"&ord;"],[1,"&wedbar;"],[6,"&sdote;"],[3,"&simdot;"],[2,{v:"&congdot;",n:824,o:"&ncongdot;"}],[0,"&easter;"],[0,"&apacir;"],[0,{v:"&apE;",n:824,o:"&napE;"}],[0,"&eplus;"],[0,"&pluse;"],[0,"&Esim;"],[0,"&Colone;"],[0,"&Equal;"],[1,"&ddotseq;"],[0,"&equivDD;"],[0,"&ltcir;"],[0,"&gtcir;"],[0,"&ltquest;"],[0,"&gtquest;"],[0,{v:"&leqslant;",n:824,o:"&nleqslant;"}],[0,{v:"&geqslant;",n:824,o:"&ngeqslant;"}],[0,"&lesdot;"],[0,"&gesdot;"],[0,"&lesdoto;"],[0,"&gesdoto;"],[0,"&lesdotor;"],[0,"&gesdotol;"],[0,"&lap;"],[0,"&gap;"],[0,"&lne;"],[0,"&gne;"],[0,"&lnap;"],[0,"&gnap;"],[0,"&lEg;"],[0,"&gEl;"],[0,"&lsime;"],[0,"&gsime;"],[0,"&lsimg;"],[0,"&gsiml;"],[0,"&lgE;"],[0,"&glE;"],[0,"&lesges;"],[0,"&gesles;"],[0,"&els;"],[0,"&egs;"],[0,"&elsdot;"],[0,"&egsdot;"],[0,"&el;"],[0,"&eg;"],[2,"&siml;"],[0,"&simg;"],[0,"&simlE;"],[0,"&simgE;"],[0,{v:"&LessLess;",n:824,o:"&NotNestedLessLess;"}],[0,{v:"&GreaterGreater;",n:824,o:"&NotNestedGreaterGreater;"}],[1,"&glj;"],[0,"&gla;"],[0,"&ltcc;"],[0,"&gtcc;"],[0,"&lescc;"],[0,"&gescc;"],[0,"&smt;"],[0,"&lat;"],[0,{v:"&smte;",n:65024,o:"&smtes;"}],[0,{v:"&late;",n:65024,o:"&lates;"}],[0,"&bumpE;"],[0,{v:"&PrecedesEqual;",n:824,o:"&NotPrecedesEqual;"}],[0,{v:"&sce;",n:824,o:"&NotSucceedsEqual;"}],[2,"&prE;"],[0,"&scE;"],[0,"&precneqq;"],[0,"&scnE;"],[0,"&prap;"],[0,"&scap;"],[0,"&precnapprox;"],[0,"&scnap;"],[0,"&Pr;"],[0,"&Sc;"],[0,"&subdot;"],[0,"&supdot;"],[0,"&subplus;"],[0,"&supplus;"],[0,"&submult;"],[0,"&supmult;"],[0,"&subedot;"],[0,"&supedot;"],[0,{v:"&subE;",n:824,o:"&nsubE;"}],[0,{v:"&supE;",n:824,o:"&nsupE;"}],[0,"&subsim;"],[0,"&supsim;"],[2,{v:"&subnE;",n:65024,o:"&varsubsetneqq;"}],[0,{v:"&supnE;",n:65024,o:"&varsupsetneqq;"}],[2,"&csub;"],[0,"&csup;"],[0,"&csube;"],[0,"&csupe;"],[0,"&subsup;"],[0,"&supsub;"],[0,"&subsub;"],[0,"&supsup;"],[0,"&suphsub;"],[0,"&supdsub;"],[0,"&forkv;"],[0,"&topfork;"],[0,"&mlcp;"],[8,"&Dashv;"],[1,"&Vdashl;"],[0,"&Barv;"],[0,"&vBar;"],[0,"&vBarv;"],[1,"&Vbar;"],[0,"&Not;"],[0,"&bNot;"],[0,"&rnmid;"],[0,"&cirmid;"],[0,"&midcir;"],[0,"&topcir;"],[0,"&nhpar;"],[0,"&parsim;"],[9,{v:"&parsl;",n:8421,o:"&nparsl;"}],[44343,{n:new Map(ln([[56476,"&Ascr;"],[1,"&Cscr;"],[0,"&Dscr;"],[2,"&Gscr;"],[2,"&Jscr;"],[0,"&Kscr;"],[2,"&Nscr;"],[0,"&Oscr;"],[0,"&Pscr;"],[0,"&Qscr;"],[1,"&Sscr;"],[0,"&Tscr;"],[0,"&Uscr;"],[0,"&Vscr;"],[0,"&Wscr;"],[0,"&Xscr;"],[0,"&Yscr;"],[0,"&Zscr;"],[0,"&ascr;"],[0,"&bscr;"],[0,"&cscr;"],[0,"&dscr;"],[1,"&fscr;"],[1,"&hscr;"],[0,"&iscr;"],[0,"&jscr;"],[0,"&kscr;"],[0,"&lscr;"],[0,"&mscr;"],[0,"&nscr;"],[1,"&pscr;"],[0,"&qscr;"],[0,"&rscr;"],[0,"&sscr;"],[0,"&tscr;"],[0,"&uscr;"],[0,"&vscr;"],[0,"&wscr;"],[0,"&xscr;"],[0,"&yscr;"],[0,"&zscr;"],[52,"&Afr;"],[0,"&Bfr;"],[1,"&Dfr;"],[0,"&Efr;"],[0,"&Ffr;"],[0,"&Gfr;"],[2,"&Jfr;"],[0,"&Kfr;"],[0,"&Lfr;"],[0,"&Mfr;"],[0,"&Nfr;"],[0,"&Ofr;"],[0,"&Pfr;"],[0,"&Qfr;"],[1,"&Sfr;"],[0,"&Tfr;"],[0,"&Ufr;"],[0,"&Vfr;"],[0,"&Wfr;"],[0,"&Xfr;"],[0,"&Yfr;"],[1,"&afr;"],[0,"&bfr;"],[0,"&cfr;"],[0,"&dfr;"],[0,"&efr;"],[0,"&ffr;"],[0,"&gfr;"],[0,"&hfr;"],[0,"&ifr;"],[0,"&jfr;"],[0,"&kfr;"],[0,"&lfr;"],[0,"&mfr;"],[0,"&nfr;"],[0,"&ofr;"],[0,"&pfr;"],[0,"&qfr;"],[0,"&rfr;"],[0,"&sfr;"],[0,"&tfr;"],[0,"&ufr;"],[0,"&vfr;"],[0,"&wfr;"],[0,"&xfr;"],[0,"&yfr;"],[0,"&zfr;"],[0,"&Aopf;"],[0,"&Bopf;"],[1,"&Dopf;"],[0,"&Eopf;"],[0,"&Fopf;"],[0,"&Gopf;"],[1,"&Iopf;"],[0,"&Jopf;"],[0,"&Kopf;"],[0,"&Lopf;"],[0,"&Mopf;"],[1,"&Oopf;"],[3,"&Sopf;"],[0,"&Topf;"],[0,"&Uopf;"],[0,"&Vopf;"],[0,"&Wopf;"],[0,"&Xopf;"],[0,"&Yopf;"],[1,"&aopf;"],[0,"&bopf;"],[0,"&copf;"],[0,"&dopf;"],[0,"&eopf;"],[0,"&fopf;"],[0,"&gopf;"],[0,"&hopf;"],[0,"&iopf;"],[0,"&jopf;"],[0,"&kopf;"],[0,"&lopf;"],[0,"&mopf;"],[0,"&nopf;"],[0,"&oopf;"],[0,"&popf;"],[0,"&qopf;"],[0,"&ropf;"],[0,"&sopf;"],[0,"&topf;"],[0,"&uopf;"],[0,"&vopf;"],[0,"&wopf;"],[0,"&xopf;"],[0,"&yopf;"],[0,"&zopf;"]]))}],[8906,"&fflig;"],[0,"&filig;"],[0,"&fllig;"],[0,"&ffilig;"],[0,"&ffllig;"]]));const cn=new Map([[34,"&quot;"],[38,"&amp;"],[39,"&apos;"],[60,"&lt;"],[62,"&gt;"]]);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,"&quot;"],[38,"&amp;"],[160,"&nbsp;"]])),fn(/[&<>\u00A0]/g,new Map([[38,"&amp;"],[60,"&lt;"],[62,"&gt;"],[160,"&nbsp;"]])),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={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"};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,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")},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,"&quot;")}(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(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&").replace(/&quot;/g,'"').replace(/&#39;/g,"'"),t.decodeNbsp&&(r=r.replace(/&nbsp;/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,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")},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୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢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;怳Ādp໩໮uct;戏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ǣጓ\0጖y;䐎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Ā;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀ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Ā;e᜚᜜lƀ;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\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩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ↄⅪ←ٖ↛ǰ↉\0↎proø₞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;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\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\0⹻m;櫳;櫽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,"&Tab;"],[0,"&NewLine;"],[22,"&excl;"],[0,"&quot;"],[0,"&num;"],[0,"&dollar;"],[0,"&percnt;"],[0,"&amp;"],[0,"&apos;"],[0,"&lpar;"],[0,"&rpar;"],[0,"&ast;"],[0,"&plus;"],[0,"&comma;"],[1,"&period;"],[0,"&sol;"],[10,"&colon;"],[0,"&semi;"],[0,{v:"&lt;",n:8402,o:"&nvlt;"}],[0,{v:"&equals;",n:8421,o:"&bne;"}],[0,{v:"&gt;",n:8402,o:"&nvgt;"}],[0,"&quest;"],[0,"&commat;"],[26,"&lbrack;"],[0,"&bsol;"],[0,"&rbrack;"],[0,"&Hat;"],[0,"&lowbar;"],[0,"&DiacriticalGrave;"],[5,{n:106,o:"&fjlig;"}],[20,"&lbrace;"],[0,"&verbar;"],[0,"&rbrace;"],[34,"&nbsp;"],[0,"&iexcl;"],[0,"&cent;"],[0,"&pound;"],[0,"&curren;"],[0,"&yen;"],[0,"&brvbar;"],[0,"&sect;"],[0,"&die;"],[0,"&copy;"],[0,"&ordf;"],[0,"&laquo;"],[0,"&not;"],[0,"&shy;"],[0,"&circledR;"],[0,"&macr;"],[0,"&deg;"],[0,"&PlusMinus;"],[0,"&sup2;"],[0,"&sup3;"],[0,"&acute;"],[0,"&micro;"],[0,"&para;"],[0,"&centerdot;"],[0,"&cedil;"],[0,"&sup1;"],[0,"&ordm;"],[0,"&raquo;"],[0,"&frac14;"],[0,"&frac12;"],[0,"&frac34;"],[0,"&iquest;"],[0,"&Agrave;"],[0,"&Aacute;"],[0,"&Acirc;"],[0,"&Atilde;"],[0,"&Auml;"],[0,"&angst;"],[0,"&AElig;"],[0,"&Ccedil;"],[0,"&Egrave;"],[0,"&Eacute;"],[0,"&Ecirc;"],[0,"&Euml;"],[0,"&Igrave;"],[0,"&Iacute;"],[0,"&Icirc;"],[0,"&Iuml;"],[0,"&ETH;"],[0,"&Ntilde;"],[0,"&Ograve;"],[0,"&Oacute;"],[0,"&Ocirc;"],[0,"&Otilde;"],[0,"&Ouml;"],[0,"&times;"],[0,"&Oslash;"],[0,"&Ugrave;"],[0,"&Uacute;"],[0,"&Ucirc;"],[0,"&Uuml;"],[0,"&Yacute;"],[0,"&THORN;"],[0,"&szlig;"],[0,"&agrave;"],[0,"&aacute;"],[0,"&acirc;"],[0,"&atilde;"],[0,"&auml;"],[0,"&aring;"],[0,"&aelig;"],[0,"&ccedil;"],[0,"&egrave;"],[0,"&eacute;"],[0,"&ecirc;"],[0,"&euml;"],[0,"&igrave;"],[0,"&iacute;"],[0,"&icirc;"],[0,"&iuml;"],[0,"&eth;"],[0,"&ntilde;"],[0,"&ograve;"],[0,"&oacute;"],[0,"&ocirc;"],[0,"&otilde;"],[0,"&ouml;"],[0,"&div;"],[0,"&oslash;"],[0,"&ugrave;"],[0,"&uacute;"],[0,"&ucirc;"],[0,"&uuml;"],[0,"&yacute;"],[0,"&thorn;"],[0,"&yuml;"],[0,"&Amacr;"],[0,"&amacr;"],[0,"&Abreve;"],[0,"&abreve;"],[0,"&Aogon;"],[0,"&aogon;"],[0,"&Cacute;"],[0,"&cacute;"],[0,"&Ccirc;"],[0,"&ccirc;"],[0,"&Cdot;"],[0,"&cdot;"],[0,"&Ccaron;"],[0,"&ccaron;"],[0,"&Dcaron;"],[0,"&dcaron;"],[0,"&Dstrok;"],[0,"&dstrok;"],[0,"&Emacr;"],[0,"&emacr;"],[2,"&Edot;"],[0,"&edot;"],[0,"&Eogon;"],[0,"&eogon;"],[0,"&Ecaron;"],[0,"&ecaron;"],[0,"&Gcirc;"],[0,"&gcirc;"],[0,"&Gbreve;"],[0,"&gbreve;"],[0,"&Gdot;"],[0,"&gdot;"],[0,"&Gcedil;"],[1,"&Hcirc;"],[0,"&hcirc;"],[0,"&Hstrok;"],[0,"&hstrok;"],[0,"&Itilde;"],[0,"&itilde;"],[0,"&Imacr;"],[0,"&imacr;"],[2,"&Iogon;"],[0,"&iogon;"],[0,"&Idot;"],[0,"&imath;"],[0,"&IJlig;"],[0,"&ijlig;"],[0,"&Jcirc;"],[0,"&jcirc;"],[0,"&Kcedil;"],[0,"&kcedil;"],[0,"&kgreen;"],[0,"&Lacute;"],[0,"&lacute;"],[0,"&Lcedil;"],[0,"&lcedil;"],[0,"&Lcaron;"],[0,"&lcaron;"],[0,"&Lmidot;"],[0,"&lmidot;"],[0,"&Lstrok;"],[0,"&lstrok;"],[0,"&Nacute;"],[0,"&nacute;"],[0,"&Ncedil;"],[0,"&ncedil;"],[0,"&Ncaron;"],[0,"&ncaron;"],[0,"&napos;"],[0,"&ENG;"],[0,"&eng;"],[0,"&Omacr;"],[0,"&omacr;"],[2,"&Odblac;"],[0,"&odblac;"],[0,"&OElig;"],[0,"&oelig;"],[0,"&Racute;"],[0,"&racute;"],[0,"&Rcedil;"],[0,"&rcedil;"],[0,"&Rcaron;"],[0,"&rcaron;"],[0,"&Sacute;"],[0,"&sacute;"],[0,"&Scirc;"],[0,"&scirc;"],[0,"&Scedil;"],[0,"&scedil;"],[0,"&Scaron;"],[0,"&scaron;"],[0,"&Tcedil;"],[0,"&tcedil;"],[0,"&Tcaron;"],[0,"&tcaron;"],[0,"&Tstrok;"],[0,"&tstrok;"],[0,"&Utilde;"],[0,"&utilde;"],[0,"&Umacr;"],[0,"&umacr;"],[0,"&Ubreve;"],[0,"&ubreve;"],[0,"&Uring;"],[0,"&uring;"],[0,"&Udblac;"],[0,"&udblac;"],[0,"&Uogon;"],[0,"&uogon;"],[0,"&Wcirc;"],[0,"&wcirc;"],[0,"&Ycirc;"],[0,"&ycirc;"],[0,"&Yuml;"],[0,"&Zacute;"],[0,"&zacute;"],[0,"&Zdot;"],[0,"&zdot;"],[0,"&Zcaron;"],[0,"&zcaron;"],[19,"&fnof;"],[34,"&imped;"],[63,"&gacute;"],[65,"&jmath;"],[142,"&circ;"],[0,"&caron;"],[16,"&breve;"],[0,"&DiacriticalDot;"],[0,"&ring;"],[0,"&ogon;"],[0,"&DiacriticalTilde;"],[0,"&dblac;"],[51,"&DownBreve;"],[127,"&Alpha;"],[0,"&Beta;"],[0,"&Gamma;"],[0,"&Delta;"],[0,"&Epsilon;"],[0,"&Zeta;"],[0,"&Eta;"],[0,"&Theta;"],[0,"&Iota;"],[0,"&Kappa;"],[0,"&Lambda;"],[0,"&Mu;"],[0,"&Nu;"],[0,"&Xi;"],[0,"&Omicron;"],[0,"&Pi;"],[0,"&Rho;"],[1,"&Sigma;"],[0,"&Tau;"],[0,"&Upsilon;"],[0,"&Phi;"],[0,"&Chi;"],[0,"&Psi;"],[0,"&ohm;"],[7,"&alpha;"],[0,"&beta;"],[0,"&gamma;"],[0,"&delta;"],[0,"&epsi;"],[0,"&zeta;"],[0,"&eta;"],[0,"&theta;"],[0,"&iota;"],[0,"&kappa;"],[0,"&lambda;"],[0,"&mu;"],[0,"&nu;"],[0,"&xi;"],[0,"&omicron;"],[0,"&pi;"],[0,"&rho;"],[0,"&sigmaf;"],[0,"&sigma;"],[0,"&tau;"],[0,"&upsi;"],[0,"&phi;"],[0,"&chi;"],[0,"&psi;"],[0,"&omega;"],[7,"&thetasym;"],[0,"&Upsi;"],[2,"&phiv;"],[0,"&piv;"],[5,"&Gammad;"],[0,"&digamma;"],[18,"&kappav;"],[0,"&rhov;"],[3,"&epsiv;"],[0,"&backepsilon;"],[10,"&IOcy;"],[0,"&DJcy;"],[0,"&GJcy;"],[0,"&Jukcy;"],[0,"&DScy;"],[0,"&Iukcy;"],[0,"&YIcy;"],[0,"&Jsercy;"],[0,"&LJcy;"],[0,"&NJcy;"],[0,"&TSHcy;"],[0,"&KJcy;"],[1,"&Ubrcy;"],[0,"&DZcy;"],[0,"&Acy;"],[0,"&Bcy;"],[0,"&Vcy;"],[0,"&Gcy;"],[0,"&Dcy;"],[0,"&IEcy;"],[0,"&ZHcy;"],[0,"&Zcy;"],[0,"&Icy;"],[0,"&Jcy;"],[0,"&Kcy;"],[0,"&Lcy;"],[0,"&Mcy;"],[0,"&Ncy;"],[0,"&Ocy;"],[0,"&Pcy;"],[0,"&Rcy;"],[0,"&Scy;"],[0,"&Tcy;"],[0,"&Ucy;"],[0,"&Fcy;"],[0,"&KHcy;"],[0,"&TScy;"],[0,"&CHcy;"],[0,"&SHcy;"],[0,"&SHCHcy;"],[0,"&HARDcy;"],[0,"&Ycy;"],[0,"&SOFTcy;"],[0,"&Ecy;"],[0,"&YUcy;"],[0,"&YAcy;"],[0,"&acy;"],[0,"&bcy;"],[0,"&vcy;"],[0,"&gcy;"],[0,"&dcy;"],[0,"&iecy;"],[0,"&zhcy;"],[0,"&zcy;"],[0,"&icy;"],[0,"&jcy;"],[0,"&kcy;"],[0,"&lcy;"],[0,"&mcy;"],[0,"&ncy;"],[0,"&ocy;"],[0,"&pcy;"],[0,"&rcy;"],[0,"&scy;"],[0,"&tcy;"],[0,"&ucy;"],[0,"&fcy;"],[0,"&khcy;"],[0,"&tscy;"],[0,"&chcy;"],[0,"&shcy;"],[0,"&shchcy;"],[0,"&hardcy;"],[0,"&ycy;"],[0,"&softcy;"],[0,"&ecy;"],[0,"&yucy;"],[0,"&yacy;"],[1,"&iocy;"],[0,"&djcy;"],[0,"&gjcy;"],[0,"&jukcy;"],[0,"&dscy;"],[0,"&iukcy;"],[0,"&yicy;"],[0,"&jsercy;"],[0,"&ljcy;"],[0,"&njcy;"],[0,"&tshcy;"],[0,"&kjcy;"],[1,"&ubrcy;"],[0,"&dzcy;"],[7074,"&ensp;"],[0,"&emsp;"],[0,"&emsp13;"],[0,"&emsp14;"],[1,"&numsp;"],[0,"&puncsp;"],[0,"&ThinSpace;"],[0,"&hairsp;"],[0,"&NegativeMediumSpace;"],[0,"&zwnj;"],[0,"&zwj;"],[0,"&lrm;"],[0,"&rlm;"],[0,"&dash;"],[2,"&ndash;"],[0,"&mdash;"],[0,"&horbar;"],[0,"&Verbar;"],[1,"&lsquo;"],[0,"&CloseCurlyQuote;"],[0,"&lsquor;"],[1,"&ldquo;"],[0,"&CloseCurlyDoubleQuote;"],[0,"&bdquo;"],[1,"&dagger;"],[0,"&Dagger;"],[0,"&bull;"],[2,"&nldr;"],[0,"&hellip;"],[9,"&permil;"],[0,"&pertenk;"],[0,"&prime;"],[0,"&Prime;"],[0,"&tprime;"],[0,"&backprime;"],[3,"&lsaquo;"],[0,"&rsaquo;"],[3,"&oline;"],[2,"&caret;"],[1,"&hybull;"],[0,"&frasl;"],[10,"&bsemi;"],[7,"&qprime;"],[7,{v:"&MediumSpace;",n:8202,o:"&ThickSpace;"}],[0,"&NoBreak;"],[0,"&af;"],[0,"&InvisibleTimes;"],[0,"&ic;"],[72,"&euro;"],[46,"&tdot;"],[0,"&DotDot;"],[37,"&complexes;"],[2,"&incare;"],[4,"&gscr;"],[0,"&hamilt;"],[0,"&Hfr;"],[0,"&Hopf;"],[0,"&planckh;"],[0,"&hbar;"],[0,"&imagline;"],[0,"&Ifr;"],[0,"&lagran;"],[0,"&ell;"],[1,"&naturals;"],[0,"&numero;"],[0,"&copysr;"],[0,"&weierp;"],[0,"&Popf;"],[0,"&Qopf;"],[0,"&realine;"],[0,"&real;"],[0,"&reals;"],[0,"&rx;"],[3,"&trade;"],[1,"&integers;"],[2,"&mho;"],[0,"&zeetrf;"],[0,"&iiota;"],[2,"&bernou;"],[0,"&Cayleys;"],[1,"&escr;"],[0,"&Escr;"],[0,"&Fouriertrf;"],[1,"&Mellintrf;"],[0,"&order;"],[0,"&alefsym;"],[0,"&beth;"],[0,"&gimel;"],[0,"&daleth;"],[12,"&CapitalDifferentialD;"],[0,"&dd;"],[0,"&ee;"],[0,"&ii;"],[10,"&frac13;"],[0,"&frac23;"],[0,"&frac15;"],[0,"&frac25;"],[0,"&frac35;"],[0,"&frac45;"],[0,"&frac16;"],[0,"&frac56;"],[0,"&frac18;"],[0,"&frac38;"],[0,"&frac58;"],[0,"&frac78;"],[49,"&larr;"],[0,"&ShortUpArrow;"],[0,"&rarr;"],[0,"&darr;"],[0,"&harr;"],[0,"&updownarrow;"],[0,"&nwarr;"],[0,"&nearr;"],[0,"&LowerRightArrow;"],[0,"&LowerLeftArrow;"],[0,"&nlarr;"],[0,"&nrarr;"],[1,{v:"&rarrw;",n:824,o:"&nrarrw;"}],[0,"&Larr;"],[0,"&Uarr;"],[0,"&Rarr;"],[0,"&Darr;"],[0,"&larrtl;"],[0,"&rarrtl;"],[0,"&LeftTeeArrow;"],[0,"&mapstoup;"],[0,"&map;"],[0,"&DownTeeArrow;"],[1,"&hookleftarrow;"],[0,"&hookrightarrow;"],[0,"&larrlp;"],[0,"&looparrowright;"],[0,"&harrw;"],[0,"&nharr;"],[1,"&lsh;"],[0,"&rsh;"],[0,"&ldsh;"],[0,"&rdsh;"],[1,"&crarr;"],[0,"&cularr;"],[0,"&curarr;"],[2,"&circlearrowleft;"],[0,"&circlearrowright;"],[0,"&leftharpoonup;"],[0,"&DownLeftVector;"],[0,"&RightUpVector;"],[0,"&LeftUpVector;"],[0,"&rharu;"],[0,"&DownRightVector;"],[0,"&dharr;"],[0,"&dharl;"],[0,"&RightArrowLeftArrow;"],[0,"&udarr;"],[0,"&LeftArrowRightArrow;"],[0,"&leftleftarrows;"],[0,"&upuparrows;"],[0,"&rightrightarrows;"],[0,"&ddarr;"],[0,"&leftrightharpoons;"],[0,"&Equilibrium;"],[0,"&nlArr;"],[0,"&nhArr;"],[0,"&nrArr;"],[0,"&DoubleLeftArrow;"],[0,"&DoubleUpArrow;"],[0,"&DoubleRightArrow;"],[0,"&dArr;"],[0,"&DoubleLeftRightArrow;"],[0,"&DoubleUpDownArrow;"],[0,"&nwArr;"],[0,"&neArr;"],[0,"&seArr;"],[0,"&swArr;"],[0,"&lAarr;"],[0,"&rAarr;"],[1,"&zigrarr;"],[6,"&larrb;"],[0,"&rarrb;"],[15,"&DownArrowUpArrow;"],[7,"&loarr;"],[0,"&roarr;"],[0,"&hoarr;"],[0,"&forall;"],[0,"&comp;"],[0,{v:"&part;",n:824,o:"&npart;"}],[0,"&exist;"],[0,"&nexist;"],[0,"&empty;"],[1,"&Del;"],[0,"&Element;"],[0,"&NotElement;"],[1,"&ni;"],[0,"&notni;"],[2,"&prod;"],[0,"&coprod;"],[0,"&sum;"],[0,"&minus;"],[0,"&MinusPlus;"],[0,"&dotplus;"],[1,"&Backslash;"],[0,"&lowast;"],[0,"&compfn;"],[1,"&radic;"],[2,"&prop;"],[0,"&infin;"],[0,"&angrt;"],[0,{v:"&ang;",n:8402,o:"&nang;"}],[0,"&angmsd;"],[0,"&angsph;"],[0,"&mid;"],[0,"&nmid;"],[0,"&DoubleVerticalBar;"],[0,"&NotDoubleVerticalBar;"],[0,"&and;"],[0,"&or;"],[0,{v:"&cap;",n:65024,o:"&caps;"}],[0,{v:"&cup;",n:65024,o:"&cups;"}],[0,"&int;"],[0,"&Int;"],[0,"&iiint;"],[0,"&conint;"],[0,"&Conint;"],[0,"&Cconint;"],[0,"&cwint;"],[0,"&ClockwiseContourIntegral;"],[0,"&awconint;"],[0,"&there4;"],[0,"&becaus;"],[0,"&ratio;"],[0,"&Colon;"],[0,"&dotminus;"],[1,"&mDDot;"],[0,"&homtht;"],[0,{v:"&sim;",n:8402,o:"&nvsim;"}],[0,{v:"&backsim;",n:817,o:"&race;"}],[0,{v:"&ac;",n:819,o:"&acE;"}],[0,"&acd;"],[0,"&VerticalTilde;"],[0,"&NotTilde;"],[0,{v:"&eqsim;",n:824,o:"&nesim;"}],[0,"&sime;"],[0,"&NotTildeEqual;"],[0,"&cong;"],[0,"&simne;"],[0,"&ncong;"],[0,"&ap;"],[0,"&nap;"],[0,"&ape;"],[0,{v:"&apid;",n:824,o:"&napid;"}],[0,"&backcong;"],[0,{v:"&asympeq;",n:8402,o:"&nvap;"}],[0,{v:"&bump;",n:824,o:"&nbump;"}],[0,{v:"&bumpe;",n:824,o:"&nbumpe;"}],[0,{v:"&doteq;",n:824,o:"&nedot;"}],[0,"&doteqdot;"],[0,"&efDot;"],[0,"&erDot;"],[0,"&Assign;"],[0,"&ecolon;"],[0,"&ecir;"],[0,"&circeq;"],[1,"&wedgeq;"],[0,"&veeeq;"],[1,"&triangleq;"],[2,"&equest;"],[0,"&ne;"],[0,{v:"&Congruent;",n:8421,o:"&bnequiv;"}],[0,"&nequiv;"],[1,{v:"&le;",n:8402,o:"&nvle;"}],[0,{v:"&ge;",n:8402,o:"&nvge;"}],[0,{v:"&lE;",n:824,o:"&nlE;"}],[0,{v:"&gE;",n:824,o:"&ngE;"}],[0,{v:"&lnE;",n:65024,o:"&lvertneqq;"}],[0,{v:"&gnE;",n:65024,o:"&gvertneqq;"}],[0,{v:"&ll;",n:new Map(ln([[824,"&nLtv;"],[7577,"&nLt;"]]))}],[0,{v:"&gg;",n:new Map(ln([[824,"&nGtv;"],[7577,"&nGt;"]]))}],[0,"&between;"],[0,"&NotCupCap;"],[0,"&nless;"],[0,"&ngt;"],[0,"&nle;"],[0,"&nge;"],[0,"&lesssim;"],[0,"&GreaterTilde;"],[0,"&nlsim;"],[0,"&ngsim;"],[0,"&LessGreater;"],[0,"&gl;"],[0,"&NotLessGreater;"],[0,"&NotGreaterLess;"],[0,"&pr;"],[0,"&sc;"],[0,"&prcue;"],[0,"&sccue;"],[0,"&PrecedesTilde;"],[0,{v:"&scsim;",n:824,o:"&NotSucceedsTilde;"}],[0,"&NotPrecedes;"],[0,"&NotSucceeds;"],[0,{v:"&sub;",n:8402,o:"&NotSubset;"}],[0,{v:"&sup;",n:8402,o:"&NotSuperset;"}],[0,"&nsub;"],[0,"&nsup;"],[0,"&sube;"],[0,"&supe;"],[0,"&NotSubsetEqual;"],[0,"&NotSupersetEqual;"],[0,{v:"&subne;",n:65024,o:"&varsubsetneq;"}],[0,{v:"&supne;",n:65024,o:"&varsupsetneq;"}],[1,"&cupdot;"],[0,"&UnionPlus;"],[0,{v:"&sqsub;",n:824,o:"&NotSquareSubset;"}],[0,{v:"&sqsup;",n:824,o:"&NotSquareSuperset;"}],[0,"&sqsube;"],[0,"&sqsupe;"],[0,{v:"&sqcap;",n:65024,o:"&sqcaps;"}],[0,{v:"&sqcup;",n:65024,o:"&sqcups;"}],[0,"&CirclePlus;"],[0,"&CircleMinus;"],[0,"&CircleTimes;"],[0,"&osol;"],[0,"&CircleDot;"],[0,"&circledcirc;"],[0,"&circledast;"],[1,"&circleddash;"],[0,"&boxplus;"],[0,"&boxminus;"],[0,"&boxtimes;"],[0,"&dotsquare;"],[0,"&RightTee;"],[0,"&dashv;"],[0,"&DownTee;"],[0,"&bot;"],[1,"&models;"],[0,"&DoubleRightTee;"],[0,"&Vdash;"],[0,"&Vvdash;"],[0,"&VDash;"],[0,"&nvdash;"],[0,"&nvDash;"],[0,"&nVdash;"],[0,"&nVDash;"],[0,"&prurel;"],[1,"&LeftTriangle;"],[0,"&RightTriangle;"],[0,{v:"&LeftTriangleEqual;",n:8402,o:"&nvltrie;"}],[0,{v:"&RightTriangleEqual;",n:8402,o:"&nvrtrie;"}],[0,"&origof;"],[0,"&imof;"],[0,"&multimap;"],[0,"&hercon;"],[0,"&intcal;"],[0,"&veebar;"],[1,"&barvee;"],[0,"&angrtvb;"],[0,"&lrtri;"],[0,"&bigwedge;"],[0,"&bigvee;"],[0,"&bigcap;"],[0,"&bigcup;"],[0,"&diam;"],[0,"&sdot;"],[0,"&sstarf;"],[0,"&divideontimes;"],[0,"&bowtie;"],[0,"&ltimes;"],[0,"&rtimes;"],[0,"&leftthreetimes;"],[0,"&rightthreetimes;"],[0,"&backsimeq;"],[0,"&curlyvee;"],[0,"&curlywedge;"],[0,"&Sub;"],[0,"&Sup;"],[0,"&Cap;"],[0,"&Cup;"],[0,"&fork;"],[0,"&epar;"],[0,"&lessdot;"],[0,"&gtdot;"],[0,{v:"&Ll;",n:824,o:"&nLl;"}],[0,{v:"&Gg;",n:824,o:"&nGg;"}],[0,{v:"&leg;",n:65024,o:"&lesg;"}],[0,{v:"&gel;",n:65024,o:"&gesl;"}],[2,"&cuepr;"],[0,"&cuesc;"],[0,"&NotPrecedesSlantEqual;"],[0,"&NotSucceedsSlantEqual;"],[0,"&NotSquareSubsetEqual;"],[0,"&NotSquareSupersetEqual;"],[2,"&lnsim;"],[0,"&gnsim;"],[0,"&precnsim;"],[0,"&scnsim;"],[0,"&nltri;"],[0,"&NotRightTriangle;"],[0,"&nltrie;"],[0,"&NotRightTriangleEqual;"],[0,"&vellip;"],[0,"&ctdot;"],[0,"&utdot;"],[0,"&dtdot;"],[0,"&disin;"],[0,"&isinsv;"],[0,"&isins;"],[0,{v:"&isindot;",n:824,o:"&notindot;"}],[0,"&notinvc;"],[0,"&notinvb;"],[1,{v:"&isinE;",n:824,o:"&notinE;"}],[0,"&nisd;"],[0,"&xnis;"],[0,"&nis;"],[0,"&notnivc;"],[0,"&notnivb;"],[6,"&barwed;"],[0,"&Barwed;"],[1,"&lceil;"],[0,"&rceil;"],[0,"&LeftFloor;"],[0,"&rfloor;"],[0,"&drcrop;"],[0,"&dlcrop;"],[0,"&urcrop;"],[0,"&ulcrop;"],[0,"&bnot;"],[1,"&profline;"],[0,"&profsurf;"],[1,"&telrec;"],[0,"&target;"],[5,"&ulcorn;"],[0,"&urcorn;"],[0,"&dlcorn;"],[0,"&drcorn;"],[2,"&frown;"],[0,"&smile;"],[9,"&cylcty;"],[0,"&profalar;"],[7,"&topbot;"],[6,"&ovbar;"],[1,"&solbar;"],[60,"&angzarr;"],[51,"&lmoustache;"],[0,"&rmoustache;"],[2,"&OverBracket;"],[0,"&bbrk;"],[0,"&bbrktbrk;"],[37,"&OverParenthesis;"],[0,"&UnderParenthesis;"],[0,"&OverBrace;"],[0,"&UnderBrace;"],[2,"&trpezium;"],[4,"&elinters;"],[59,"&blank;"],[164,"&circledS;"],[55,"&boxh;"],[1,"&boxv;"],[9,"&boxdr;"],[3,"&boxdl;"],[3,"&boxur;"],[3,"&boxul;"],[3,"&boxvr;"],[7,"&boxvl;"],[7,"&boxhd;"],[7,"&boxhu;"],[7,"&boxvh;"],[19,"&boxH;"],[0,"&boxV;"],[0,"&boxdR;"],[0,"&boxDr;"],[0,"&boxDR;"],[0,"&boxdL;"],[0,"&boxDl;"],[0,"&boxDL;"],[0,"&boxuR;"],[0,"&boxUr;"],[0,"&boxUR;"],[0,"&boxuL;"],[0,"&boxUl;"],[0,"&boxUL;"],[0,"&boxvR;"],[0,"&boxVr;"],[0,"&boxVR;"],[0,"&boxvL;"],[0,"&boxVl;"],[0,"&boxVL;"],[0,"&boxHd;"],[0,"&boxhD;"],[0,"&boxHD;"],[0,"&boxHu;"],[0,"&boxhU;"],[0,"&boxHU;"],[0,"&boxvH;"],[0,"&boxVh;"],[0,"&boxVH;"],[19,"&uhblk;"],[3,"&lhblk;"],[3,"&block;"],[8,"&blk14;"],[0,"&blk12;"],[0,"&blk34;"],[13,"&square;"],[8,"&blacksquare;"],[0,"&EmptyVerySmallSquare;"],[1,"&rect;"],[0,"&marker;"],[2,"&fltns;"],[1,"&bigtriangleup;"],[0,"&blacktriangle;"],[0,"&triangle;"],[2,"&blacktriangleright;"],[0,"&rtri;"],[3,"&bigtriangledown;"],[0,"&blacktriangledown;"],[0,"&dtri;"],[2,"&blacktriangleleft;"],[0,"&ltri;"],[6,"&loz;"],[0,"&cir;"],[32,"&tridot;"],[2,"&bigcirc;"],[8,"&ultri;"],[0,"&urtri;"],[0,"&lltri;"],[0,"&EmptySmallSquare;"],[0,"&FilledSmallSquare;"],[8,"&bigstar;"],[0,"&star;"],[7,"&phone;"],[49,"&female;"],[1,"&male;"],[29,"&spades;"],[2,"&clubs;"],[1,"&hearts;"],[0,"&diamondsuit;"],[3,"&sung;"],[2,"&flat;"],[0,"&natural;"],[0,"&sharp;"],[163,"&check;"],[3,"&cross;"],[8,"&malt;"],[21,"&sext;"],[33,"&VerticalSeparator;"],[25,"&lbbrk;"],[0,"&rbbrk;"],[84,"&bsolhsub;"],[0,"&suphsol;"],[28,"&LeftDoubleBracket;"],[0,"&RightDoubleBracket;"],[0,"&lang;"],[0,"&rang;"],[0,"&Lang;"],[0,"&Rang;"],[0,"&loang;"],[0,"&roang;"],[7,"&longleftarrow;"],[0,"&longrightarrow;"],[0,"&longleftrightarrow;"],[0,"&DoubleLongLeftArrow;"],[0,"&DoubleLongRightArrow;"],[0,"&DoubleLongLeftRightArrow;"],[1,"&longmapsto;"],[2,"&dzigrarr;"],[258,"&nvlArr;"],[0,"&nvrArr;"],[0,"&nvHarr;"],[0,"&Map;"],[6,"&lbarr;"],[0,"&bkarow;"],[0,"&lBarr;"],[0,"&dbkarow;"],[0,"&drbkarow;"],[0,"&DDotrahd;"],[0,"&UpArrowBar;"],[0,"&DownArrowBar;"],[2,"&Rarrtl;"],[2,"&latail;"],[0,"&ratail;"],[0,"&lAtail;"],[0,"&rAtail;"],[0,"&larrfs;"],[0,"&rarrfs;"],[0,"&larrbfs;"],[0,"&rarrbfs;"],[2,"&nwarhk;"],[0,"&nearhk;"],[0,"&hksearow;"],[0,"&hkswarow;"],[0,"&nwnear;"],[0,"&nesear;"],[0,"&seswar;"],[0,"&swnwar;"],[8,{v:"&rarrc;",n:824,o:"&nrarrc;"}],[1,"&cudarrr;"],[0,"&ldca;"],[0,"&rdca;"],[0,"&cudarrl;"],[0,"&larrpl;"],[2,"&curarrm;"],[0,"&cularrp;"],[7,"&rarrpl;"],[2,"&harrcir;"],[0,"&Uarrocir;"],[0,"&lurdshar;"],[0,"&ldrushar;"],[2,"&LeftRightVector;"],[0,"&RightUpDownVector;"],[0,"&DownLeftRightVector;"],[0,"&LeftUpDownVector;"],[0,"&LeftVectorBar;"],[0,"&RightVectorBar;"],[0,"&RightUpVectorBar;"],[0,"&RightDownVectorBar;"],[0,"&DownLeftVectorBar;"],[0,"&DownRightVectorBar;"],[0,"&LeftUpVectorBar;"],[0,"&LeftDownVectorBar;"],[0,"&LeftTeeVector;"],[0,"&RightTeeVector;"],[0,"&RightUpTeeVector;"],[0,"&RightDownTeeVector;"],[0,"&DownLeftTeeVector;"],[0,"&DownRightTeeVector;"],[0,"&LeftUpTeeVector;"],[0,"&LeftDownTeeVector;"],[0,"&lHar;"],[0,"&uHar;"],[0,"&rHar;"],[0,"&dHar;"],[0,"&luruhar;"],[0,"&ldrdhar;"],[0,"&ruluhar;"],[0,"&rdldhar;"],[0,"&lharul;"],[0,"&llhard;"],[0,"&rharul;"],[0,"&lrhard;"],[0,"&udhar;"],[0,"&duhar;"],[0,"&RoundImplies;"],[0,"&erarr;"],[0,"&simrarr;"],[0,"&larrsim;"],[0,"&rarrsim;"],[0,"&rarrap;"],[0,"&ltlarr;"],[1,"&gtrarr;"],[0,"&subrarr;"],[1,"&suplarr;"],[0,"&lfisht;"],[0,"&rfisht;"],[0,"&ufisht;"],[0,"&dfisht;"],[5,"&lopar;"],[0,"&ropar;"],[4,"&lbrke;"],[0,"&rbrke;"],[0,"&lbrkslu;"],[0,"&rbrksld;"],[0,"&lbrksld;"],[0,"&rbrkslu;"],[0,"&langd;"],[0,"&rangd;"],[0,"&lparlt;"],[0,"&rpargt;"],[0,"&gtlPar;"],[0,"&ltrPar;"],[3,"&vzigzag;"],[1,"&vangrt;"],[0,"&angrtvbd;"],[6,"&ange;"],[0,"&range;"],[0,"&dwangle;"],[0,"&uwangle;"],[0,"&angmsdaa;"],[0,"&angmsdab;"],[0,"&angmsdac;"],[0,"&angmsdad;"],[0,"&angmsdae;"],[0,"&angmsdaf;"],[0,"&angmsdag;"],[0,"&angmsdah;"],[0,"&bemptyv;"],[0,"&demptyv;"],[0,"&cemptyv;"],[0,"&raemptyv;"],[0,"&laemptyv;"],[0,"&ohbar;"],[0,"&omid;"],[0,"&opar;"],[1,"&operp;"],[1,"&olcross;"],[0,"&odsold;"],[1,"&olcir;"],[0,"&ofcir;"],[0,"&olt;"],[0,"&ogt;"],[0,"&cirscir;"],[0,"&cirE;"],[0,"&solb;"],[0,"&bsolb;"],[3,"&boxbox;"],[3,"&trisb;"],[0,"&rtriltri;"],[0,{v:"&LeftTriangleBar;",n:824,o:"&NotLeftTriangleBar;"}],[0,{v:"&RightTriangleBar;",n:824,o:"&NotRightTriangleBar;"}],[11,"&iinfin;"],[0,"&infintie;"],[0,"&nvinfin;"],[4,"&eparsl;"],[0,"&smeparsl;"],[0,"&eqvparsl;"],[5,"&blacklozenge;"],[8,"&RuleDelayed;"],[1,"&dsol;"],[9,"&bigodot;"],[0,"&bigoplus;"],[0,"&bigotimes;"],[1,"&biguplus;"],[1,"&bigsqcup;"],[5,"&iiiint;"],[0,"&fpartint;"],[2,"&cirfnint;"],[0,"&awint;"],[0,"&rppolint;"],[0,"&scpolint;"],[0,"&npolint;"],[0,"&pointint;"],[0,"&quatint;"],[0,"&intlarhk;"],[10,"&pluscir;"],[0,"&plusacir;"],[0,"&simplus;"],[0,"&plusdu;"],[0,"&plussim;"],[0,"&plustwo;"],[1,"&mcomma;"],[0,"&minusdu;"],[2,"&loplus;"],[0,"&roplus;"],[0,"&Cross;"],[0,"&timesd;"],[0,"&timesbar;"],[1,"&smashp;"],[0,"&lotimes;"],[0,"&rotimes;"],[0,"&otimesas;"],[0,"&Otimes;"],[0,"&odiv;"],[0,"&triplus;"],[0,"&triminus;"],[0,"&tritime;"],[0,"&intprod;"],[2,"&amalg;"],[0,"&capdot;"],[1,"&ncup;"],[0,"&ncap;"],[0,"&capand;"],[0,"&cupor;"],[0,"&cupcap;"],[0,"&capcup;"],[0,"&cupbrcap;"],[0,"&capbrcup;"],[0,"&cupcup;"],[0,"&capcap;"],[0,"&ccups;"],[0,"&ccaps;"],[2,"&ccupssm;"],[2,"&And;"],[0,"&Or;"],[0,"&andand;"],[0,"&oror;"],[0,"&orslope;"],[0,"&andslope;"],[1,"&andv;"],[0,"&orv;"],[0,"&andd;"],[0,"&ord;"],[1,"&wedbar;"],[6,"&sdote;"],[3,"&simdot;"],[2,{v:"&congdot;",n:824,o:"&ncongdot;"}],[0,"&easter;"],[0,"&apacir;"],[0,{v:"&apE;",n:824,o:"&napE;"}],[0,"&eplus;"],[0,"&pluse;"],[0,"&Esim;"],[0,"&Colone;"],[0,"&Equal;"],[1,"&ddotseq;"],[0,"&equivDD;"],[0,"&ltcir;"],[0,"&gtcir;"],[0,"&ltquest;"],[0,"&gtquest;"],[0,{v:"&leqslant;",n:824,o:"&nleqslant;"}],[0,{v:"&geqslant;",n:824,o:"&ngeqslant;"}],[0,"&lesdot;"],[0,"&gesdot;"],[0,"&lesdoto;"],[0,"&gesdoto;"],[0,"&lesdotor;"],[0,"&gesdotol;"],[0,"&lap;"],[0,"&gap;"],[0,"&lne;"],[0,"&gne;"],[0,"&lnap;"],[0,"&gnap;"],[0,"&lEg;"],[0,"&gEl;"],[0,"&lsime;"],[0,"&gsime;"],[0,"&lsimg;"],[0,"&gsiml;"],[0,"&lgE;"],[0,"&glE;"],[0,"&lesges;"],[0,"&gesles;"],[0,"&els;"],[0,"&egs;"],[0,"&elsdot;"],[0,"&egsdot;"],[0,"&el;"],[0,"&eg;"],[2,"&siml;"],[0,"&simg;"],[0,"&simlE;"],[0,"&simgE;"],[0,{v:"&LessLess;",n:824,o:"&NotNestedLessLess;"}],[0,{v:"&GreaterGreater;",n:824,o:"&NotNestedGreaterGreater;"}],[1,"&glj;"],[0,"&gla;"],[0,"&ltcc;"],[0,"&gtcc;"],[0,"&lescc;"],[0,"&gescc;"],[0,"&smt;"],[0,"&lat;"],[0,{v:"&smte;",n:65024,o:"&smtes;"}],[0,{v:"&late;",n:65024,o:"&lates;"}],[0,"&bumpE;"],[0,{v:"&PrecedesEqual;",n:824,o:"&NotPrecedesEqual;"}],[0,{v:"&sce;",n:824,o:"&NotSucceedsEqual;"}],[2,"&prE;"],[0,"&scE;"],[0,"&precneqq;"],[0,"&scnE;"],[0,"&prap;"],[0,"&scap;"],[0,"&precnapprox;"],[0,"&scnap;"],[0,"&Pr;"],[0,"&Sc;"],[0,"&subdot;"],[0,"&supdot;"],[0,"&subplus;"],[0,"&supplus;"],[0,"&submult;"],[0,"&supmult;"],[0,"&subedot;"],[0,"&supedot;"],[0,{v:"&subE;",n:824,o:"&nsubE;"}],[0,{v:"&supE;",n:824,o:"&nsupE;"}],[0,"&subsim;"],[0,"&supsim;"],[2,{v:"&subnE;",n:65024,o:"&varsubsetneqq;"}],[0,{v:"&supnE;",n:65024,o:"&varsupsetneqq;"}],[2,"&csub;"],[0,"&csup;"],[0,"&csube;"],[0,"&csupe;"],[0,"&subsup;"],[0,"&supsub;"],[0,"&subsub;"],[0,"&supsup;"],[0,"&suphsub;"],[0,"&supdsub;"],[0,"&forkv;"],[0,"&topfork;"],[0,"&mlcp;"],[8,"&Dashv;"],[1,"&Vdashl;"],[0,"&Barv;"],[0,"&vBar;"],[0,"&vBarv;"],[1,"&Vbar;"],[0,"&Not;"],[0,"&bNot;"],[0,"&rnmid;"],[0,"&cirmid;"],[0,"&midcir;"],[0,"&topcir;"],[0,"&nhpar;"],[0,"&parsim;"],[9,{v:"&parsl;",n:8421,o:"&nparsl;"}],[44343,{n:new Map(ln([[56476,"&Ascr;"],[1,"&Cscr;"],[0,"&Dscr;"],[2,"&Gscr;"],[2,"&Jscr;"],[0,"&Kscr;"],[2,"&Nscr;"],[0,"&Oscr;"],[0,"&Pscr;"],[0,"&Qscr;"],[1,"&Sscr;"],[0,"&Tscr;"],[0,"&Uscr;"],[0,"&Vscr;"],[0,"&Wscr;"],[0,"&Xscr;"],[0,"&Yscr;"],[0,"&Zscr;"],[0,"&ascr;"],[0,"&bscr;"],[0,"&cscr;"],[0,"&dscr;"],[1,"&fscr;"],[1,"&hscr;"],[0,"&iscr;"],[0,"&jscr;"],[0,"&kscr;"],[0,"&lscr;"],[0,"&mscr;"],[0,"&nscr;"],[1,"&pscr;"],[0,"&qscr;"],[0,"&rscr;"],[0,"&sscr;"],[0,"&tscr;"],[0,"&uscr;"],[0,"&vscr;"],[0,"&wscr;"],[0,"&xscr;"],[0,"&yscr;"],[0,"&zscr;"],[52,"&Afr;"],[0,"&Bfr;"],[1,"&Dfr;"],[0,"&Efr;"],[0,"&Ffr;"],[0,"&Gfr;"],[2,"&Jfr;"],[0,"&Kfr;"],[0,"&Lfr;"],[0,"&Mfr;"],[0,"&Nfr;"],[0,"&Ofr;"],[0,"&Pfr;"],[0,"&Qfr;"],[1,"&Sfr;"],[0,"&Tfr;"],[0,"&Ufr;"],[0,"&Vfr;"],[0,"&Wfr;"],[0,"&Xfr;"],[0,"&Yfr;"],[1,"&afr;"],[0,"&bfr;"],[0,"&cfr;"],[0,"&dfr;"],[0,"&efr;"],[0,"&ffr;"],[0,"&gfr;"],[0,"&hfr;"],[0,"&ifr;"],[0,"&jfr;"],[0,"&kfr;"],[0,"&lfr;"],[0,"&mfr;"],[0,"&nfr;"],[0,"&ofr;"],[0,"&pfr;"],[0,"&qfr;"],[0,"&rfr;"],[0,"&sfr;"],[0,"&tfr;"],[0,"&ufr;"],[0,"&vfr;"],[0,"&wfr;"],[0,"&xfr;"],[0,"&yfr;"],[0,"&zfr;"],[0,"&Aopf;"],[0,"&Bopf;"],[1,"&Dopf;"],[0,"&Eopf;"],[0,"&Fopf;"],[0,"&Gopf;"],[1,"&Iopf;"],[0,"&Jopf;"],[0,"&Kopf;"],[0,"&Lopf;"],[0,"&Mopf;"],[1,"&Oopf;"],[3,"&Sopf;"],[0,"&Topf;"],[0,"&Uopf;"],[0,"&Vopf;"],[0,"&Wopf;"],[0,"&Xopf;"],[0,"&Yopf;"],[1,"&aopf;"],[0,"&bopf;"],[0,"&copf;"],[0,"&dopf;"],[0,"&eopf;"],[0,"&fopf;"],[0,"&gopf;"],[0,"&hopf;"],[0,"&iopf;"],[0,"&jopf;"],[0,"&kopf;"],[0,"&lopf;"],[0,"&mopf;"],[0,"&nopf;"],[0,"&oopf;"],[0,"&popf;"],[0,"&qopf;"],[0,"&ropf;"],[0,"&sopf;"],[0,"&topf;"],[0,"&uopf;"],[0,"&vopf;"],[0,"&wopf;"],[0,"&xopf;"],[0,"&yopf;"],[0,"&zopf;"]]))}],[8906,"&fflig;"],[0,"&filig;"],[0,"&fllig;"],[0,"&ffilig;"],[0,"&ffllig;"]]));const cn=new Map([[34,"&quot;"],[38,"&amp;"],[39,"&apos;"],[60,"&lt;"],[62,"&gt;"]]);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,"&quot;"],[38,"&amp;"],[160,"&nbsp;"]])),fn(/[&<>\u00A0]/g,new Map([[38,"&amp;"],[60,"&lt;"],[62,"&gt;"],[160,"&nbsp;"]])),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={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"};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,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")},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,"&quot;")}(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(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&").replace(/&quot;/g,'"').replace(/&#39;/g,"'"),t.decodeNbsp&&(r=r.replace(/&nbsp;/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 */
    33(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. */
    44(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  
    77
    88## [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
    926
    1027## [2.11.7] - 2026-08-13
  • markdown-renderer-for-github/trunk/includes/admin/class-gfmr-manual-renderer.php

    r3644434 r3657956  
    915915                                'value' => $this->enabled_disabled_label( ! empty( $masked_settings['meta_description_enabled'] ) ),
    916916                                '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',
    917922                        ),
    918923                        'supported_languages'      => array(
  • markdown-renderer-for-github/trunk/includes/admin/class-gfmr-settings-registry.php

    r3644434 r3657956  
    461461
    462462                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(
    463471                        'multilingual_switcher_header',
    464472                        __( 'Show Switcher in Header', 'markdown-renderer-for-github' ),
  • markdown-renderer-for-github/trunk/includes/admin/class-gfmr-settings-renderer.php

    r3644434 r3657956  
    11931193                </label>
    11941194                <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>
    11951213                <?php
    11961214        }
  • markdown-renderer-for-github/trunk/includes/admin/class-gfmr-settings-sanitizer.php

    r3644434 r3657956  
    224224                // Sanitize per-language meta description toggle (Issue #426).
    225225                $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'] );
    226229
    227230                // Sanitize supported languages: input → old settings → WordPress locale.
  • markdown-renderer-for-github/trunk/includes/admin/class-gfmr-settings-schema.php

    r3644434 r3657956  
    212212                        ),
    213213                        '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.' ),
    214215                        // --- PlantUML ---
    215216                        'plantuml_enabled'                     => self::bool( 'plantuml', 'Enable PlantUML', 'Render PlantUML diagrams (requires an external render server).' ),
    … …  
    523524                        'gfmr_invalid_settings',
    524525                        implode( ' ', $errors ),
    525                         array( 'errors' => $errors )
     526                        array(
     527                                'errors' => $errors,
     528                                'status' => 400,
     529                        )
    526530                );
    527531        }
  • markdown-renderer-for-github/trunk/includes/admin/class-gfmr-settings.php

    r3644434 r3657956  
    496496                        // surprising existing sites with a new editor panel on upgrade.
    497497                        '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,
    498502                        // PlantUML settings.
    499503                        'plantuml_enabled'                     => true,
    … …  
    913917
    914918        /**
     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        /**
    915929         * Check if SSR is enabled
    916930         *
    … …  
    938952        public function is_mermaid_ssr_enabled() {
    939953                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 );
    940990        }
    941991
  • markdown-renderer-for-github/trunk/includes/asset/class-gfmr-asset-manager.php

    r3644434 r3657956  
    157157                );
    158158
    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(
    161191                        'gfmr-copy-button-js',
    162192                        GFMR_Asset_Paths::url( 'assets/js/gfmr-copy-button.js' ),
    … …  
    165195                        $defer_in_footer
    166196                );
    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(
    170207                        'gfmr-math',
    171208                        GFMR_Asset_Paths::url( 'assets/js/gfmr-math.js' ),
    … …  
    174211                        $defer_in_footer
    175212                );
    176 
    177                 $libs = $this->detect_current_post_libraries();
     213                if ( $needs_katex ) {
     214                        wp_enqueue_script( 'gfmr-math' );
     215                }
    178216
    179217                // Mermaid renderer module - conditional loading.
    … …  
    181219                // baked into inline SVG (Issue #614): the baked output renders without the
    182220                // 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();
    184222                $has_chart                 = in_array( 'chartjs', $libs, true );
    185223                $chart_interactive_enabled = (bool) GFMR_Settings::get_instance()->get(
    … …  
    200238                // TOC/Chart/PlantUML content are not charged the extra request.
    201239                // $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).
    203242                $needs_toc        = $this->should_load_toc();
    204                 $needs_plantuml   = in_array( 'plantuml', $libs, true ) && $this->is_plantuml_enabled();
    205243                $needs_gfmr_utils = $has_chart || $needs_toc || $needs_plantuml;
    206244                if ( $needs_gfmr_utils ) {
    … …  
    245283                        true
    246284                );
    247                 $needs_mermaid_toolbar       = $this->may_have_mermaid_content() && $mermaid_interactive_enabled;
     285                $needs_mermaid_toolbar       = $has_mermaid && $mermaid_interactive_enabled;
    248286                $needs_chart_storage         = $has_chart && $chart_interactive_enabled && $chart_persist_state;
    249287                if ( $needs_mermaid_toolbar || $needs_chart_storage ) {
    … …  
    260298                // and gfmr-lang-fallbacks must execute first so collectPageLanguages()
    261299                // 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                }
    263312                if ( $needs_mermaid_renderer ) {
    264313                        $main_deps[] = 'gfmr-mermaid-renderer';
    … …  
    279328
    280329                // Mermaid Lightbox module - conditional loading
    281                 if ( $this->may_have_mermaid_content() ) {
     330                if ( $has_mermaid ) {
    282331                        wp_enqueue_script(
    283332                                'gfmr-mermaid-lightbox',
    … …  
    364413                }
    365414
    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 );
    368426
    369427                // Architecture explanation:
    … …  
    752810                                'ajaxUrl'            => function_exists( 'admin_url' ) ? admin_url( 'admin-ajax.php' ) : '',
    753811                                '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' ) : '',
    755817                                // Supported languages for syntax highlighting
    756818                                'supportedLanguages' => $supported_languages,
    … …  
    13621424         * @since 2.6.0
    13631425         *
    1364          * @param string $plugin_url Plugin URL
     1426         * @param string $plugin_url   Plugin URL
    13651427         * @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.
    13661434         * @return void
    13671435         */
    1368         private function enqueue_worker_manager( $plugin_url, $cache_buster ) {
     1436        private function enqueue_worker_manager( $plugin_url, $cache_buster, $enqueue = true ) {
    13691437                // Check if Workers should be enabled
    13701438                $worker_enabled = $this->should_enable_workers();
    … …  
    13741442                }
    13751443
    1376                 // Enqueue Worker Manager script.
     1444                // Register the Worker Manager script.
    13771445                // Shares the unified defer strategy (#641); gfmr-lang-aliases and
    13781446                // gfmr-lang-fallbacks are explicit dependencies so the manager can read
    13791447                // window.GFMR_LANG_ALIASES / window.GFMR_LANG_FALLBACKS and inject both
    13801448                // maps into the Worker init config (#33).
    1381                 wp_enqueue_script(
     1449                wp_register_script(
    13821450                        'gfmr-worker-manager',
    13831451                        GFMR_Asset_Paths::url( 'assets/js/gfmr-worker-manager.js' ),
    … …  
    13861454                        self::DEFER_STRATEGY
    13871455                );
     1456
     1457                if ( $enqueue ) {
     1458                        wp_enqueue_script( 'gfmr-worker-manager' );
     1459                }
    13881460
    13891461                // Get settings for theme
  • markdown-renderer-for-github/trunk/includes/asset/class-gfmr-speculation-rules.php

    r3557711 r3657956  
    1010 * navigation the visitor may never make.
    1111 *
    12  * This integration keeps the cheap `prefetch` behaviour untouched but excludes
    13  * pages that require Mermaid or (privacy-acknowledged) PlantUML from the
     12 * This integration keeps the cheap `prefetch` behaviour untouched. It *can*
     13 * exclude pages that require Mermaid or (privacy-acknowledged) PlantUML from the
    1414 * 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).
    2034 *
    2135 * @package WpGfmRenderer
    … …  
    4458         */
    4559        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';
    4671
    4772        /**
    … …  
    5782                add_action( 'trashed_post', array( $this, 'remove_post' ) );
    5883                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 );
    59127        }
    60128
    … …  
    62130         * Decide whether this integration should alter the given speculation mode.
    63131         *
    64          * Only `prerender` is restricted; `prefetch` (network-only, cheap) is left
    65          * intact. Site owners can disable the behaviour entirely via the
    66          * `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`.
    67135         *
    68136         * @param string $mode Speculation mode ('prefetch' or 'prerender').
    … …  
    77145                 * Filter the master switch for excluding heavy diagram pages from prerender.
    78146                 *
     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                 *
    79152                 * @since 2.8.0
    80153                 *
    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.
    82155                 */
    83                 return (bool) apply_filters( 'gfmr_exclude_heavy_pages_from_prerender', true );
     156                return (bool) apply_filters( 'gfmr_exclude_heavy_pages_from_prerender', false );
    84157        }
    85158
    … …  
    110183         */
    111184        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
    112191                if ( wp_is_post_autosave( $post_id ) || wp_is_post_revision( $post_id ) ) {
    113192                        return;
    … …  
    145224         */
    146225        public function remove_post( $post_id ) {
     226                if ( ! $this->should_apply( 'prerender' ) ) {
     227                        return;
     228                }
     229
    147230                $post_id = (int) $post_id;
    148231                $map     = (array) get_option( self::EXCLUDED_PATHS_OPTION, array() );
  • markdown-renderer-for-github/trunk/includes/cache/class-gfmr-cache-manager.php

    r3633809 r3657956  
    115115         */
    116116        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;
    117145
    118146        /**
    … …  
    9881016
    9891017        /**
    990          * Read cache index option.
     1018         * Read cache index, priming the in-memory buffer from wp_options on first
     1019         * access (Issue #1337).
    9911020         *
    9921021         * @return array Cache index.
    9931022         */
    9941023        private function get_cache_index() {
     1024                if ( null !== $this->cache_index_buffer ) {
     1025                        return $this->cache_index_buffer;
     1026                }
     1027
    9951028                if ( ! function_exists( 'get_option' ) ) {
    9961029                        return array();
    9971030                }
    9981031
    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).
    10051041         *
    10061042         * @param array $index Cache index.
    … …  
    10081044         */
    10091045        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
    10101084                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;
    10131090        }
    10141091
  • markdown-renderer-for-github/trunk/includes/diagram/class-gfmr-chart-image-handler.php

    r3559415 r3657956  
    192192                if ( ! is_user_logged_in() && ! $this->check_ajax_rate_limit() ) {
    193193                        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 );
    194204                }
    195205
  • markdown-renderer-for-github/trunk/includes/rendering/class-gfmr-renderer.php

    r3644434 r3657956  
    133133                $this->schema_generator->set_content_analyzer( $this->content_analyzer );
    134134
    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).
    136136                $this->speculation_rules = new GFMR_Speculation_Rules();
    137137
    … …  
    197197                // Unified asset-detection cache invalidation (Issue #642)
    198198                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)
    200201                $this->speculation_rules->register();
    201202                // 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  
    137137         * Whether Chart image baking is enabled.
    138138         *
    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.
    141143         *
    142144         * @return bool True when chart image baking should run.
    … …  
    147149                }
    148150
    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();
    157152        }
    158153
  • markdown-renderer-for-github/trunk/includes/schema/class-gfmr-schema-generator.php

    r3595086 r3657956  
    3939         * Schema version for cache invalidation
    4040         *
     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         *
    4145         * @var string
    4246         */
    43         const SCHEMA_VERSION = '1.0';
     47        const SCHEMA_VERSION = '2.0';
    4448
    4549        /**
    … …  
    121125                }
    122126
     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
    123143                $this->output_json_ld( $schema );
    124144
    … …  
    184204
    185205                $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(),
    188209                );
    189210
    … …  
    204225                        $schema['datePublished']    = get_the_date( 'c', $post );
    205226                        $schema['dateModified']     = get_the_modified_date( 'c', $post );
    206                         $schema['mainEntityOfPage'] = get_permalink( $post );
     227                        $schema['mainEntityOfPage'] = $this->get_main_entity_url( $post );
    207228                }
    208229
    … …  
    226247                }
    227248
     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
    228313                /**
    229                  * Filter the generated schema
     314                 * Filter to enable/disable multilingual URL rewriter
    230315                 *
    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.
    233319                 */
    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 );
    235379        }
    236380
  • markdown-renderer-for-github/trunk/includes/seo/class-gfmr-meta-description.php

    r3568791 r3657956  
    246246                }
    247247
     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 {
    248262                $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();
    251265                }
    252266
    253267                $lang        = $this->get_current_language();
    254                 $description = $this->resolve_description( $descriptions, $lang );
     268                $description = empty( $descriptions ) ? '' : $this->resolve_description( $descriptions, $lang );
    255269
    256270                /**
    … …  
    263277                 * @param string   $lang        Current language code.
    264278                 */
    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 );
    268280        }
    269281
    … …  
    315327                printf( '<meta name="description" content="%s" />' . "\n", esc_attr( $description ) );
    316328
     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
    317334                /**
    318335                 * Filter whether to output the Open Graph og:description tag.
    … …  
    322339                 * @param bool $output Whether to output og:description.
    323340                 */
    324                 if ( apply_filters( 'gfmr_meta_description_output_og', true ) ) {
     341                if ( apply_filters( 'gfmr_meta_description_output_og', ! $social_owns_description ) ) {
    325342                        printf( '<meta property="og:description" content="%s" />' . "\n", esc_attr( $description ) );
    326343                }
    … …  
    333350                 * @param bool $output Whether to output twitter:description.
    334351                 */
    335                 if ( apply_filters( 'gfmr_meta_description_output_twitter', true ) ) {
     352                if ( apply_filters( 'gfmr_meta_description_output_twitter', ! $social_owns_description ) ) {
    336353                        printf( '<meta name="twitter:description" content="%s" />' . "\n", esc_attr( $description ) );
    337354                }
     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();
    338367        }
    339368
  • markdown-renderer-for-github/trunk/includes/shared/class-gfmr-core-bootstrap.php

    r3644434 r3657956  
    9898                );
    9999
     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
    100112                // Per-language featured images (Issue #428): registers post meta on
    101113                // 'init' and, when enabled, the editor panel + post_thumbnail_id
  • markdown-renderer-for-github/trunk/includes/shared/class-gfmr-settings-writer.php

    r3630969 r3657956  
    6767                        return new \WP_Error(
    6868                                '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 )
    7071                        );
    7172                }
  • markdown-renderer-for-github/trunk/includes/uninstall/class-gfmr-uninstaller.php

    r3644434 r3657956  
    7373                        'gfmr_ssr_onboarding_dismissed',
    7474                        'gfmr_prerender_excluded_paths',
     75                        'gfmr_prerender_map_cleaned',
    7576                        'gfmr_license_data',
    7677                        'gfmr_license_last_validated',
  • markdown-renderer-for-github/trunk/languages/markdown-renderer-for-github-ja.po

    r3644434 r3657956  
    21252125#: plugins/pro/markdown-renderer-for-github-pro/includes/core/asset/class-gfmr-compression-health.php:88
    21262126msgid "Diagram libraries served compressed"
    2127 msgstr ""
     2127msgstr "図表ライブラリの圧縮配信"
    21282128
    21292129#: includes/asset/class-gfmr-compression-health.php:167
    21302130#: plugins/pro/markdown-renderer-for-github-pro/includes/core/asset/class-gfmr-compression-health.php:167
    21312131msgid "Performance"
    2132 msgstr ""
     2132msgstr "パフォーマンス"
    21332133
    21342134#: includes/asset/class-gfmr-compression-health.php:185
    21352135#: plugins/pro/markdown-renderer-for-github-pro/includes/core/asset/class-gfmr-compression-health.php:185
    21362136msgid "Diagram libraries are served compressed"
    2137 msgstr ""
     2137msgstr "図表ライブラリは圧縮して配信されています"
    21382138
    21392139#: includes/asset/class-gfmr-compression-health.php:188
    … …  
    21422142"Shiki and Mermaid bundles are delivered with gzip or Brotli compression, so "
    21432143"visitors download only a fraction of their raw size."
    2144 msgstr ""
     2144msgstr "Shiki と Mermaid のバンドルは gzip または Brotli 圧縮で配信されているため、訪問者は元のサイズのごく一部だけをダウンロードします。"
    21452145
    21462146#: includes/asset/class-gfmr-compression-health.php:197
    21472147#: plugins/pro/markdown-renderer-for-github-pro/includes/core/asset/class-gfmr-compression-health.php:197
    21482148msgid "Compression of diagram libraries could not be verified"
    2149 msgstr ""
     2149msgstr "図表ライブラリの圧縮を確認できませんでした"
    21502150
    21512151#: includes/asset/class-gfmr-compression-health.php:200
    … …  
    21562156"private network this is expected; otherwise, confirm your web server "
    21572157"compresses static JavaScript."
    2158 msgstr ""
     2158msgstr "プラグインは、サイズの大きい図表ライブラリが gzip または Brotli 圧縮で配信されているかを確認できませんでした。サイトがプライベートネットワーク経由でのみ到達可能な場合はこれが正常です。それ以外の場合は、Web サーバーが静的な JavaScript を圧縮しているか確認してください。"
    21592159
    21602160#. translators: %s: comma-separated library names.
    … …  
    21632163#, php-format
    21642164msgid "Unverified: %s"
    2165 msgstr ""
     2165msgstr "未確認: %s"
    21662166
    21672167#. translators: 1: library name, 2: raw size, 3: gzip size.
    … …  
    21702170#, php-format
    21712171msgid "%1$s — %2$s uncompressed vs ~%3$s gzipped"
    2172 msgstr ""
     2172msgstr "%1$s — 非圧縮 %2$s に対し gzip 圧縮時は約 %3$s"
    21732173
    21742174#: includes/asset/class-gfmr-compression-health.php:232
    21752175#: plugins/pro/markdown-renderer-for-github-pro/includes/core/asset/class-gfmr-compression-health.php:232
    21762176msgid "Diagram libraries are served uncompressed"
    2177 msgstr ""
     2177msgstr "図表ライブラリが非圧縮で配信されています"
    21782178
    21792179#: includes/asset/class-gfmr-compression-health.php:235
    … …  
    21822182"Your web server is sending these large libraries without gzip or Brotli "
    21832183"compression, forcing visitors to download the full raw payload:"
    2184 msgstr ""
     2184msgstr "Web サーバーがこれらの大きなライブラリを gzip や Brotli 圧縮なしで送信しているため、訪問者は非圧縮の全データをダウンロードすることになります。"
    21852185
    21862186#: includes/asset/class-gfmr-compression-health.php:248
    … …  
    21902190"example mod_deflate or mod_brotli on Apache, or the gzip / brotli directives "
    21912191"on nginx. Most managed hosts and CDNs enable this by default."
    2192 msgstr ""
     2192msgstr "Web サーバー側で静的な JavaScript の圧縮を有効にしてください — 例えば Apache の mod_deflate や mod_brotli、nginx の gzip / brotli ディレクティブなどです。多くのマネージドホスティングや CDN ではこれが既定で有効になっています。"
    21932193
    21942194#: includes/diagram/class-gfmr-mermaid-ssr-handler.php:138
    … …  
    22422242#: plugins/pro/markdown-renderer-for-github-pro/includes/core/licensing/class-gfmr-license-manager.php:238
    22432243msgid "License removed locally but server deactivation may have failed."
    2244 msgstr ""
     2244msgstr "ライセンスをローカルから削除しましたが、サーバー側の無効化に失敗した可能性があります。"
    22452245
    22462246#: includes/licensing/class-gfmr-license-manager.php:254
    … …  
    23112311#: plugins/pro/markdown-renderer-for-github-pro/includes/core/shared/trait-gfmr-premium-feature-gate.php:209
    23122312msgid "Licensed Pro Version"
    2313 msgstr ""
     2313msgstr "ライセンス認証済み Pro 版"
    23142314
    23152315#: includes/shared/trait-gfmr-premium-feature-gate.php:210
    23162316#: plugins/pro/markdown-renderer-for-github-pro/includes/core/shared/trait-gfmr-premium-feature-gate.php:210
    23172317msgid "Pro"
    2318 msgstr ""
     2318msgstr "Pro"
    23192319
    23202320#. translators: %s: feature name
    … …  
    23232323#, php-format
    23242324msgid "%s is a Pro feature. Upgrade to unlock."
    2325 msgstr ""
     2325msgstr "%s は Pro 機能です。アップグレードすると利用できます。"
    23262326
    23272327#: includes/shared/trait-gfmr-premium-feature-gate.php:238
    … …  
    40934093msgid "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."
    40944094msgstr "インタラクティブ図表の設定タブで Mermaid テーマを選択できます。既定の「コードテーマに追従」は、解決済みのコードテーマと閲覧者の OS 配色設定に追従します。図ごとの init ディレクティブまたは YAML frontmatter のテーマが優先されます。"
     4095
     4096#: includes/admin/class-gfmr-settings-registry.php
     4097msgid "Open Graph / Twitter Cards"
     4098msgstr "OGP / Twitter カード"
     4099
     4100#: includes/admin/class-gfmr-settings-renderer.php
     4101msgid "Output Open Graph and Twitter card meta tags"
     4102msgstr "OGP と Twitter カードの meta タグを出力する"
     4103
     4104#: includes/admin/class-gfmr-settings-renderer.php
     4105msgid "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."
     4106msgstr "個別の投稿・固定ページに 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
     4109msgid "Open Graph / Twitter cards"
     4110msgstr "OGP / Twitter カード"
  • markdown-renderer-for-github/trunk/markdown-renderer-for-github.php

    r3644434 r3657956  
    33 * Plugin Name:       Markdown Renderer for GitHub
    44 * 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.7
     5 * Version:           2.11.8
    66 * Requires at least: 6.8
    77 * Requires PHP:      8.2
    8  * Tested up to:      7.0
     8 * Tested up to:      7.1
    99 * Author:            Wakalab
    1010 * Author URI:        https://wakalab.dev/
    … …  
    4747
    4848// Define new prefixed constants (WordPress.org requirement compliance)
    49 define( 'GFMR_VERSION', '2.11.7' );
     49define( 'GFMR_VERSION', '2.11.8' );
    5050define( 'GFMR_PLUGIN_FILE', __FILE__ );
    5151define( 'GFMR_SLUG', 'markdown-renderer-for-github' );
  • markdown-renderer-for-github/trunk/readme.txt

    r3644434 r3657956  
    33Tags: markdown, github, syntax-highlighting, mermaid, documentation
    44Requires at least: 6.8
    5 Tested up to: 7.0
     5Tested up to: 7.1
    66Requires PHP: 8.2
    7 Stable tag: 2.11.7
     7Stable tag: 2.11.8
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
    … …  
    111111
    112112== 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
    113127
    114128= 2.11.7 =
    … …  
    297311* clean up release lock via EXIT trap on early abort
    298312
    299 = 2.8.1 =
    300 * improve inline code contrast and stabilize tests
    301 * align diagram rendering layouts
    302 * repair mermaid state diagram styles
    303 * preserve mermaid flowchart polygon transforms
    304 * preserve mermaid flowchart path transforms
    305 * keep wide mermaid diagrams readable
    306 * fit wide mermaid diagrams to container
    307 * center chart preview images
    308 * update mermaid server privacy gate live
    309 
    310313== Upgrade Notice ==
    311314
  • markdown-renderer-for-github/trunk/vendor/autoload.php

    r3571618 r3657956  
    2020require_once __DIR__ . '/composer/autoload_real.php';
    2121
    22 return ComposerAutoloaderInitd00bbcd83f06b49c37f44e83b08dc608::getLoader();
     22return ComposerAutoloaderInit5768a5eddd0dc982c832fec9f3671a54::getLoader();
  • markdown-renderer-for-github/trunk/vendor/composer/autoload_classmap.php

    r3644434 r3657956  
    197197    'League\\CommonMark\\Extension\\Mention\\MentionExtension' => $vendorDir . '/league/commonmark/src/Extension/Mention/MentionExtension.php',
    198198    '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',
    199201    'League\\CommonMark\\Extension\\SmartPunct\\DashParser' => $vendorDir . '/league/commonmark/src/Extension/SmartPunct/DashParser.php',
    200202    'League\\CommonMark\\Extension\\SmartPunct\\EllipsesParser' => $vendorDir . '/league/commonmark/src/Extension/SmartPunct/EllipsesParser.php',
    … …  
    210212    'League\\CommonMark\\Extension\\TableOfContents\\Node\\TableOfContents' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/Node/TableOfContents.php',
    211213    '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',
    212215    'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\AsIsNormalizerStrategy' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/Normalizer/AsIsNormalizerStrategy.php',
    213216    'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\FlatNormalizerStrategy' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/Normalizer/FlatNormalizerStrategy.php',
    … …  
    220223    'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsPlaceholderParser' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsPlaceholderParser.php',
    221224    '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',
    222227    'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsRenderer' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsRenderer.php',
    223228    'League\\CommonMark\\Extension\\Table\\Table' => $vendorDir . '/league/commonmark/src/Extension/Table/Table.php',
    … …  
    373378    'Nette\\Utils\\Callback' => $vendorDir . '/nette/utils/src/Utils/Callback.php',
    374379    'Nette\\Utils\\DateTime' => $vendorDir . '/nette/utils/src/Utils/DateTime.php',
     380    'Nette\\Utils\\DateTimeImmutable' => $vendorDir . '/nette/utils/src/Utils/DateTimeImmutable.php',
    375381    'Nette\\Utils\\FileInfo' => $vendorDir . '/nette/utils/src/Utils/FileInfo.php',
    376382    'Nette\\Utils\\FileSystem' => $vendorDir . '/nette/utils/src/Utils/FileSystem.php',
    … …  
    481487    'Wakalab\\WpGfmRenderer\\GFMR_Settings_Schema' => $baseDir . '/includes/admin/class-gfmr-settings-schema.php',
    482488    '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',
    483490    'Wakalab\\WpGfmRenderer\\GFMR_Speculation_Rules' => $baseDir . '/includes/asset/class-gfmr-speculation-rules.php',
    484491    '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  
    33// autoload_real.php @generated by Composer
    44
    5 class ComposerAutoloaderInitd00bbcd83f06b49c37f44e83b08dc608
     5class ComposerAutoloaderInit5768a5eddd0dc982c832fec9f3671a54
    66{
    77    private static $loader;
    … …  
    2525        require __DIR__ . '/platform_check.php';
    2626
    27         spl_autoload_register(array('ComposerAutoloaderInitd00bbcd83f06b49c37f44e83b08dc608', 'loadClassLoader'), true, true);
     27        spl_autoload_register(array('ComposerAutoloaderInit5768a5eddd0dc982c832fec9f3671a54', 'loadClassLoader'), true, true);
    2828        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
    29         spl_autoload_unregister(array('ComposerAutoloaderInitd00bbcd83f06b49c37f44e83b08dc608', 'loadClassLoader'));
     29        spl_autoload_unregister(array('ComposerAutoloaderInit5768a5eddd0dc982c832fec9f3671a54', 'loadClassLoader'));
    3030
    3131        require __DIR__ . '/autoload_static.php';
    32         call_user_func(\Composer\Autoload\ComposerStaticInitd00bbcd83f06b49c37f44e83b08dc608::getInitializer($loader));
     32        call_user_func(\Composer\Autoload\ComposerStaticInit5768a5eddd0dc982c832fec9f3671a54::getInitializer($loader));
    3333
    3434        $loader->register(true);
    3535
    36         $filesToLoad = \Composer\Autoload\ComposerStaticInitd00bbcd83f06b49c37f44e83b08dc608::$files;
     36        $filesToLoad = \Composer\Autoload\ComposerStaticInit5768a5eddd0dc982c832fec9f3671a54::$files;
    3737        $requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
    3838            if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
  • markdown-renderer-for-github/trunk/vendor/composer/autoload_static.php

    r3644434 r3657956  
    55namespace Composer\Autoload;
    66
    7 class ComposerStaticInitd00bbcd83f06b49c37f44e83b08dc608
     7class ComposerStaticInit5768a5eddd0dc982c832fec9f3671a54
    88{
    99    public static $files = array (
    … …  
    270270        'League\\CommonMark\\Extension\\Mention\\MentionExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Mention/MentionExtension.php',
    271271        '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',
    272274        'League\\CommonMark\\Extension\\SmartPunct\\DashParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/SmartPunct/DashParser.php',
    273275        'League\\CommonMark\\Extension\\SmartPunct\\EllipsesParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/SmartPunct/EllipsesParser.php',
    … …  
    283285        'League\\CommonMark\\Extension\\TableOfContents\\Node\\TableOfContents' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/Node/TableOfContents.php',
    284286        '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',
    285288        'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\AsIsNormalizerStrategy' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/Normalizer/AsIsNormalizerStrategy.php',
    286289        'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\FlatNormalizerStrategy' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/Normalizer/FlatNormalizerStrategy.php',
    … …  
    293296        'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsPlaceholderParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsPlaceholderParser.php',
    294297        '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',
    295300        'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsRenderer.php',
    296301        'League\\CommonMark\\Extension\\Table\\Table' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Table/Table.php',
    … …  
    446451        'Nette\\Utils\\Callback' => __DIR__ . '/..' . '/nette/utils/src/Utils/Callback.php',
    447452        'Nette\\Utils\\DateTime' => __DIR__ . '/..' . '/nette/utils/src/Utils/DateTime.php',
     453        'Nette\\Utils\\DateTimeImmutable' => __DIR__ . '/..' . '/nette/utils/src/Utils/DateTimeImmutable.php',
    448454        'Nette\\Utils\\FileInfo' => __DIR__ . '/..' . '/nette/utils/src/Utils/FileInfo.php',
    449455        'Nette\\Utils\\FileSystem' => __DIR__ . '/..' . '/nette/utils/src/Utils/FileSystem.php',
    … …  
    554560        'Wakalab\\WpGfmRenderer\\GFMR_Settings_Schema' => __DIR__ . '/../..' . '/includes/admin/class-gfmr-settings-schema.php',
    555561        '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',
    556563        'Wakalab\\WpGfmRenderer\\GFMR_Speculation_Rules' => __DIR__ . '/../..' . '/includes/asset/class-gfmr-speculation-rules.php',
    557564        'Wakalab\\WpGfmRenderer\\GFMR_URL_Rewriter' => __DIR__ . '/../..' . '/includes/multilingual/class-gfmr-url-rewriter.php',
    … …  
    563570    {
    564571        return \Closure::bind(function () use ($loader) {
    565             $loader->prefixLengthsPsr4 = ComposerStaticInitd00bbcd83f06b49c37f44e83b08dc608::$prefixLengthsPsr4;
    566             $loader->prefixDirsPsr4 = ComposerStaticInitd00bbcd83f06b49c37f44e83b08dc608::$prefixDirsPsr4;
    567             $loader->prefixesPsr0 = ComposerStaticInitd00bbcd83f06b49c37f44e83b08dc608::$prefixesPsr0;
    568             $loader->classMap = ComposerStaticInitd00bbcd83f06b49c37f44e83b08dc608::$classMap;
     572            $loader->prefixLengthsPsr4 = ComposerStaticInit5768a5eddd0dc982c832fec9f3671a54::$prefixLengthsPsr4;
     573            $loader->prefixDirsPsr4 = ComposerStaticInit5768a5eddd0dc982c832fec9f3671a54::$prefixDirsPsr4;
     574            $loader->prefixesPsr0 = ComposerStaticInit5768a5eddd0dc982c832fec9f3671a54::$prefixesPsr0;
     575            $loader->classMap = ComposerStaticInit5768a5eddd0dc982c832fec9f3671a54::$classMap;
    569576
    570577        }, null, ClassLoader::class);
  • markdown-renderer-for-github/trunk/vendor/composer/installed.json

    r3571618 r3657956  
    8181        {
    8282            "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",
    8585            "source": {
    8686                "type": "git",
    8787                "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",
    9494                "shasum": ""
    9595            },
    … …  
    113113                "michelf/php-markdown": "^1.4 || ^2.0",
    114114                "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",
    117117                "scrutinizer/ocular": "^1.8.1",
    118118                "symfony/finder": "^5.3 | ^6.0 | ^7.0 || ^8.0",
    … …  
    125125                "symfony/yaml": "v2.3+ required if using the Front Matter extension"
    126126            },
    127             "time": "2026-03-19T13:16:38+00:00",
     127            "time": "2026-08-11T16:06:25+00:00",
    128128            "type": "library",
    129129            "extra": {
    130130                "branch-alias": {
    131                     "dev-main": "2.9-dev"
     131                    "dev-main": "2.11-dev"
    132132                }
    133133            },
    … …  
    346346        {
    347347            "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",
    350350            "source": {
    351351                "type": "git",
    352352                "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",
    359359                "shasum": ""
    360360            },
    … …  
    376376            "suggest": {
    377377                "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()",
    379379                "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()",
    380380                "ext-json": "to use Nette\\Utils\\Json",
    … …  
    382382                "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()"
    383383            },
    384             "time": "2026-05-11T20:49:54+00:00",
     384            "time": "2026-07-17T23:02:45+00:00",
    385385            "type": "library",
    386386            "extra": {
    … …  
    434434            "support": {
    435435                "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"
    437437            },
    438438            "install-path": "../nette/utils"
    … …  
    574574        {
    575575            "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",
    578578            "source": {
    579579                "type": "git",
    580580                "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",
    587587                "shasum": ""
    588588            },
    … …  
    590590                "php": ">=8.1"
    591591            },
    592             "time": "2026-04-13T15:52:40+00:00",
     592            "time": "2026-06-05T06:23:12+00:00",
    593593            "type": "library",
    594594            "extra": {
    … …  
    624624            "homepage": "https://symfony.com",
    625625            "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"
    627627            },
    628628            "funding": [
  • markdown-renderer-for-github/trunk/vendor/composer/installed.php

    r3644434 r3657956  
    22    'root' => array(
    33        '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',
    66        'reference' => null,
    77        'type' => 'library',
    … …  
    2121        ),
    2222        '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',
    2626            'type' => 'library',
    2727            'install_path' => __DIR__ . '/../league/commonmark',
    … …  
    3939        ),
    4040        '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',
    4343            'reference' => null,
    4444            'type' => 'library',
    … …  
    5757        ),
    5858        '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',
    6262            'type' => 'library',
    6363            'install_path' => __DIR__ . '/../nette/utils',
    … …  
    8484        ),
    8585        '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',
    8989            'type' => 'library',
    9090            'install_path' => __DIR__ . '/../symfony/deprecation-contracts',
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Delimiter/DelimiterStack.php

    r3571618 r3657956  
    5151            $this->missingIndexCache = new \WeakMap(); // @phpstan-ignore-line
    5252        } else {
    53             $this->missingIndexCache = new \SplObjectStorage(); // @phpstan-ignore-line
     53            $this->missingIndexCache = new \SplObjectStorage();
    5454        }
    5555    }
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Environment/Environment.php

    r3571618 r3657956  
    401401            $this->injectEnvironmentAndConfigurationIfNeeded($normalizer);
    402402
    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) {
    408410                if ($this->config->get('slug_normalizer/unique') === UniqueSlugNormalizerInterface::PER_DOCUMENT) {
    409411                    $this->addEventListener(DocumentParsedEvent::class, [$normalizer, 'clearHistory'], -1000);
    … …  
    439441                'soft_break' => Expect::string("\n"),
    440442            ]),
     443            'xml' => Expect::structure([
     444                'max_indentation_level' => Expect::int()->min(0)->default(16),
     445            ]),
    441446            'slug_normalizer' => Expect::structure([
    442447                'instance' => Expect::type(TextNormalizerInterface::class)->default(new SlugNormalizer()),
    443448                'max_length' => Expect::int()->min(0)->default(255),
    444449                'unique' => Expect::anyOf(UniqueSlugNormalizerInterface::DISABLED, UniqueSlugNormalizerInterface::PER_ENVIRONMENT, UniqueSlugNormalizerInterface::PER_DOCUMENT)->default(UniqueSlugNormalizerInterface::PER_DOCUMENT),
     450                'reserved' => Expect::listOf('string')->default([]),
    445451            ]),
    446452        ]);
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/Attributes/Event/AttributesListener.php

    r3571618 r3657956  
    2525use League\CommonMark\Node\Node;
    2626
     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 */
    2732final class AttributesListener
    2833{
    … …  
    4550    public function processDocument(DocumentParsedEvent $event): void
    4651    {
     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
    4764        foreach ($event->getDocument()->iterator() as $node) {
    4865            if (! ($node instanceof Attributes || $node instanceof AttributesInline)) {
    … …  
    5067            }
    5168
    52             [$target, $direction] = self::findTargetAndDirection($node);
     69            [$target, $direction] = self::findTargetAndDirection($node, $resolved);
    5370
    5471            if ($target instanceof Node) {
    … …  
    5875                }
    5976
    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;
    62171                } 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
    75292     *
    76293     * @return array<Node|string|null>
    77294     */
    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
    80305        $target    = null;
    81306        $direction = null;
    82307        $previous  = $next = $node;
     308        /** @var list<Attributes> $shared */
     309        $shared = [];
    83310        while (true) {
    84311            $previous = self::getPrevious($previous);
    … …  
    95322
    96323            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;
    98334            }
    99335
    … …  
    111347                break;
    112348            }
    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;
    116370    }
    117371
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/Attributes/Parser/AttributesBlockContinueParser.php

    r3571618 r3657956  
    3232
    3333    /**
     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    /**
    3455     * @param array<string, mixed> $attributes The attributes identified by the block start parser
    3556     * @param AbstractBlock        $container  The node we were in when these attributes were discovered
    … …  
    4061
    4162        $this->container = $container;
     63
     64        $this->absorb($attributes);
    4265    }
    4366
    … …  
    5881        if ($cursor->isAtEnd() && $attributes !== []) {
    5982            // 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);
    6486
    6587            // Tell the core parser we've consumed everything
    … …  
    7698    }
    7799
     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
    78128    public function closeBlock(): void
    79129    {
     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
    80143        // Attributes appearing at the very end of the document won't have any last lines to check
    81144        // so we can make that determination here
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/Attributes/Util/AttributesHelper.php

    r3571618 r3657956  
    2525{
    2626    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";
    2835
    2936    /**
    … …  
    4754        // while dealing with the fact that attributes can technically contain curly braces.
    4855        // 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);
    5057        if ($attributeExpression === null) {
    5158            $cursor->restoreState($state);
    … …  
    6067        /** @var array<string, mixed> $attributes */
    6168        $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)) {
    6370            if ($attribute[0] === '#') {
    6471                $attributes['id'] = \substr($attribute, 1);
    … …  
    8794            }
    8895
    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) {
    9198                    $attributes['class'][] = $class;
    9299                }
    93100            } else {
    94                 $attributes[\trim($name)] = \trim($value);
     101                $attributes[\trim($name, self::WHITESPACE)] = \trim($value, self::WHITESPACE);
    95102            }
    96103        }
    … …  
    120127            $arg = (array) $arg;
    121128            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) {
    127130                    $attributes['class'][] = $class;
    128131                }
    … …  
    142145
    143146    /**
     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    /**
    144163     * @param array<string, mixed> $attributes
    145164     * @param list<string>         $allowList
    … …  
    152171
    153172        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);
    155182
    156183            // Remove any unsafe links
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/Autolink/UrlAutolinkParser.php

    r3571618 r3657956  
    2424
    2525    // 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 = '~
    2727        (
    2828            # Must start with a supported scheme + auth, or "www"
    … …  
    5050            (?:\? (?:[\pL\pN\-._\~!$&\'\[\]()*+,;=:@/?]|%%[0-9A-Fa-f]{2})* )? # a query (optional)
    5151            (?:\# (?:[\pL\pN\-._\~!$&\'()*+,;=:@/?]|%%[0-9A-Fa-f]{2})* )?     # a fragment (optional)
    52         )~ixu';
     52        )~ixuA';
    5353
    5454    /**
    … …  
    100100        }
    101101
    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())) {
    104107            return false;
    105108        }
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/CommonMark/Delimiter/Processor/EmphasisDelimiterProcessor.php

    r3571618 r3657956  
    114114            $closer->canOpen() ? 'canOpen' : 'cannotOpen',
    115115            $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),
    117120        );
    118121    }
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/CommonMark/Parser/Block/FencedCodeParser.php

    r3571618 r3657956  
    5252        }
    5353
    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--;
    5859        }
    5960
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/CommonMark/Parser/Block/FencedCodeStartParser.php

    r3571618 r3657956  
    2828
    2929        $indent = $cursor->getIndent();
    30         $fence  = $cursor->match('/^[ \t]*(?:`{3,}(?!.*`)|~{3,})/');
     30        $fence  = $cursor->matchInPlace('/\G[ \t]*(?:`{3,}+(?!.*`)|~{3,})/');
    3131        if ($fence === null) {
    3232            return BlockStart::none();
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/CommonMark/Parser/Inline/BacktickParser.php

    r3571618 r3657956  
    5757            $code = $cursor->getSubstring($currentPosition, $cursor->getPosition() - $currentPosition - \strlen($ticks));
    5858
    59             $c = \preg_replace('/\n/m', ' ', $code) ?? '';
     59            $c = \str_replace("\n", ' ', $code);
    6060
    6161            if (
    … …  
    6363                $c[0] === ' ' &&
    6464                \substr($c, -1, 1) === ' ' &&
    65                 \preg_match('/[^ ]/', $c)
     65                \strspn($c, ' ') !== \strlen($c)
    6666            ) {
    6767                $c = \substr($c, 1, -1);
    … …  
    111111        }
    112112
    113         while ($ticks = $cursor->match('/`{1,' . self::MAX_BACKTICKS . '}/m')) {
     113        while ($ticks = $cursor->matchInPlace('/`{1,' . self::MAX_BACKTICKS . '}/')) {
    114114            $numTicks = \strlen($ticks);
    115115
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/CommonMark/Parser/Inline/CloseBracketParser.php

    r3571618 r3657956  
    182182            $start  = $opener->getPosition();
    183183            $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            }
    184194        } else {
    185195            $cursor->restoreState($savePos);
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/DefaultAttributes/ApplyDefaultAttributesProcessor.php

    r3571618 r3657956  
    1616use League\CommonMark\Event\DocumentParsedEvent;
    1717use League\CommonMark\Extension\Attributes\Util\AttributesHelper;
     18use League\CommonMark\Node\Node;
    1819use League\Config\ConfigurationAwareInterface;
    1920use League\Config\ConfigurationInterface;
     21use League\Config\Exception\InvalidConfigurationException;
    2022
    2123final class ApplyDefaultAttributesProcessor implements ConfigurationAwareInterface
    … …  
    2325    private ConfigurationInterface $config;
    2426
     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
    2534    public function onDocumentParsed(DocumentParsedEvent $event): void
    2635    {
    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;
    2941
    3042        // Don't bother iterating if no default attributes are configured
    … …  
    4153            $newAttributes = [];
    4254            foreach ($attributesToApply as $name => $value) {
    43                 if (\is_callable($value)) {
     55                if ($value instanceof \Closure) {
    4456                    $value = $value($node);
    4557                    // Callables are allowed to return `null` indicating that no changes should be made
    … …  
    6375        $this->config = $configuration;
    6476    }
     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    }
    65151}
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/DefaultAttributes/DefaultAttributesExtension.php

    r3571618 r3657956  
    2222final class DefaultAttributesExtension implements ConfigurableExtensionInterface
    2323{
     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
    2429    public function configureSchema(ConfigurationBuilderInterface $builder): void
    2530    {
    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        }));
    3370    }
    3471
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/DescriptionList/Parser/DescriptionStartParser.php

    r3571618 r3657956  
    3030
    3131        $cursor->advanceToNextNonSpaceOrTab();
    32         if ($cursor->match('/^:[ \t]+/') === null) {
     32        if ($cursor->matchInPlace('/\G:[ \t]+/') === null) {
    3333            return BlockStart::none();
    3434        }
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/Footnote/Event/GatherFootnotesListener.php

    r3571618 r3657956  
    3131    public function onDocumentParsed(DocumentParsedEvent $event): void
    3232    {
    33         $document  = $event->getDocument();
    34         $footnotes = [];
     33        $document    = $event->getDocument();
     34        $footnotes   = [];
     35        $definitions = [];
     36        $discarded   = [];
    3537
     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         */
    3653        foreach ($document->iterator(NodeIterator::FLAG_BLOCKS_ONLY) as $node) {
    3754            if (! $node instanceof Footnote) {
    … …  
    3956            }
    4057
     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) {
    4169            // Look for existing reference with footnote label
    4270            $ref = $document->getReferenceMap()->get($node->getReference()->getLabel());
    … …  
    5078
    5179            $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]);
    5482            }
     83        }
     84
     85        foreach ($discarded as $duplicate) {
     86            $duplicate->detach();
    5587        }
    5688
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/Footnote/Event/NumberFootnotesListener.php

    r3571618 r3657956  
    2727        $usedLabels   = [];
    2828        $usedCounters = [];
     29        $backrefs     = [];
    2930
    3031        foreach ($document->iterator() as $node) {
    … …  
    6061
    6162            /*
    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.
    6470             */
    65             $document->data->append($existingReference->getDestination(), $newReference);
     71            $backrefs[$existingReference->getDestination()][] = $newReference;
    6672
    6773            $usedLabels[$label]   = 1;
    … …  
    7278            }
    7379        }
     80
     81        $document->data->set('footnote/backrefs', $backrefs);
    7482    }
    7583}
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/Footnote/FootnoteExtension.php

    r3571618 r3657956  
    4545            'container_add_hr' => Expect::bool(true),
    4646            'container_class' => Expect::string('footnotes'),
     47            'enable_inline_footnotes' => Expect::bool(true),
    4748            'ref_class' => Expect::string('footnote-ref'),
    4849            'ref_id_prefix' => Expect::string('fnref:'),
    … …  
    5455    public function register(EnvironmentBuilderInterface $environment): void
    5556    {
     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
    5662        $environment->addBlockStartParser(new FootnoteStartParser(), 51);
    57         $environment->addInlineParser(new AnonymousFootnoteRefParser(), 35);
    5863        $environment->addInlineParser(new FootnoteRefParser(), 51);
    5964
    … …  
    6368        $environment->addRenderer(FootnoteBackref::class, new FootnoteBackrefRenderer());
    6469
    65         $environment->addEventListener(DocumentParsedEvent::class, [new AnonymousFootnotesListener(), 'onDocumentParsed'], 40);
    6670        $environment->addEventListener(DocumentParsedEvent::class, [new FixOrphanedFootnotesAndRefsListener(), 'onDocumentParsed'], 30);
    6771        $environment->addEventListener(DocumentParsedEvent::class, [new NumberFootnotesListener(), 'onDocumentParsed'], 20);
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/FrontMatter/FrontMatterParser.php

    r3571618 r3657956  
    2424    private FrontMatterDataParserInterface $frontMatterParser;
    2525
    26     private const REGEX_FRONT_MATTER = '/^---\\R.*?\\R---\\R/s';
     26    private const REGEX_FRONT_MATTER = '/\G---\\R.*?\\R---\\R/s';
    2727
    2828    public function __construct(FrontMatterDataParserInterface $frontMatterParser)
    … …  
    3939
    4040        // Locate the front matter
    41         $frontMatter = $cursor->match(self::REGEX_FRONT_MATTER);
     41        $frontMatter = $cursor->matchInPlace(self::REGEX_FRONT_MATTER);
    4242        if ($frontMatter === null) {
    4343            return new MarkdownInputWithFrontMatter($markdownContent);
    … …  
    5454
    5555        // 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+/');
    5757
    5858        // 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  
    7474        if ($hidden) {
    7575            $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');
    7679        }
    7780
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/Highlight/MarkDelimiterProcessor.php

    r3571618 r3657956  
    1515
    1616use League\CommonMark\Delimiter\DelimiterInterface;
    17 use League\CommonMark\Delimiter\Processor\DelimiterProcessorInterface;
     17use League\CommonMark\Delimiter\Processor\CacheableDelimiterProcessorInterface;
    1818use League\CommonMark\Node\Inline\AbstractStringContainer;
    1919
    20 class MarkDelimiterProcessor implements DelimiterProcessorInterface
     20class MarkDelimiterProcessor implements CacheableDelimiterProcessorInterface
    2121{
    2222    public function getOpeningCharacter(): string
    … …  
    6565    public function getCacheKey(DelimiterInterface $closer): string
    6666    {
    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);
    6872    }
    6973}
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/Mention/Generator/CallbackGenerator.php

    r3571618 r3657956  
    4242        }
    4343
    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) {
    4549            return $result;
    46         }
    47 
    48         if ($result instanceof Mention && $result->hasUrl()) {
    49             return $mention;
    5050        }
    5151
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/Strikethrough/StrikethroughDelimiterProcessor.php

    r3571618 r3657956  
    6565    public function getCacheKey(DelimiterInterface $closer): string
    6666    {
    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);
    6872    }
    6973}
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/Table/TableStartParser.php

    r3571618 r3657956  
    108108                    }
    109109
    110                     if ($cursor->match('/^-+/') === null) {
     110                    if ($cursor->matchInPlace('/\G-+/') === null) {
    111111                        // Need at least one dash
    112112                        return [];
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/TableOfContents/TableOfContentsBuilder.php

    r3571618 r3657956  
    1515
    1616use League\CommonMark\Event\DocumentParsedEvent;
     17use League\CommonMark\Event\DocumentPreRenderEvent;
    1718use League\CommonMark\Extension\CommonMark\Node\Block\Heading;
     19use League\CommonMark\Extension\CommonMark\Node\Block\ListItem;
    1820use League\CommonMark\Extension\HeadingPermalink\HeadingPermalink;
    1921use League\CommonMark\Extension\TableOfContents\Node\TableOfContents;
    2022use League\CommonMark\Extension\TableOfContents\Node\TableOfContentsPlaceholder;
     23use League\CommonMark\Extension\TableOfContents\Node\TableOfContentsReference;
    2124use League\CommonMark\Node\Block\Document;
    2225use League\CommonMark\Node\NodeIterator;
    … …  
    9093    private function replacePlaceholders(Document $document, TableOfContents $toc): void
    9194    {
     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
    92102        foreach ($document->iterator(NodeIterator::FLAG_BLOCKS_ONLY) as $node) {
    93103            // Add the block once we find a placeholder
    … …  
    96106            }
    97107
    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;
    99123        }
     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;
    100153    }
    101154
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/TableOfContents/TableOfContentsExtension.php

    r3571618 r3657956  
    1616use League\CommonMark\Environment\EnvironmentBuilderInterface;
    1717use League\CommonMark\Event\DocumentParsedEvent;
     18use League\CommonMark\Event\DocumentPreRenderEvent;
    1819use League\CommonMark\Extension\CommonMark\Node\Block\ListBlock;
    1920use League\CommonMark\Extension\CommonMark\Renderer\Block\ListBlockRenderer;
    … …  
    2122use League\CommonMark\Extension\TableOfContents\Node\TableOfContents;
    2223use League\CommonMark\Extension\TableOfContents\Node\TableOfContentsPlaceholder;
     24use League\CommonMark\Extension\TableOfContents\Node\TableOfContentsReference;
    2325use League\Config\ConfigurationBuilderInterface;
    2426use Nette\Schema\Expect;
    … …  
    3638            'html_class' => Expect::string()->default('table-of-contents'),
    3739            'placeholder' => Expect::anyOf(Expect::string(), Expect::null())->default(null),
     40            'max_placeholder_entries' => Expect::anyOf(Expect::int()->min(0), Expect::null())->default(null),
    3841        ]));
    3942    }
    … …  
    4144    public function register(EnvironmentBuilderInterface $environment): void
    4245    {
     46        $builder = new TableOfContentsBuilder();
     47
    4348        $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);
    4550
    4651        // phpcs:ignore SlevomatCodingStandard.ControlStructures.EarlyExit.EarlyExitNotUsed
    … …  
    4954            // If a placeholder cannot be replaced with a TOC element this renderer will ensure the parser won't error out
    5055            $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']);
    5160        }
    5261    }
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/TableOfContents/TableOfContentsGenerator.php

    r3571618 r3657956  
    6161        $this->minHeadingLevel       = $minHeadingLevel;
    6262        $this->maxHeadingLevel       = $maxHeadingLevel;
    63         $this->fragmentPrefix        = $fragmentPrefix;
    64 
    65         if ($fragmentPrefix !== '') {
    66             $this->fragmentPrefix .= '-';
    67         }
     63        $this->fragmentPrefix        = $fragmentPrefix === '' ? '' : $fragmentPrefix . '-';
    6864    }
    6965
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Extension/TableOfContents/TableOfContentsPlaceholderParser.php

    r3571618 r3657956  
    5959
    6060                // 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) {
    6262                    return BlockStart::none();
    6363                }
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Node/Inline/AdjacentTextMerger.php

    r3571618 r3657956  
    9090        }
    9191
    92         $s = $first->getLiteral();
    93 
    9492        $node = $first->next();
    9593        $stop = $last->next();
    9694        while ($node !== $stop && $node instanceof Text) {
    97             $s     .= $node->getLiteral();
     95            $first->append($node->getLiteral());
    9896            $unlink = $node;
    9997            $node   = $node->next();
    10098            $unlink->detach();
    10199        }
    102 
    103         $first->setLiteral($s);
    104100    }
    105101}
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Node/Node.php

    r3571618 r3657956  
    2222abstract class Node
    2323{
    24     /** @psalm-readonly */
     24    /** @psalm-readonly-allow-private-mutation */
    2525    public Data $data;
    2626
    … …  
    244244        $this->previous = null;
    245245        $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;
    249250
    250251        // The original children get cloned and re-added
    … …  
    252253            $this->appendChild(clone $child);
    253254        }
     255
     256        // The data belongs to a single node, so the two nodes each need their own copy
     257        $this->data = clone $this->data;
    254258    }
    255259
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Normalizer/UniqueSlugNormalizer.php

    r3571618 r3657956  
    1818{
    1919    private TextNormalizerInterface $innerNormalizer;
    20     /** @var array<string, bool> */
    21     private array $alreadyUsed = [];
    2220
    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 = [])
    2441    {
    2542        $this->innerNormalizer = $innerNormalizer;
     43
     44        foreach ($reservedSlugs as $slug) {
     45            $this->reserved[$slug] = 1;
     46        }
     47
     48        $this->alreadyUsed = $this->reserved;
    2649    }
    2750
    2851    public function clearHistory(): void
    2952    {
    30         $this->alreadyUsed = [];
     53        $this->alreadyUsed = $this->reserved;
    3154    }
    3255
    … …  
    4063        $normalized = $this->innerNormalizer->normalize($text, $context);
    4164
    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"])) {
    4671                ++$suffix;
    47             } while (\array_key_exists("$normalized-$suffix", $this->alreadyUsed));
     72            }
     73
     74            $this->alreadyUsed[$normalized] = $suffix + 1;
    4875
    4976            $normalized = "$normalized-$suffix";
    5077        }
    5178
    52         $this->alreadyUsed[$normalized] = true;
     79        $this->alreadyUsed[$normalized] = 1;
    5380
    5481        return $normalized;
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Parser/Cursor.php

    r3571618 r3657956  
    2020    public const INDENT_LEVEL = 4;
    2121
     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
    2231    /** @psalm-readonly */
    2332    private string $line;
    … …  
    5463    private bool $isMultibyte;
    5564
    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     */
    5793    private array $charCache = [];
    5894
    … …  
    70106        $this->isMultibyte     = $this->length !== \strlen($line);
    71107        $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);
    72193    }
    73194
    … …  
    87208        $cols = $this->column;
    88209
    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];
    96230
    97231            if ($c === ' ') {
    … …  
    120254
    121255        if ($this->isMultibyte) {
    122             return $this->charCache[$index] ??= \mb_substr($this->line, $index, 1, 'UTF-8');
     256            return $this->charAt($index);
    123257        }
    124258
    … …  
    162296
    163297        if ($this->isMultibyte) {
    164             return $this->charCache[$index] ??= \mb_substr($this->line, $index, 1, 'UTF-8');
     298            return $this->charAt($index);
    165299        }
    166300
    … …  
    178312
    179313        if ($this->isMultibyte) {
    180             return $this->charCache[$this->currentPosition] ??= \mb_substr($this->line, $this->currentPosition, 1, 'UTF-8');
     314            return $this->charAt($this->currentPosition);
    181315        }
    182316
    … …  
    233367        }
    234368
    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        }
    238376
    239377        if ($characters === 1) {
    240378            $asArray = [$nextFewChars];
    241379        } elseif ($this->isMultibyte) {
    242             /** @var string[] $asArray */
     380            /** @var list<string> $asArray */
    243381            $asArray = \mb_str_split($nextFewChars, 1, 'UTF-8');
    244382        } else {
    … …  
    332470        }
    333471
    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        }
    341488
    342489        $this->advanceBy($increment);
    … …  
    375522
    376523        $subString = $this->isMultibyte ?
    377             \mb_substr($this->line, $position, null, 'UTF-8') :
     524            \substr($this->line, $this->byteOffset($position)) :
    378525            \substr($this->line, $position);
    379526
    … …  
    392539
    393540    /**
    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.
    395547     *
    396548     * Returns the matching text and advances to the end of that match
    … …  
    406558        }
    407559
    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.
    411561        if ($this->isMultibyte) {
    412             // PREG_OFFSET_CAPTURE always returns the byte offset, not the char offset, which is annoying
    413562            $offset      = \mb_strlen(\substr($subject, 0, $matches[0][1]), 'UTF-8');
    414563            $matchLength = \mb_strlen($matches[0][0], 'UTF-8');
    … …  
    418567        }
    419568
    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
    422638        $this->advanceBy($offset + $matchLength);
    423639
    … …  
    466682    }
    467683
     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
    468700    public function getPreviousText(): string
    469701    {
    470702        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);
    472706        }
    473707
    … …  
    478712    {
    479713        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);
    481731        }
    482732
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Parser/InlineParserEngine.php

    r3571618 r3657956  
    7979            $parsed = false;
    8080            foreach ($parsers as [$parser, $matches]) {
    81                 \assert($parser instanceof InlineParserInterface);
    8281                if ($parser->parse($inlineParserContext->withMatches($matches))) {
    8382                    // A parser has successfully handled the text at the given position; don't consider any others at this position
    … …  
    150149
    151150            // For each part that matched...
     151            $lastByteOffset = 0;
     152            $lastCharOffset = 0;
    152153            foreach ($matches as $match) {
    153154                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;
    156161                } else {
    157162                    $offset = \intval($match[0][1]);
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Util/HtmlElement.php

    r3571618 r3657956  
    112112    public function setContents($contents): self
    113113    {
    114         $this->contents = $contents ?? ''; // @phpstan-ignore-line
     114        $this->contents = $contents ?? '';
    115115
    116116        return $this;
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Util/LinkParserHelper.php

    r3571618 r3657956  
    4747    public static function parseLinkLabel(Cursor $cursor): int
    4848    {
    49         $match = $cursor->match('/^\[(?:[^\\\\\[\]]|\\\\.){0,1000}\]/');
     49        $match = $cursor->matchInPlace('/\G\[(?:[^\\\\\[\]]|\\\\.){0,1000}\]/');
    5050        if ($match === null) {
    5151            return 0;
    … …  
    6363    public static function parsePartialLinkLabel(Cursor $cursor): ?string
    6464    {
    65         return $cursor->match('/^(?:[^\\\\\[\]]++|\\\\.?)*+/');
     65        return $cursor->matchInPlace('/\G(?:[^\\\\\[\]]++|\\\\.?)*+/');
    6666    }
    6767
    … …  
    7373    public static function parseLinkTitle(Cursor $cursor): ?string
    7474    {
    75         if ($title = $cursor->match('/' . RegexHelper::PARTIAL_LINK_TITLE . '/')) {
     75        if ($title = $cursor->matchInPlace('/\G' . RegexHelper::PARTIAL_LINK_TITLE_UNANCHORED . '/')) {
    7676            // Chop off quotes from title and unescape
    7777            return RegexHelper::unescape(\substr($title, 1, -1));
    … …  
    8585        $endDelimiter = \preg_quote($endDelimiter, '/');
    8686        $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) {
    8888            return null;
    8989        }
    … …  
    9494    private static function manuallyParseLinkDestination(Cursor $cursor): ?string
    9595    {
    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();
    97104        $openParens = 0;
    98         $len        = \strlen($remainder);
     105        $len        = \strlen($line) - $start;
    99106        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])) {
    102109                $i++;
    103110            } elseif ($c === '(') {
    … …  
    126133        }
    127134
    128         $destination = \substr($remainder, 0, $i);
     135        $destination = \substr($line, $start, $i);
    129136        $cursor->advanceBy(\mb_strlen($destination, 'UTF-8'));
    130137
    … …  
    150157        }
    151158
    152         if ($res = $cursor->match(RegexHelper::REGEX_LINK_DESTINATION_BRACES)) {
     159        if ($res = $cursor->matchInPlace('/\G' . RegexHelper::PARTIAL_LINK_DESTINATION_BRACES . '/')) {
    153160            self::$lastCursorLacksClosingBrace = false;
    154161
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Util/RegexHelper.php

    r3571618 r3657956  
    6262    public const PARTIAL_HTMLBLOCKOPEN         = '<(?:' . self::PARTIAL_BLOCKTAGNAME . '(?:[\s\/>]|$)' . '|' .
    6363        '\/' . 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])*+"' .
    6569        '|' . '\'(' . self::PARTIAL_ESCAPED_CHAR . '|[^\'\x00])*+\'' .
    6670        '|' . '\((' . 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;
    6773
    6874    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';
    7076    public const REGEX_SAFE_DATA_PROTOCOL = '/^data:image\/(?:png|gif|jpeg|webp)/i';
    7177    public const REGEX_NON_SPACE          = '/[^ \t\f\v\r\n]/';
    … …  
    7480    public const REGEX_UNICODE_WHITESPACE_CHAR = '/^\pZ|\s/u';
    7581    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 . '/';
    7789
    7890    /**
    … …  
    239251    public static function isLinkPotentiallyUnsafe(string $url): bool
    240252    {
     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
    241258        return \preg_match(self::REGEX_UNSAFE_PROTOCOL, $url) !== 0 && \preg_match(self::REGEX_SAFE_DATA_PROTOCOL, $url) === 0;
    242259    }
  • markdown-renderer-for-github/trunk/vendor/league/commonmark/src/Xml/XmlRenderer.php

    r3571618 r3657956  
    3737        $this->environment->dispatch(new DocumentPreRenderEvent($document, 'xml'));
    3838
     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
    3943        $xml = '<?xml version="1.0" encoding="UTF-8"?>';
    4044
    … …  
    5357                $attrs = $renderer->getXmlAttributes($node);
    5458
    55                 $xml .= "\n" . \str_repeat(self::INDENTATION, $indent);
     59                $xml .= "\n" . \str_repeat(self::INDENTATION, \min($indent, $maxIndent));
    5660                $xml .= self::tag($tagName, $attrs, $selfClosing);
    5761
    … …  
    6973            } elseif (! $closeImmediately) {
    7074                $indent--;
    71                 $xml .= "\n" . \str_repeat(self::INDENTATION, $indent);
     75                $xml .= "\n" . \str_repeat(self::INDENTATION, \min($indent, $maxIndent));
    7276                $xml .= self::tag('/' . $tagName);
    7377            }
    … …  
    7781    }
    7882
     83    private function getMaxIndentationLevel(): int
     84    {
     85        return $this->environment->getConfiguration()->get('xml/max_indentation_level');
     86    }
     87
    7988    /**
    8089     * @param array<string, string|int|float|bool> $attrs
    8190     */
    82     private static function tag(string $name, array $attrs = [], bool $selfClosing = \false): string
     91    private static function tag(string $name, array $attrs = [], bool $selfClosing = false): string
    8392    {
    8493        $result = '<' . $name;
    … …  
    113122        }
    114123
    115         // @phpstan-ignore-next-line
    116124        throw new InvalidArgumentException('$value must be a string, int, float, or bool');
    117125    }
  • markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/ArrayList.php

    r3571618 r3657956  
    99
    1010use Nette;
    11 use function array_slice, array_splice, count, is_int;
     11use function array_splice, array_unshift, count, is_int;
    1212
    1313
    … …  
    124124        public function prepend(mixed $value): void
    125125        {
    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));
    129129        }
    130130}
  • markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/Arrays.php

    r3571618 r3657956  
    305305                $parts = is_array($path)
    306306                        ? $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);
    308308
    309309                if (!$parts || $parts === ['->'] || $parts[0] === '=' || $parts[0] === '|') {
  • markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/FileSystem.php

    r3571618 r3657956  
    99
    1010use 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;
     11use 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;
    1212use const DIRECTORY_SEPARATOR;
    1313
    … …  
    235235
    236236        /**
     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        /**
    237267         * Sets file permissions to `$fileMode` or directory permissions to `$dirMode`.
    238268         * 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  
    99
    1010use 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;
     11use 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;
     12use const DIRECTORY_SEPARATOR, E_USER_DEPRECATED, GLOB_NOESCAPE, GLOB_NOSORT, GLOB_ONLYDIR;
    1313
    1414
    … …  
    4848
    4949        /**
    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.
    5151         * @param  string|list<string>  $masks
    5252         */
    … …  
    5454        {
    5555                $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.
    6263         * @param  string|list<string>  $masks
    6364         */
    … …  
    7071
    7172        /**
    72          * Begins search for directories matching mask.
     73         * Begins search for directories matching mask. The ** wildcard searches recursively.
    7374         * @param  string|list<string>  $masks
    7475         */
    … …  
    104105        {
    105106                foreach ($masks as $mask) {
    106                         $mask = FileSystem::unixSlashes($mask);
     107                        $orig = $mask;
    107108                        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.
    124135         * @param  string|list<string>  $paths
    125136         */
    … …  
    133144
    134145        /**
    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.
    136147         * @param  string|list<string>  $paths
    137148         */
    … …  
    139150        {
    140151                $paths = is_array($paths) ? $paths : func_get_args(); // compatibility with variadic
    141                 $this->addLocation($paths, '/**');
     152                $this->addLocation($paths, DIRECTORY_SEPARATOR . '**');
    142153                return $this;
    143154        }
    … …  
    151162                                throw new Nette\InvalidArgumentException("Invalid directory '$path'");
    152163                        }
    153                         $path = rtrim(FileSystem::unixSlashes($path), '/');
     164                        $path = rtrim($path, '/\\');
    154165                        $this->in[] = $path . $ext;
    155166                }
    … …  
    217228
    218229        /**
    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.
    220232         * @param  string|list<string>  $masks
    221233         */
    … …  
    224236                $masks = is_array($masks) ? $masks : func_get_args(); // compatibility with variadic
    225237                foreach ($masks as $mask) {
     238                        $orig = $mask;
    226239                        $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'");
    229245                        }
    230246                        $end = $m[3];
    231                         $re = $this->buildPattern($m[2]);
     247                        $re = $this->buildPattern(self::expandGlobStar($m[2]));
    232248                        $filter = fn(FileInfo $file): bool => ($end && !$file->isDir())
    233249                                || !preg_match($re, FileSystem::unixSlashes($file->getRelativePathname()));
    234250
    235251                        $this->descentFilter($filter);
    236                         if ($end !== '/*') {
     252                        if ($end === '' || $end === '/') {
    237253                                $this->filter($filter);
    238254                        }
    … …  
    341357                                yield from $item->getIterator();
    342358                        } else {
    343                                 $item = FileSystem::platformSlashes($item);
    344359                                yield $item => new FileInfo($item);
    345360                        }
    … …  
    362377
    363378                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);
    365380                } catch (\UnexpectedValueException $e) {
    366381                        if ($this->ignoreUnreadableDirs) {
    … …  
    371386                }
    372387
    373                 $files = $this->convertToFiles($pathNames, implode('/', $subdirs), FileSystem::isAbsolute($dir));
     388                $files = $this->convertToFiles($pathNames, implode(DIRECTORY_SEPARATOR, $subdirs), FileSystem::isAbsolute($dir));
    374389
    375390                if ($this->sort) {
    … …  
    418433                foreach ($pathNames as $pathName) {
    419434                        if (!$absolute) {
    420                                 $pathName = preg_replace('~\.?/~A', '', $pathName);
    421                         }
    422                         $pathName = FileSystem::platformSlashes($pathName);
     435                                $pathName = preg_replace('~\.?[\\\/]~A', '', $pathName);
     436                        }
    423437                        yield new FileInfo($pathName, $relativePath);
    424438                }
    … …  
    458472                                foreach ($this->in ?: ['.'] as $in) {
    459473                                        $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);
    461475                                }
    462476                        }
    … …  
    489503        private static function splitRecursivePart(string $path): array
    490504        {
    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);
    493509                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];
    496512        }
    497513
    … …  
    502518        private function buildPattern(string $mask): string
    503519        {
     520                $mask = FileSystem::unixSlashes($mask);
    504521                if ($mask === '*') {
    505522                        return '##';
  • markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/Html.php

    r3571618 r3657956  
    99
    1010use 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 ENT_HTML5, ENT_NOQUOTES, ENT_QUOTES;
     11use 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;
     12use const E_USER_DEPRECATED, ENT_HTML5, ENT_NOQUOTES, ENT_QUOTES;
    1313
    1414
    … …  
    230230 * @method self wrap(?string $val)
    231231 *
     232 * @method static static text(mixed $text)
     233 * @method static static html(mixed $html)
     234 *
    232235 * @implements \IteratorAggregate<int, self|string>
    233236 * @implements \ArrayAccess<int, self|string>
    … …  
    282285
    283286        /**
     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        /**
    284297         * Returns an object representing HTML text.
     298         * @deprecated  use Html::html()
    285299         */
    286300        public static function fromHtml(string $html): static
    … …  
    292306        /**
    293307         * Returns an object representing plain text.
     308         * @deprecated  use Html::text()
    294309         */
    295310        public static function fromText(string $text): static
    … …  
    474489        final public function __call(string $m, array $args): mixed
    475490        {
     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
    476495                $p = substr($m, 0, 3);
    477496                if ($p === 'get' || $p === 'set' || $p === 'add') {
    … …  
    500519
    501520        /**
     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        /**
    502535         * Special setter for element's attribute.
    503536         * @param  array<string, mixed>  $query
    … …  
    573606        {
    574607                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;
    575623        }
    576624
    … …  
    814862                        $s .= ' ' . $key . '=' . $q
    815863                                . str_replace(
    816                                         ['&', $q, '<'],
    817                                         ['&amp;', $q === '"' ? '&quot;' : '&#39;', '<'],
     864                                        ['&', $q],
     865                                        ['&amp;', $q === '"' ? '&quot;' : '&#39;'],
    818866                                        $value,
    819867                                )
  • markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/Image.php

    r3571618 r3657956  
    328328                        ImageType::GIF => IMG_GIF,
    329329                        ImageType::WEBP => IMG_WEBP,
    330                         ImageType::AVIF => 256, // IMG_AVIF,
     330                        ImageType::AVIF => IMG_AVIF,
    331331                        ImageType::BMP => IMG_BMP,
    332332                        default => 0,
    … …  
    348348                        $flag & IMG_PNG ? ImageType::PNG : null,
    349349                        $flag & IMG_WEBP ? ImageType::WEBP : null,
    350                         $flag & 256 ? ImageType::AVIF : null, // IMG_AVIF
     350                        $flag & IMG_AVIF ? ImageType::AVIF : null,
    351351                        $flag & IMG_BMP ? ImageType::BMP : null,
    352352                ]);
  • markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/Iterables.php

    r3571618 r3657956  
    196196                        public function __construct(
    197197                                /** @var \Closure(): iterable<mixed, mixed> */
    198                                 private \Closure $factory,
     198                                private readonly \Closure $factory,
    199199                        ) {
    200200                        }
  • markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/Json.php

    r3571618 r3657956  
    99
    1010use Nette;
    11 use function defined, is_int, json_decode, json_encode, json_last_error, json_last_error_msg;
     11use function is_int, json_decode, json_encode, json_last_error, json_last_error_msg;
    1212use 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;
    1313
    … …  
    5252                }
    5353
    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;
    5655
    5756                $json = json_encode($value, $flags);
  • markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/ObjectHelpers.php

    r3571618 r3657956  
    221221                                        $prop = $name >= 'onA' && $name < 'on_' ? 'event' : true;
    222222                                }
    223                         } catch (\ReflectionException $e) {
     223                        } catch (\ReflectionException) {
    224224                        }
    225225                }
  • markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/Process.php

    r3571618 r3657956  
    99
    1010use Nette;
     11use function is_resource, is_string, strlen;
     12use const PHP_VERSION_ID;
    1113
    1214
    … …  
    4244        /** @var array<int, true> Output IDs whose target resource was supplied by the caller and must not be closed here. */
    4345        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 = [];
    4449        private float $startTime;
     50        private bool $detached = false;
    4551
    4652
    … …  
    114120                mixed $stdout,
    115121                mixed $stderr,
    116                 private ?float $timeout,
     122                private readonly ?float $timeout,
    117123        ) {
    118124                $descriptors = [
    … …  
    146152        public function __destruct()
    147153        {
     154                if ($this->detached) {
     155                        return;
     156                }
    148157                $this->outputBuffers = [];
    149158                $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();
    150177        }
    151178
    … …  
    190217        /**
    191218         * 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(): void
     219         * 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
    195222        {
    196223                foreach ([self::StdOut, self::StdErr] as $id) {
    197                         $this->readFromPipe($id);
     224                        $this->readFromPipe($id, $final);
    198225                }
    199226        }
    … …  
    398425         * is not captured or the pipe is already closed (or handed over to another process).
    399426         */
    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)) {
    403431                        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
    406445                } 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                }
    410460        }
    411461
    … …  
    471521                        $this->outputBuffers[$id] = '';
    472522                        $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'];
    476529
    477530                } else {
    … …  
    486539        private function close(): void
    487540        {
    488                 $this->drainPipes();
     541                $this->drainPipes(final: true);
    489542                $this->closeStdInput();
    490543                $this->closeOutputPipes();
    … …  
    495548        /**
    496549         * 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.)
    498551         */
    499552        private function closeOutputPipes(): void
  • markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/Reflection.php

    r3571618 r3657956  
    231231                        $tokens = \PhpToken::tokenize($code, TOKEN_PARSE);
    232232                } catch (\ParseError $e) {
    233                         trigger_error($e->getMessage(), E_USER_NOTICE);
     233                        trigger_error($e->getMessage());
    234234                        $tokens = [];
    235235                }
  • markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/Strings.php

    r3571618 r3657956  
    1010use JetBrains\PhpStorm\Language;
    1111use 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;
     12use 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;
    1313use 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;
    1414
    … …  
    334334        {
    335335                if (class_exists('Normalizer', autoload: false)) {
    336                         $left = \Normalizer::normalize($left, \Normalizer::FORM_D); // form NFD is faster
    337                         $right = \Normalizer::normalize($right, \Normalizer::FORM_D); // form NFD is faster
     336                        $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
    338338                }
    339339
    … …  
    386386                        extension_loaded('mbstring') => (int) mb_strlen($s, 'UTF-8'),
    387387                        extension_loaded('iconv') => (int) iconv_strlen($s, 'UTF-8'),
    388                         default => strlen(@utf8_decode($s)), // deprecated
     388                        default => strlen((string) preg_replace('#[\x80-\xBF]#', '', $s)), // strips UTF-8 continuation bytes
    389389                };
    390390        }
    … …  
    397397        {
    398398                $charlist = preg_quote($charlist, '#');
    399                 return self::replace($s, '#^[' . $charlist . ']+|[' . $charlist . ']+$#Du', '');
     399                return self::replace($s, '#^[' . $charlist . ']+|[' . $charlist . ']+$#Du');
    400400        }
    401401
  • markdown-renderer-for-github/trunk/vendor/nette/utils/src/Utils/Validators.php

    r3571618 r3657956  
    338338        {
    339339                $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
    340341                return (bool) preg_match(<<<XX
    341342                        (^(?n)
    … …  
    344345                                                [0-9$alpha]([-0-9$alpha]{0,61}[0-9$alpha])?\\.)?  # domain
    345346                                                [$alpha]([-0-9$alpha]{0,17}[$alpha])?   # top domain
    346                                         |\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}  # IPv4
    347                                         |\\[[0-9a-f:]{3,39}\\]                      # IPv6
     347                                        |$octet(\\.$octet){3}                       # IPv4
     348                                        |\\[[0-9a-f:]{3,39}]                        # IPv6
    348349                                )(:\\d{1,5})?                                   # port
    349350                                (/\\S*)?                                        # path
    … …  
    360361        public static function isUri(string $value): bool
    361362        {
    362                 return (bool) preg_match('#^[a-z\d+\.-]+:\S+$#Di', $value);
     363                return (bool) preg_match('#^[a-z\d+.-]+:\S+$#Di', $value);
    363364        }
    364365
Note: See TracChangeset for help on using the changeset viewer.